| Index: webrtc/modules/video_coding/frame_object.cc
|
| diff --git a/webrtc/modules/video_coding/frame_object.cc b/webrtc/modules/video_coding/frame_object.cc
|
| index 4eb8aeea53dc4ba8cbcad03098e16bbfbffd15a3..0dd06abf2e041b5a0e58a78e0d441231248b4a50 100644
|
| --- a/webrtc/modules/video_coding/frame_object.cc
|
| +++ b/webrtc/modules/video_coding/frame_object.cc
|
| @@ -8,6 +8,7 @@
|
| * be found in the AUTHORS file in the root of the source tree.
|
| */
|
|
|
| +#include "webrtc/base/checks.h"
|
| #include "webrtc/modules/video_coding/frame_object.h"
|
| #include "webrtc/modules/video_coding/packet_buffer.h"
|
|
|
| @@ -32,39 +33,50 @@ RtpFrameObject::RtpFrameObject(PacketBuffer* packet_buffer,
|
| last_seq_num_(last_seq_num),
|
| received_time_(received_time),
|
| times_nacked_(times_nacked) {
|
| - VCMPacket* packet = packet_buffer_->GetPacket(first_seq_num);
|
| - if (packet) {
|
| - // RtpFrameObject members
|
| - frame_type_ = packet->frameType;
|
| - codec_type_ = packet->codec;
|
| -
|
| - // TODO(philipel): Remove when encoded image is replaced by FrameObject.
|
| - // VCMEncodedFrame members
|
| - CopyCodecSpecific(&packet->video_header);
|
| - _completeFrame = true;
|
| - _payloadType = packet->payloadType;
|
| - _timeStamp = packet->timestamp;
|
| - ntp_time_ms_ = packet->ntp_time_ms_;
|
| -
|
| - // Since FFmpeg use an optimized bitstream reader that reads in chunks of
|
| - // 32/64 bits we have to add at least that much padding to the buffer
|
| - // to make sure the decoder doesn't read out of bounds.
|
| - // NOTE! EncodedImage::_size is the size of the buffer (think capacity of
|
| - // an std::vector) and EncodedImage::_length is the actual size of
|
| - // the bitstream (think size of an std::vector).
|
| - if (codec_type_ == kVideoCodecH264)
|
| - _size = frame_size + EncodedImage::kBufferPaddingBytesH264;
|
| - else
|
| - _size = frame_size;
|
| -
|
| - _buffer = new uint8_t[_size];
|
| - _length = frame_size;
|
| - _frameType = packet->frameType;
|
| - GetBitstream(_buffer);
|
| -
|
| - // FrameObject members
|
| - timestamp = packet->timestamp;
|
| - }
|
| + VCMPacket* first_packet = packet_buffer_->GetPacket(first_seq_num);
|
| + RTC_DCHECK(first_packet);
|
| +
|
| + // RtpFrameObject members
|
| + frame_type_ = first_packet->frameType;
|
| + codec_type_ = first_packet->codec;
|
| +
|
| + // TODO(philipel): Remove when encoded image is replaced by FrameObject.
|
| + // VCMEncodedFrame members
|
| + CopyCodecSpecific(&first_packet->video_header);
|
| + _completeFrame = true;
|
| + _payloadType = first_packet->payloadType;
|
| + _timeStamp = first_packet->timestamp;
|
| + ntp_time_ms_ = first_packet->ntp_time_ms_;
|
| +
|
| + // Since FFmpeg use an optimized bitstream reader that reads in chunks of
|
| + // 32/64 bits we have to add at least that much padding to the buffer
|
| + // to make sure the decoder doesn't read out of bounds.
|
| + // NOTE! EncodedImage::_size is the size of the buffer (think capacity of
|
| + // an std::vector) and EncodedImage::_length is the actual size of
|
| + // the bitstream (think size of an std::vector).
|
| + if (codec_type_ == kVideoCodecH264)
|
| + _size = frame_size + EncodedImage::kBufferPaddingBytesH264;
|
| + else
|
| + _size = frame_size;
|
| +
|
| + _buffer = new uint8_t[_size];
|
| + _length = frame_size;
|
| + _frameType = first_packet->frameType;
|
| + GetBitstream(_buffer);
|
| +
|
| + // FrameObject members
|
| + timestamp = first_packet->timestamp;
|
| +
|
| + VCMPacket* last_packet = packet_buffer_->GetPacket(last_seq_num);
|
| + RTC_DCHECK(last_packet && last_packet->markerBit);
|
| + // http://www.etsi.org/deliver/etsi_ts/126100_126199/126114/12.07.00_60/
|
| + // ts_126114v120700p.pdf Section 7.4.5.
|
| + // The MTSI client shall add the payload bytes as defined in this clause
|
| + // onto the last RTP packet in each group of packets which make up a key
|
| + // frame (I-frame or IDR frame in H.264 (AVC), or an IRAP picture in H.265
|
| + // (HEVC)).
|
| + rotation_ = last_packet->video_header.rotation;
|
| + _rotation_set = true;
|
| }
|
|
|
| RtpFrameObject::~RtpFrameObject() {
|
|
|