| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "content/renderer/pepper/video_decoder_shim.h" | 5 #include "content/renderer/pepper/video_decoder_shim.h" |
| 6 | 6 |
| 7 #include <GLES2/gl2.h> | 7 #include <GLES2/gl2.h> |
| 8 #include <GLES2/gl2ext.h> | 8 #include <GLES2/gl2ext.h> |
| 9 #include <GLES2/gl2extchromium.h> | 9 #include <GLES2/gl2extchromium.h> |
| 10 | 10 |
| (...skipping 716 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 727 // again. | 727 // again. |
| 728 while (!pending_decodes_.empty()) | 728 while (!pending_decodes_.empty()) |
| 729 pending_decodes_.pop(); | 729 pending_decodes_.pop(); |
| 730 decoder_.reset(); | 730 decoder_.reset(); |
| 731 // This instance is deleted once we exit this scope. | 731 // This instance is deleted once we exit this scope. |
| 732 } | 732 } |
| 733 | 733 |
| 734 void VideoDecoderShim::DecoderImpl::OnInitDone(bool success) { | 734 void VideoDecoderShim::DecoderImpl::OnInitDone(bool success) { |
| 735 int32_t result = success ? PP_OK : PP_ERROR_NOTSUPPORTED; | 735 int32_t result = success ? PP_OK : PP_ERROR_NOTSUPPORTED; |
| 736 | 736 |
| 737 // Calculate how many textures the shim should create. | |
| 738 uint32_t shim_texture_pool_size = media::limits::kMaxVideoFrames + 1; | |
| 739 main_task_runner_->PostTask( | 737 main_task_runner_->PostTask( |
| 740 FROM_HERE, base::Bind(&VideoDecoderShim::OnInitializeComplete, shim_, | 738 FROM_HERE, base::Bind(&VideoDecoderShim::OnInitializeComplete, shim_, |
| 741 result, shim_texture_pool_size)); | 739 result)); |
| 742 } | 740 } |
| 743 | 741 |
| 744 void VideoDecoderShim::DecoderImpl::DoDecode() { | 742 void VideoDecoderShim::DecoderImpl::DoDecode() { |
| 745 if (pending_decodes_.empty() || awaiting_decoder_) | 743 if (pending_decodes_.empty() || awaiting_decoder_) |
| 746 return; | 744 return; |
| 747 | 745 |
| 748 awaiting_decoder_ = true; | 746 awaiting_decoder_ = true; |
| 749 const PendingDecode& decode = pending_decodes_.front(); | 747 const PendingDecode& decode = pending_decodes_.front(); |
| 750 decode_id_ = decode.decode_id; | 748 decode_id_ = decode.decode_id; |
| 751 decoder_->Decode(decode.buffer, | 749 decoder_->Decode(decode.buffer, |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 796 main_task_runner_->PostTask( | 794 main_task_runner_->PostTask( |
| 797 FROM_HERE, base::Bind(&VideoDecoderShim::OnOutputComplete, shim_, | 795 FROM_HERE, base::Bind(&VideoDecoderShim::OnOutputComplete, shim_, |
| 798 base::Passed(&pending_frame))); | 796 base::Passed(&pending_frame))); |
| 799 } | 797 } |
| 800 | 798 |
| 801 void VideoDecoderShim::DecoderImpl::OnResetComplete() { | 799 void VideoDecoderShim::DecoderImpl::OnResetComplete() { |
| 802 main_task_runner_->PostTask( | 800 main_task_runner_->PostTask( |
| 803 FROM_HERE, base::Bind(&VideoDecoderShim::OnResetComplete, shim_)); | 801 FROM_HERE, base::Bind(&VideoDecoderShim::OnResetComplete, shim_)); |
| 804 } | 802 } |
| 805 | 803 |
| 806 VideoDecoderShim::VideoDecoderShim(PepperVideoDecoderHost* host) | 804 VideoDecoderShim::VideoDecoderShim( |
| 805 PepperVideoDecoderHost* host, uint32_t texture_pool_size) |
| 807 : state_(UNINITIALIZED), | 806 : state_(UNINITIALIZED), |
| 808 host_(host), | 807 host_(host), |
| 809 media_task_runner_( | 808 media_task_runner_( |
| 810 RenderThreadImpl::current()->GetMediaThreadTaskRunner()), | 809 RenderThreadImpl::current()->GetMediaThreadTaskRunner()), |
| 811 context_provider_( | 810 context_provider_( |
| 812 RenderThreadImpl::current()->SharedMainThreadContextProvider()), | 811 RenderThreadImpl::current()->SharedMainThreadContextProvider()), |
| 813 texture_pool_size_(0), | 812 texture_pool_size_(texture_pool_size), |
| 814 num_pending_decodes_(0), | 813 num_pending_decodes_(0), |
| 815 yuv_converter_(new YUVConverter(context_provider_)), | 814 yuv_converter_(new YUVConverter(context_provider_)), |
| 816 weak_ptr_factory_(this) { | 815 weak_ptr_factory_(this) { |
| 817 DCHECK(host_); | 816 DCHECK(host_); |
| 818 DCHECK(media_task_runner_.get()); | 817 DCHECK(media_task_runner_.get()); |
| 819 DCHECK(context_provider_.get()); | 818 DCHECK(context_provider_.get()); |
| 820 decoder_impl_.reset(new DecoderImpl(weak_ptr_factory_.GetWeakPtr())); | 819 decoder_impl_.reset(new DecoderImpl(weak_ptr_factory_.GetWeakPtr())); |
| 821 } | 820 } |
| 822 | 821 |
| 823 VideoDecoderShim::~VideoDecoderShim() { | 822 VideoDecoderShim::~VideoDecoderShim() { |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 949 media_task_runner_->PostTask( | 948 media_task_runner_->PostTask( |
| 950 FROM_HERE, | 949 FROM_HERE, |
| 951 base::Bind(&VideoDecoderShim::DecoderImpl::Reset, | 950 base::Bind(&VideoDecoderShim::DecoderImpl::Reset, |
| 952 base::Unretained(decoder_impl_.get()))); | 951 base::Unretained(decoder_impl_.get()))); |
| 953 } | 952 } |
| 954 | 953 |
| 955 void VideoDecoderShim::Destroy() { | 954 void VideoDecoderShim::Destroy() { |
| 956 delete this; | 955 delete this; |
| 957 } | 956 } |
| 958 | 957 |
| 959 void VideoDecoderShim::OnInitializeComplete(int32_t result, | 958 void VideoDecoderShim::OnInitializeComplete(int32_t result) { |
| 960 uint32_t texture_pool_size) { | |
| 961 DCHECK(RenderThreadImpl::current()); | 959 DCHECK(RenderThreadImpl::current()); |
| 962 DCHECK(host_); | 960 DCHECK(host_); |
| 963 | 961 |
| 964 if (result == PP_OK) { | 962 if (result == PP_OK) { |
| 965 state_ = DECODING; | 963 state_ = DECODING; |
| 966 texture_pool_size_ = texture_pool_size; | |
| 967 } | 964 } |
| 968 | 965 |
| 969 host_->OnInitializeComplete(result); | 966 host_->OnInitializeComplete(result); |
| 970 } | 967 } |
| 971 | 968 |
| 972 void VideoDecoderShim::OnDecodeComplete(int32_t result, uint32_t decode_id) { | 969 void VideoDecoderShim::OnDecodeComplete(int32_t result, uint32_t decode_id) { |
| 973 DCHECK(RenderThreadImpl::current()); | 970 DCHECK(RenderThreadImpl::current()); |
| 974 DCHECK(host_); | 971 DCHECK(host_); |
| 975 | 972 |
| 976 if (result == PP_ERROR_RESOURCE_FAILED) { | 973 if (result == PP_ERROR_RESOURCE_FAILED) { |
| (...skipping 117 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1094 void VideoDecoderShim::DeleteTexture(uint32_t texture_id) { | 1091 void VideoDecoderShim::DeleteTexture(uint32_t texture_id) { |
| 1095 gpu::gles2::GLES2Interface* gles2 = context_provider_->ContextGL(); | 1092 gpu::gles2::GLES2Interface* gles2 = context_provider_->ContextGL(); |
| 1096 gles2->DeleteTextures(1, &texture_id); | 1093 gles2->DeleteTextures(1, &texture_id); |
| 1097 } | 1094 } |
| 1098 | 1095 |
| 1099 void VideoDecoderShim::FlushCommandBuffer() { | 1096 void VideoDecoderShim::FlushCommandBuffer() { |
| 1100 context_provider_->ContextGL()->Flush(); | 1097 context_provider_->ContextGL()->Flush(); |
| 1101 } | 1098 } |
| 1102 | 1099 |
| 1103 } // namespace content | 1100 } // namespace content |
| OLD | NEW |