diff --git a/src/modules/rtp_rtcp/source/rtp_receiver_video.cc b/src/modules/rtp_rtcp/source/rtp_receiver_video.cc index fc002373cc..338aa2a8b6 100644 --- a/src/modules/rtp_rtcp/source/rtp_receiver_video.cc +++ b/src/modules/rtp_rtcp/source/rtp_receiver_video.cc @@ -647,6 +647,7 @@ RTPReceiverVideo::ReceiveVp8Codec(WebRtcRTPHeader* rtpHeader, kNoTl0PicIdx; toHeader->temporalIdx = fromHeader->hasTID ? fromHeader->tID : kNoTemporalIdx; + toHeader->keyIdx = fromHeader->hasKeyIdx ? fromHeader->keyIdx : kNoKeyIdx; toHeader->frameWidth = fromHeader->frameWidth; toHeader->frameHeight = fromHeader->frameHeight; diff --git a/src/modules/video_coding/codecs/interface/video_codec_interface.h b/src/modules/video_coding/codecs/interface/video_codec_interface.h index 987cb61895..4de7cdcfaa 100644 --- a/src/modules/video_coding/codecs/interface/video_codec_interface.h +++ b/src/modules/video_coding/codecs/interface/video_codec_interface.h @@ -33,6 +33,7 @@ struct CodecSpecificInfoVP8 bool nonReference; WebRtc_UWord8 simulcastIdx; WebRtc_UWord8 temporalIdx; + WebRtc_Word8 keyIdx; // negative value to skip keyIdx }; union CodecSpecificInfoUnion diff --git a/src/modules/video_coding/codecs/vp8/main/source/vp8.cc b/src/modules/video_coding/codecs/vp8/main/source/vp8.cc index 0839e7106f..17bb922d48 100644 --- a/src/modules/video_coding/codecs/vp8/main/source/vp8.cc +++ b/src/modules/video_coding/codecs/vp8/main/source/vp8.cc @@ -602,6 +602,7 @@ void VP8Encoder::PopulateCodecSpecific(CodecSpecificInfo* codec_specific, vp8Info->pictureId = _pictureID; vp8Info->simulcastIdx = _simulcastIdx;; vp8Info->temporalIdx = kNoTemporalIdx; // TODO(pwestin) need to populate this + vp8Info->keyIdx = kNoKeyIdx; // TODO(hlundin) populate this vp8Info->nonReference = (pkt.data.frame.flags & VPX_FRAME_IS_DROPPABLE); _pictureID = (_pictureID + 1) % 0x7FFF; // prepare next } diff --git a/src/modules/video_coding/main/source/encoded_frame.cc b/src/modules/video_coding/main/source/encoded_frame.cc index 8913addaba..2030d73958 100644 --- a/src/modules/video_coding/main/source/encoded_frame.cc +++ b/src/modules/video_coding/main/source/encoded_frame.cc @@ -111,6 +111,8 @@ void VCMEncodedFrame::CopyCodecSpecific(const RTPVideoHeader* header) { // This is the first packet for this frame. _codecSpecificInfo.codecSpecific.VP8.pictureId = -1; + _codecSpecificInfo.codecSpecific.VP8.temporalIdx = 0; + _codecSpecificInfo.codecSpecific.VP8.keyIdx = -1; _codecSpecificInfo.codecType = kVideoCodecVP8; } _codecSpecificInfo.codecSpecific.VP8.nonReference = @@ -120,6 +122,16 @@ void VCMEncodedFrame::CopyCodecSpecific(const RTPVideoHeader* header) _codecSpecificInfo.codecSpecific.VP8.pictureId = header->codecHeader.VP8.pictureId; } + if (header->codecHeader.VP8.temporalIdx != kNoTemporalIdx) + { + _codecSpecificInfo.codecSpecific.VP8.temporalIdx = + header->codecHeader.VP8.temporalIdx; + } + if (header->codecHeader.VP8.keyIdx != kNoKeyIdx) + { + _codecSpecificInfo.codecSpecific.VP8.keyIdx = + header->codecHeader.VP8.keyIdx; + } break; } default: diff --git a/src/modules/video_coding/main/source/generic_encoder.cc b/src/modules/video_coding/main/source/generic_encoder.cc index 1c58d9e26a..81f15430af 100644 --- a/src/modules/video_coding/main/source/generic_encoder.cc +++ b/src/modules/video_coding/main/source/generic_encoder.cc @@ -267,6 +267,8 @@ void VCMEncodedFrameCallback::CopyCodecSpecific(const CodecSpecificInfo& info, info.codecSpecific.VP8.nonReference; (*rtp)->codecHeader.VP8.temporalIdx = info.codecSpecific.VP8.temporalIdx; + (*rtp)->codecHeader.VP8.keyIdx = + info.codecSpecific.VP8.keyIdx; (*rtp)->simulcastIdx = info.codecSpecific.VP8.simulcastIdx; return; }