| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2012 The WebRTC project authors. All Rights Reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| (...skipping 13 matching lines...) Expand all Loading... |
| 24 #include "webrtc/base/trace_event.h" | 24 #include "webrtc/base/trace_event.h" |
| 25 #include "webrtc/common_types.h" | 25 #include "webrtc/common_types.h" |
| 26 #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h" | 26 #include "webrtc/common_video/libyuv/include/webrtc_libyuv.h" |
| 27 #include "webrtc/modules/include/module_common_types.h" | 27 #include "webrtc/modules/include/module_common_types.h" |
| 28 #include "webrtc/modules/video_coding/include/video_codec_interface.h" | 28 #include "webrtc/modules/video_coding/include/video_codec_interface.h" |
| 29 #include "webrtc/modules/video_coding/codecs/vp8/include/vp8_common_types.h" | 29 #include "webrtc/modules/video_coding/codecs/vp8/include/vp8_common_types.h" |
| 30 #include "webrtc/modules/video_coding/codecs/vp8/screenshare_layers.h" | 30 #include "webrtc/modules/video_coding/codecs/vp8/screenshare_layers.h" |
| 31 #include "webrtc/modules/video_coding/codecs/vp8/temporal_layers.h" | 31 #include "webrtc/modules/video_coding/codecs/vp8/temporal_layers.h" |
| 32 #include "webrtc/modules/video_coding/utility/simulcast_rate_allocator.h" | 32 #include "webrtc/modules/video_coding/utility/simulcast_rate_allocator.h" |
| 33 #include "webrtc/system_wrappers/include/clock.h" | 33 #include "webrtc/system_wrappers/include/clock.h" |
| 34 #include "webrtc/system_wrappers/include/metrics.h" |
| 34 | 35 |
| 35 namespace webrtc { | 36 namespace webrtc { |
| 36 namespace { | 37 namespace { |
| 37 | 38 |
| 38 enum { kVp8ErrorPropagationTh = 30 }; | 39 enum { kVp8ErrorPropagationTh = 30 }; |
| 39 enum { kVp832ByteAlign = 32 }; | 40 enum { kVp832ByteAlign = 32 }; |
| 40 | 41 |
| 41 // VP8 denoiser states. | 42 // VP8 denoiser states. |
| 42 enum denoiserState { | 43 enum denoiserState { |
| 43 kDenoiserOff, | 44 kDenoiserOff, |
| (...skipping 1004 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1048 return WEBRTC_VIDEO_CODEC_OK; | 1049 return WEBRTC_VIDEO_CODEC_OK; |
| 1049 } | 1050 } |
| 1050 | 1051 |
| 1051 int VP8EncoderImpl::RegisterEncodeCompleteCallback( | 1052 int VP8EncoderImpl::RegisterEncodeCompleteCallback( |
| 1052 EncodedImageCallback* callback) { | 1053 EncodedImageCallback* callback) { |
| 1053 encoded_complete_callback_ = callback; | 1054 encoded_complete_callback_ = callback; |
| 1054 return WEBRTC_VIDEO_CODEC_OK; | 1055 return WEBRTC_VIDEO_CODEC_OK; |
| 1055 } | 1056 } |
| 1056 | 1057 |
| 1057 VP8DecoderImpl::VP8DecoderImpl() | 1058 VP8DecoderImpl::VP8DecoderImpl() |
| 1058 : decode_complete_callback_(NULL), | 1059 : buffer_pool_(false, 300 /* max_number_of_buffers*/), |
| 1060 decode_complete_callback_(NULL), |
| 1059 inited_(false), | 1061 inited_(false), |
| 1060 feedback_mode_(false), | 1062 feedback_mode_(false), |
| 1061 decoder_(NULL), | 1063 decoder_(NULL), |
| 1062 image_format_(VPX_IMG_FMT_NONE), | 1064 image_format_(VPX_IMG_FMT_NONE), |
| 1063 ref_frame_(NULL), | 1065 ref_frame_(NULL), |
| 1064 propagation_cnt_(-1), | 1066 propagation_cnt_(-1), |
| 1065 last_frame_width_(0), | 1067 last_frame_width_(0), |
| 1066 last_frame_height_(0), | 1068 last_frame_height_(0), |
| 1067 key_frame_required_(true) {} | 1069 key_frame_required_(true) {} |
| 1068 | 1070 |
| (...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1263 int64_t ntp_time_ms) { | 1265 int64_t ntp_time_ms) { |
| 1264 if (img == NULL) { | 1266 if (img == NULL) { |
| 1265 // Decoder OK and NULL image => No show frame | 1267 // Decoder OK and NULL image => No show frame |
| 1266 return WEBRTC_VIDEO_CODEC_NO_OUTPUT; | 1268 return WEBRTC_VIDEO_CODEC_NO_OUTPUT; |
| 1267 } | 1269 } |
| 1268 last_frame_width_ = img->d_w; | 1270 last_frame_width_ = img->d_w; |
| 1269 last_frame_height_ = img->d_h; | 1271 last_frame_height_ = img->d_h; |
| 1270 // Allocate memory for decoded image. | 1272 // Allocate memory for decoded image. |
| 1271 rtc::scoped_refptr<I420Buffer> buffer = | 1273 rtc::scoped_refptr<I420Buffer> buffer = |
| 1272 buffer_pool_.CreateBuffer(img->d_w, img->d_h); | 1274 buffer_pool_.CreateBuffer(img->d_w, img->d_h); |
| 1275 if (!buffer.get()) { |
| 1276 // Pool has too many pending frames. |
| 1277 RTC_HISTOGRAM_BOOLEAN("WebRTC.Video.VP8DecoderImpl.TooManyPendingFrames", |
| 1278 1); |
| 1279 return WEBRTC_VIDEO_CODEC_NO_OUTPUT; |
| 1280 } |
| 1273 | 1281 |
| 1274 libyuv::I420Copy(img->planes[VPX_PLANE_Y], img->stride[VPX_PLANE_Y], | 1282 libyuv::I420Copy(img->planes[VPX_PLANE_Y], img->stride[VPX_PLANE_Y], |
| 1275 img->planes[VPX_PLANE_U], img->stride[VPX_PLANE_U], | 1283 img->planes[VPX_PLANE_U], img->stride[VPX_PLANE_U], |
| 1276 img->planes[VPX_PLANE_V], img->stride[VPX_PLANE_V], | 1284 img->planes[VPX_PLANE_V], img->stride[VPX_PLANE_V], |
| 1277 buffer->MutableDataY(), buffer->StrideY(), | 1285 buffer->MutableDataY(), buffer->StrideY(), |
| 1278 buffer->MutableDataU(), buffer->StrideU(), | 1286 buffer->MutableDataU(), buffer->StrideU(), |
| 1279 buffer->MutableDataV(), buffer->StrideV(), | 1287 buffer->MutableDataV(), buffer->StrideV(), |
| 1280 img->d_w, img->d_h); | 1288 img->d_w, img->d_h); |
| 1281 | 1289 |
| 1282 VideoFrame decoded_image(buffer, timestamp, 0, kVideoRotation_0); | 1290 VideoFrame decoded_image(buffer, timestamp, 0, kVideoRotation_0); |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1326 return -1; | 1334 return -1; |
| 1327 } | 1335 } |
| 1328 if (vpx_codec_control(copy->decoder_, VP8_SET_REFERENCE, ref_frame_) != | 1336 if (vpx_codec_control(copy->decoder_, VP8_SET_REFERENCE, ref_frame_) != |
| 1329 VPX_CODEC_OK) { | 1337 VPX_CODEC_OK) { |
| 1330 return -1; | 1338 return -1; |
| 1331 } | 1339 } |
| 1332 return 0; | 1340 return 0; |
| 1333 } | 1341 } |
| 1334 | 1342 |
| 1335 } // namespace webrtc | 1343 } // namespace webrtc |
| OLD | NEW |