| Index: webrtc/modules/video_coding/main/source/generic_decoder.cc
|
| diff --git a/webrtc/modules/video_coding/main/source/generic_decoder.cc b/webrtc/modules/video_coding/main/source/generic_decoder.cc
|
| index f874e163c83f6ad3a3362cefe32a014f23585059..c924b0ac2bd0dcfdeb59261033933d8b1461c23d 100644
|
| --- a/webrtc/modules/video_coding/main/source/generic_decoder.cc
|
| +++ b/webrtc/modules/video_coding/main/source/generic_decoder.cc
|
| @@ -46,36 +46,44 @@ VCMReceiveCallback* VCMDecodedFrameCallback::UserReceiveCallback()
|
| return _receiveCallback;
|
| }
|
|
|
| -int32_t VCMDecodedFrameCallback::Decoded(VideoFrame& decodedImage) {
|
| - // TODO(holmer): We should improve this so that we can handle multiple
|
| - // callbacks from one call to Decode().
|
| - VCMFrameInformation* frameInfo;
|
| - VCMReceiveCallback* callback;
|
| - {
|
| - CriticalSectionScoped cs(_critSect);
|
| - frameInfo = _timestampMap.Pop(decodedImage.timestamp());
|
| - callback = _receiveCallback;
|
| - }
|
| -
|
| - if (frameInfo == NULL) {
|
| - LOG(LS_WARNING) << "Too many frames backed up in the decoder, dropping "
|
| - "this one.";
|
| - return WEBRTC_VIDEO_CODEC_OK;
|
| - }
|
| -
|
| - _timing.StopDecodeTimer(
|
| - decodedImage.timestamp(),
|
| - frameInfo->decodeStartTimeMs,
|
| - _clock->TimeInMilliseconds(),
|
| - frameInfo->renderTimeMs);
|
| +int32_t VCMDecodedFrameCallback::Decoded(VideoFrame& decodedImage,
|
| + int decodeTimeInMs) {
|
| + // TODO(holmer): We should improve this so that we can handle multiple
|
| + // callbacks from one call to Decode().
|
| + VCMFrameInformation* frameInfo;
|
| + VCMReceiveCallback* callback;
|
| + {
|
| + CriticalSectionScoped cs(_critSect);
|
| + frameInfo = _timestampMap.Pop(decodedImage.timestamp());
|
| + callback = _receiveCallback;
|
| + }
|
| +
|
| + if (frameInfo == NULL) {
|
| + LOG(LS_WARNING) << "Too many frames backed up in the decoder, dropping "
|
| + "this one.";
|
| + return WEBRTC_VIDEO_CODEC_OK;
|
| + }
|
| +
|
| + int64_t stopTime =
|
| + (decodeTimeInMs != 0) ? frameInfo->decodeStartTimeMs + decodeTimeInMs :
|
| + _clock->TimeInMilliseconds();
|
| + _timing.StopDecodeTimer(
|
| + decodedImage.timestamp(),
|
| + frameInfo->decodeStartTimeMs,
|
| + stopTime,
|
| + frameInfo->renderTimeMs);
|
| +
|
| + if (callback != NULL)
|
| + {
|
| + decodedImage.set_render_time_ms(frameInfo->renderTimeMs);
|
| + decodedImage.set_rotation(frameInfo->rotation);
|
| + callback->FrameToRender(decodedImage);
|
| + }
|
| + return WEBRTC_VIDEO_CODEC_OK;
|
| +}
|
|
|
| - if (callback != NULL)
|
| - {
|
| - decodedImage.set_render_time_ms(frameInfo->renderTimeMs);
|
| - decodedImage.set_rotation(frameInfo->rotation);
|
| - callback->FrameToRender(decodedImage);
|
| - }
|
| - return WEBRTC_VIDEO_CODEC_OK;
|
| +int32_t VCMDecodedFrameCallback::Decoded(VideoFrame& decodedImage) {
|
| + return Decoded(decodedImage, 0);
|
| }
|
|
|
| int32_t
|
|
|