| Index: content/renderer/media/rtc_video_encoder.cc
|
| diff --git a/content/renderer/media/rtc_video_encoder.cc b/content/renderer/media/rtc_video_encoder.cc
|
| index 1b33fc54c90abe6881a48565c6d9fbb4aa58b513..5fdad0708bb32dca88be5e091aada1d50fbb754f 100644
|
| --- a/content/renderer/media/rtc_video_encoder.cc
|
| +++ b/content/renderer/media/rtc_video_encoder.cc
|
| @@ -648,6 +648,20 @@ void RTCVideoEncoder::ReturnEncodedImage(scoped_ptr<webrtc::EncodedImage> image,
|
| if (!encoded_image_callback_)
|
| return;
|
|
|
| + std::vector<int> offsets;
|
| + size_t i;
|
| + uint32 acc = 0;
|
| + for (i = 0; i < image->_length; ++i) {
|
| + acc = (acc << 8) | image->_buffer[i];
|
| + if ((acc & 0xffffff00) == 0x100)
|
| + offsets.push_back(i);
|
| + }
|
| +
|
| + // Generate a header describing a single fragment.
|
| + webrtc::RTPFragmentationHeader header;
|
| + memset(&header, 0, sizeof(header));
|
| + header.VerifyAndAllocateFragmentationHeader(offsets.size());
|
| +
|
| webrtc::CodecSpecificInfo info;
|
| memset(&info, 0, sizeof(info));
|
| info.codecType = video_codec_type_;
|
| @@ -657,14 +671,15 @@ void RTCVideoEncoder::ReturnEncodedImage(scoped_ptr<webrtc::EncodedImage> image,
|
| info.codecSpecific.VP8.keyIdx = -1;
|
| }
|
|
|
| - // Generate a header describing a single fragment.
|
| - webrtc::RTPFragmentationHeader header;
|
| - memset(&header, 0, sizeof(header));
|
| - header.VerifyAndAllocateFragmentationHeader(1);
|
| - header.fragmentationOffset[0] = 0;
|
| - header.fragmentationLength[0] = image->_length;
|
| - header.fragmentationPlType[0] = 0;
|
| - header.fragmentationTimeDiff[0] = 0;
|
| + for (i = 0; i < offsets.size(); ++i) {
|
| + uint32_t length = (i == offsets.size() - 1) ?
|
| + (image->_length - offsets[i]) : (offsets[i + 1] - 4 - offsets[i]);
|
| +
|
| + header.fragmentationOffset[i] = offsets[i];
|
| + header.fragmentationLength[i] = length;
|
| + header.fragmentationPlType[i] = 0;
|
| + header.fragmentationTimeDiff[i] = 0;
|
| + }
|
|
|
| int32_t retval = encoded_image_callback_->Encoded(*image, &info, &header);
|
| if (retval < 0) {
|
|
|