| Index: webrtc/modules/rtp_rtcp/source/rtp_format_vp9.cc
|
| diff --git a/webrtc/modules/rtp_rtcp/source/rtp_format_vp9.cc b/webrtc/modules/rtp_rtcp/source/rtp_format_vp9.cc
|
| index 6a00724096343d9cfe80aa55a97ee56dacfb5c28..c9d0f3293b9fa25730656d76e87b6c4f0ed6094f 100644
|
| --- a/webrtc/modules/rtp_rtcp/source/rtp_format_vp9.cc
|
| +++ b/webrtc/modules/rtp_rtcp/source/rtp_format_vp9.cc
|
| @@ -47,10 +47,6 @@ int16_t Tl0PicIdxField(const RTPVideoHeaderVP9& hdr, uint8_t def) {
|
| return (hdr.tl0_pic_idx == kNoTl0PicIdx) ? def : hdr.tl0_pic_idx;
|
| }
|
|
|
| -uint8_t GofIdxField(const RTPVideoHeaderVP9& hdr, uint8_t def) {
|
| - return (hdr.gof_idx == kNoGofIdx) ? def : hdr.gof_idx;
|
| -}
|
| -
|
| // Picture ID:
|
| //
|
| // +-+-+-+-+-+-+-+-+
|
| @@ -74,19 +70,17 @@ bool PictureIdPresent(const RTPVideoHeaderVP9& hdr) {
|
| // Flexible mode (F=1): Non-flexible mode (F=0):
|
| //
|
| // +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
|
| -// L: | T |U| S |D| |GOF_IDX| S |D|
|
| +// L: | T |U| S |D| | T |U| S |D|
|
| // +-+-+-+-+-+-+-+-+ +-+-+-+-+-+-+-+-+
|
| // | TL0PICIDX |
|
| // +-+-+-+-+-+-+-+-+
|
| //
|
| size_t LayerInfoLength(const RTPVideoHeaderVP9& hdr) {
|
| - if (hdr.flexible_mode) {
|
| - return (hdr.temporal_idx == kNoTemporalIdx &&
|
| - hdr.spatial_idx == kNoSpatialIdx) ? 0 : 1;
|
| - } else {
|
| - return (hdr.gof_idx == kNoGofIdx &&
|
| - hdr.spatial_idx == kNoSpatialIdx) ? 0 : 2;
|
| + if (hdr.temporal_idx == kNoTemporalIdx &&
|
| + hdr.spatial_idx == kNoSpatialIdx) {
|
| + return 0;
|
| }
|
| + return hdr.flexible_mode ? 1 : 2;
|
| }
|
|
|
| bool LayerInfoPresent(const RTPVideoHeaderVP9& hdr) {
|
| @@ -198,8 +192,8 @@ bool WritePictureId(const RTPVideoHeaderVP9& vp9,
|
| // L: | T |U| S |D|
|
| // +-+-+-+-+-+-+-+-+
|
| //
|
| -bool WriteLayerInfoFlexibleMode(const RTPVideoHeaderVP9& vp9,
|
| - rtc::BitBufferWriter* writer) {
|
| +bool WriteLayerInfoCommon(const RTPVideoHeaderVP9& vp9,
|
| + rtc::BitBufferWriter* writer) {
|
| RETURN_FALSE_ON_ERROR(writer->WriteBits(TemporalIdxField(vp9, 0), 3));
|
| RETURN_FALSE_ON_ERROR(writer->WriteBits(vp9.temporal_up_switch ? 1 : 0, 1));
|
| RETURN_FALSE_ON_ERROR(writer->WriteBits(SpatialIdxField(vp9, 0), 3));
|
| @@ -210,27 +204,26 @@ bool WriteLayerInfoFlexibleMode(const RTPVideoHeaderVP9& vp9,
|
| // Non-flexible mode (F=0):
|
| //
|
| // +-+-+-+-+-+-+-+-+
|
| -// L: |GOF_IDX| S |D|
|
| +// L: | T |U| S |D|
|
| // +-+-+-+-+-+-+-+-+
|
| // | TL0PICIDX |
|
| // +-+-+-+-+-+-+-+-+
|
| //
|
| bool WriteLayerInfoNonFlexibleMode(const RTPVideoHeaderVP9& vp9,
|
| rtc::BitBufferWriter* writer) {
|
| - RETURN_FALSE_ON_ERROR(writer->WriteBits(GofIdxField(vp9, 0), 4));
|
| - RETURN_FALSE_ON_ERROR(writer->WriteBits(SpatialIdxField(vp9, 0), 3));
|
| - RETURN_FALSE_ON_ERROR(writer->WriteBits(vp9.inter_layer_predicted ? 1: 0, 1));
|
| RETURN_FALSE_ON_ERROR(writer->WriteUInt8(Tl0PicIdxField(vp9, 0)));
|
| return true;
|
| }
|
|
|
| bool WriteLayerInfo(const RTPVideoHeaderVP9& vp9,
|
| rtc::BitBufferWriter* writer) {
|
| - if (vp9.flexible_mode) {
|
| - return WriteLayerInfoFlexibleMode(vp9, writer);
|
| - } else {
|
| - return WriteLayerInfoNonFlexibleMode(vp9, writer);
|
| - }
|
| + if (!WriteLayerInfoCommon(vp9, writer))
|
| + return false;
|
| +
|
| + if (vp9.flexible_mode)
|
| + return true;
|
| +
|
| + return WriteLayerInfoNonFlexibleMode(vp9, writer);
|
| }
|
|
|
| // Reference indices:
|
| @@ -337,8 +330,7 @@ bool ParsePictureId(rtc::BitBuffer* parser, RTPVideoHeaderVP9* vp9) {
|
| // L: | T |U| S |D|
|
| // +-+-+-+-+-+-+-+-+
|
| //
|
| -bool ParseLayerInfoFlexibleMode(rtc::BitBuffer* parser,
|
| - RTPVideoHeaderVP9* vp9) {
|
| +bool ParseLayerInfoCommon(rtc::BitBuffer* parser, RTPVideoHeaderVP9* vp9) {
|
| uint32_t t, u_bit, s, d_bit;
|
| RETURN_FALSE_ON_ERROR(parser->ReadBits(&t, 3));
|
| RETURN_FALSE_ON_ERROR(parser->ReadBits(&u_bit, 1));
|
| @@ -354,32 +346,27 @@ bool ParseLayerInfoFlexibleMode(rtc::BitBuffer* parser,
|
| // Layer indices (non-flexible mode):
|
| //
|
| // +-+-+-+-+-+-+-+-+
|
| -// L: |GOF_IDX| S |D|
|
| +// L: | T |U| S |D|
|
| // +-+-+-+-+-+-+-+-+
|
| // | TL0PICIDX |
|
| // +-+-+-+-+-+-+-+-+
|
| //
|
| bool ParseLayerInfoNonFlexibleMode(rtc::BitBuffer* parser,
|
| RTPVideoHeaderVP9* vp9) {
|
| - uint32_t gof_idx, s, d_bit;
|
| uint8_t tl0picidx;
|
| - RETURN_FALSE_ON_ERROR(parser->ReadBits(&gof_idx, 4));
|
| - RETURN_FALSE_ON_ERROR(parser->ReadBits(&s, 3));
|
| - RETURN_FALSE_ON_ERROR(parser->ReadBits(&d_bit, 1));
|
| RETURN_FALSE_ON_ERROR(parser->ReadUInt8(&tl0picidx));
|
| - vp9->gof_idx = gof_idx;
|
| - vp9->spatial_idx = s;
|
| - vp9->inter_layer_predicted = d_bit ? true : false;
|
| vp9->tl0_pic_idx = tl0picidx;
|
| return true;
|
| }
|
|
|
| bool ParseLayerInfo(rtc::BitBuffer* parser, RTPVideoHeaderVP9* vp9) {
|
| - if (vp9->flexible_mode) {
|
| - return ParseLayerInfoFlexibleMode(parser, vp9);
|
| - } else {
|
| - return ParseLayerInfoNonFlexibleMode(parser, vp9);
|
| - }
|
| + if (!ParseLayerInfoCommon(parser, vp9))
|
| + return false;
|
| +
|
| + if (vp9->flexible_mode)
|
| + return true;
|
| +
|
| + return ParseLayerInfoNonFlexibleMode(parser, vp9);
|
| }
|
|
|
| // Reference indices:
|
| @@ -604,7 +591,7 @@ bool RtpPacketizerVp9::NextPacket(uint8_t* buffer,
|
| // +-+-+-+-+-+-+-+-+
|
| // M: | EXTENDED PID | (RECOMMENDED)
|
| // +-+-+-+-+-+-+-+-+
|
| -// L: |GOF_IDX| S |D| (CONDITIONALLY RECOMMENDED)
|
| +// L: | T |U| S |D| (CONDITIONALLY RECOMMENDED)
|
| // +-+-+-+-+-+-+-+-+
|
| // | TL0PICIDX | (CONDITIONALLY REQUIRED)
|
| // +-+-+-+-+-+-+-+-+
|
|
|