| Index: content/renderer/pepper/video_decoder_shim.cc
|
| diff --git a/content/renderer/pepper/video_decoder_shim.cc b/content/renderer/pepper/video_decoder_shim.cc
|
| index ec176bff069901b7f53c35e40a6dda8cb84196da..bfd71310545b4b262ae87df636ab55e336b6c268 100644
|
| --- a/content/renderer/pepper/video_decoder_shim.cc
|
| +++ b/content/renderer/pepper/video_decoder_shim.cc
|
| @@ -627,13 +627,13 @@ class VideoDecoderShim::DecoderImpl {
|
| explicit DecoderImpl(const base::WeakPtr<VideoDecoderShim>& proxy);
|
| ~DecoderImpl();
|
|
|
| - void Initialize(media::VideoDecoderConfig config);
|
| + void Initialize(media::VideoDecoderConfig config, uint32_t min_picture_count);
|
| void Decode(uint32_t decode_id, scoped_refptr<media::DecoderBuffer> buffer);
|
| void Reset();
|
| void Stop();
|
|
|
| private:
|
| - void OnInitDone(bool success);
|
| + void OnInitDone(uint32_t min_picture_count, bool success);
|
| void DoDecode();
|
| void OnDecodeComplete(media::VideoDecoder::Status status);
|
| void OnOutputComplete(const scoped_refptr<media::VideoFrame>& frame);
|
| @@ -671,7 +671,7 @@ VideoDecoderShim::DecoderImpl::~DecoderImpl() {
|
| }
|
|
|
| void VideoDecoderShim::DecoderImpl::Initialize(
|
| - media::VideoDecoderConfig config) {
|
| + media::VideoDecoderConfig config, uint32_t min_picture_count) {
|
| DCHECK(!decoder_);
|
| #if !defined(MEDIA_DISABLE_LIBVPX)
|
| if (config.codec() == media::kCodecVP9) {
|
| @@ -693,7 +693,7 @@ void VideoDecoderShim::DecoderImpl::Initialize(
|
| decoder_->Initialize(
|
| config, true /* low_delay */,
|
| base::Bind(&VideoDecoderShim::DecoderImpl::OnInitDone,
|
| - weak_ptr_factory_.GetWeakPtr()),
|
| + weak_ptr_factory_.GetWeakPtr(), min_picture_count),
|
| base::Bind(&VideoDecoderShim::DecoderImpl::OnOutputComplete,
|
| weak_ptr_factory_.GetWeakPtr()));
|
| }
|
| @@ -731,11 +731,14 @@ void VideoDecoderShim::DecoderImpl::Stop() {
|
| // This instance is deleted once we exit this scope.
|
| }
|
|
|
| -void VideoDecoderShim::DecoderImpl::OnInitDone(bool success) {
|
| +void VideoDecoderShim::DecoderImpl::OnInitDone(
|
| + uint32_t min_picture_count, bool success) {
|
| int32_t result = success ? PP_OK : PP_ERROR_NOTSUPPORTED;
|
|
|
| // Calculate how many textures the shim should create.
|
| - uint32_t shim_texture_pool_size = media::limits::kMaxVideoFrames + 1;
|
| + uint32_t shim_texture_pool_size =
|
| + std::max(static_cast<uint32_t>(media::limits::kMaxVideoFrames + 1),
|
| + min_picture_count);
|
| main_task_runner_->PostTask(
|
| FROM_HERE, base::Bind(&VideoDecoderShim::OnInitializeComplete, shim_,
|
| result, shim_texture_pool_size));
|
| @@ -843,6 +846,7 @@ VideoDecoderShim::~VideoDecoderShim() {
|
|
|
| bool VideoDecoderShim::Initialize(
|
| media::VideoCodecProfile profile,
|
| + uint32 min_picture_count,
|
| media::VideoDecodeAccelerator::Client* client) {
|
| DCHECK_EQ(client, host_);
|
| DCHECK(RenderThreadImpl::current());
|
| @@ -875,7 +879,8 @@ bool VideoDecoderShim::Initialize(
|
| FROM_HERE,
|
| base::Bind(&VideoDecoderShim::DecoderImpl::Initialize,
|
| base::Unretained(decoder_impl_.get()),
|
| - config));
|
| + config,
|
| + min_picture_count));
|
| // Return success, even though we are asynchronous, to mimic
|
| // media::VideoDecodeAccelerator.
|
| return true;
|
|
|