Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(36)

Unified Diff: webrtc/video/payload_router.cc

Issue 2990463002: [EXPERIMENTAL] Generic stereo codec with index header sending merged frames
Patch Set: Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webrtc/modules/video_coding/video_codec_initializer.cc ('k') | webrtc/video/video_send_stream.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/video/payload_router.cc
diff --git a/webrtc/video/payload_router.cc b/webrtc/video/payload_router.cc
index 7957451c2b4db05b3e034dc7f521ba7fc6d28475..fe9db4c78728458398b52ed2d5cc980058529437 100644
--- a/webrtc/video/payload_router.cc
+++ b/webrtc/video/payload_router.cc
@@ -10,6 +10,8 @@
#include "webrtc/video/payload_router.h"
+#include "webrtc/base/checks.h"
+#include "webrtc/base/logging.h"
#include "webrtc/modules/rtp_rtcp/include/rtp_rtcp.h"
#include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
#include "webrtc/modules/video_coding/include/video_codec_interface.h"
@@ -18,9 +20,38 @@
namespace webrtc {
namespace {
+// Map information from encoded_image into rtp.
+void CopyEncodedImage(const EncodedImage* encoded_image, RTPVideoHeader* rtp) {
+ rtp->rotation = encoded_image->rotation_;
+ rtp->content_type = encoded_image->content_type_;
+ if (encoded_image->timing_.is_timing_frame) {
+ rtp->video_timing.encode_start_delta_ms =
+ VideoSendTiming::GetDeltaCappedMs(
+ encoded_image->capture_time_ms_,
+ encoded_image->timing_.encode_start_ms);
+ rtp->video_timing.encode_finish_delta_ms =
+ VideoSendTiming::GetDeltaCappedMs(
+ encoded_image->capture_time_ms_,
+ encoded_image->timing_.encode_finish_ms);
+ rtp->video_timing.packetization_finish_delta_ms = 0;
+ rtp->video_timing.pacer_exit_delta_ms = 0;
+ rtp->video_timing.network_timstamp_delta_ms = 0;
+ rtp->video_timing.network2_timstamp_delta_ms = 0;
+ rtp->video_timing.is_timing_frame = true;
+ } else {
+ rtp->video_timing.is_timing_frame = false;
+ }
+ rtp->playout_delay = encoded_image->playout_delay_;
+}
+
// Map information from info into rtp.
-void CopyCodecSpecific(const CodecSpecificInfo* info, RTPVideoHeader* rtp) {
- RTC_DCHECK(info);
+void CopyCodecSpecific(const CodecSpecificInfo* info,
+ const EncodedImage* encoded_image,
+ RTPVideoHeader* rtp) {
+ CopyEncodedImage(encoded_image, rtp);
+ if (!info)
+ return;
+
switch (info->codecType) {
case kVideoCodecVP8: {
rtp->codec = kRtpVideoVp8;
@@ -82,6 +113,30 @@ void CopyCodecSpecific(const CodecSpecificInfo* info, RTPVideoHeader* rtp) {
rtp->codec = kRtpVideoGeneric;
rtp->simulcastIdx = info->codecSpecific.generic.simulcast_idx;
return;
+ case kVideoCodecStereo: {
+ CodecSpecificInfo* codec_specific_info =
+ const_cast<CodecSpecificInfo*>(info);
+ codec_specific_info->codecType = info->stereoInfo.stereoCodecType;
+ CopyCodecSpecific(codec_specific_info, encoded_image, rtp);
+
+ rtp->stereoInfo.stereoCodecType = rtp->codec;
+ rtp->codec = kRtpVideoStereo;
+ rtp->stereoInfo.num_frames = info->stereoInfo.num_frames;
+ for (int stereo_idx = 0; stereo_idx < info->stereoInfo.num_frames;
+ ++stereo_idx) {
+ LOG(LS_ERROR) << __func__;
+ rtp->stereoInfo.encoded_images[stereo_idx] =
+ info->stereoInfo.encoded_images[stereo_idx];
+ rtp->stereoInfo.fragmentations[stereo_idx] =
+ info->stereoInfo.fragmentations[stereo_idx];
+ RTPVideoHeader* header = new RTPVideoHeader();
+ memset(&header, 0, sizeof(RTPVideoHeader));
+ CopyCodecSpecific(info->stereoInfo.codec_specific_infos[stereo_idx],
+ rtp->stereoInfo.encoded_images[stereo_idx], header);
+ rtp->stereoInfo.rtp_video_headers[stereo_idx] = header;
+ }
+ return;
+ }
default:
return;
}
@@ -126,28 +181,7 @@ EncodedImageCallback::Result PayloadRouter::OnEncodedImage(
RTPVideoHeader rtp_video_header;
memset(&rtp_video_header, 0, sizeof(RTPVideoHeader));
- if (codec_specific_info)
- CopyCodecSpecific(codec_specific_info, &rtp_video_header);
- rtp_video_header.rotation = encoded_image.rotation_;
- rtp_video_header.content_type = encoded_image.content_type_;
- if (encoded_image.timing_.is_timing_frame) {
- rtp_video_header.video_timing.encode_start_delta_ms =
- VideoSendTiming::GetDeltaCappedMs(
- encoded_image.capture_time_ms_,
- encoded_image.timing_.encode_start_ms);
- rtp_video_header.video_timing.encode_finish_delta_ms =
- VideoSendTiming::GetDeltaCappedMs(
- encoded_image.capture_time_ms_,
- encoded_image.timing_.encode_finish_ms);
- rtp_video_header.video_timing.packetization_finish_delta_ms = 0;
- rtp_video_header.video_timing.pacer_exit_delta_ms = 0;
- rtp_video_header.video_timing.network_timstamp_delta_ms = 0;
- rtp_video_header.video_timing.network2_timstamp_delta_ms = 0;
- rtp_video_header.video_timing.is_timing_frame = true;
- } else {
- rtp_video_header.video_timing.is_timing_frame = false;
- }
- rtp_video_header.playout_delay = encoded_image.playout_delay_;
+ CopyCodecSpecific(codec_specific_info, &encoded_image, &rtp_video_header);
int stream_index = rtp_video_header.simulcastIdx;
RTC_DCHECK_LT(stream_index, rtp_modules_.size());
« no previous file with comments | « webrtc/modules/video_coding/video_codec_initializer.cc ('k') | webrtc/video/video_send_stream.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698