diff options
Diffstat (limited to 'chromium/media/gpu/chromeos/video_decoder_pipeline.cc')
-rw-r--r-- | chromium/media/gpu/chromeos/video_decoder_pipeline.cc | 44 |
1 files changed, 28 insertions, 16 deletions
diff --git a/chromium/media/gpu/chromeos/video_decoder_pipeline.cc b/chromium/media/gpu/chromeos/video_decoder_pipeline.cc index 8ff5ac44366..aed6668f16e 100644 --- a/chromium/media/gpu/chromeos/video_decoder_pipeline.cc +++ b/chromium/media/gpu/chromeos/video_decoder_pipeline.cc @@ -157,10 +157,14 @@ void VideoDecoderPipeline::DestroyAsync( std::string VideoDecoderPipeline::GetDisplayName() const { DCHECK_CALLED_ON_VALID_SEQUENCE(client_sequence_checker_); - return "VideoDecoderPipeline"; } +VideoDecoderType VideoDecoderPipeline::GetDecoderType() const { + DCHECK_CALLED_ON_VALID_SEQUENCE(client_sequence_checker_); + return VideoDecoderType::kChromeOs; +} + bool VideoDecoderPipeline::IsPlatformDecoder() const { DCHECK_CALLED_ON_VALID_SEQUENCE(client_sequence_checker_); @@ -190,7 +194,7 @@ void VideoDecoderPipeline::Initialize(const VideoDecoderConfig& config, CdmContext* cdm_context, InitCB init_cb, const OutputCB& output_cb, - const WaitingCB& /* waiting_cb */) { + const WaitingCB& waiting_cb) { DCHECK_CALLED_ON_VALID_SEQUENCE(client_sequence_checker_); VLOGF(2) << "config: " << config.AsHumanReadableString(); @@ -218,18 +222,21 @@ void VideoDecoderPipeline::Initialize(const VideoDecoderConfig& config, } #endif // !BUILDFLAG(USE_CHROMEOS_PROTECTED_MEDIA) - needs_bitstream_conversion_ = (config.codec() == kCodecH264); + needs_bitstream_conversion_ = + (config.codec() == kCodecH264) || (config.codec() == kCodecHEVC); decoder_task_runner_->PostTask( - FROM_HERE, base::BindOnce(&VideoDecoderPipeline::InitializeTask, - decoder_weak_this_, config, cdm_context, - std::move(init_cb), std::move(output_cb))); + FROM_HERE, + base::BindOnce(&VideoDecoderPipeline::InitializeTask, decoder_weak_this_, + config, cdm_context, std::move(init_cb), + std::move(output_cb), std::move(waiting_cb))); } void VideoDecoderPipeline::InitializeTask(const VideoDecoderConfig& config, CdmContext* cdm_context, InitCB init_cb, - const OutputCB& output_cb) { + const OutputCB& output_cb, + const WaitingCB& waiting_cb) { DVLOGF(3); DCHECK_CALLED_ON_VALID_SEQUENCE(decoder_sequence_checker_); DCHECK(!init_cb_); @@ -242,19 +249,22 @@ void VideoDecoderPipeline::InitializeTask(const VideoDecoderConfig& config, // resolution. Subsequent initializations are marked by |decoder_| already // existing. if (!decoder_) { - CreateAndInitializeVD(config, cdm_context, Status()); + CreateAndInitializeVD(config, cdm_context, std::move(waiting_cb), Status()); } else { decoder_->Initialize( config, cdm_context, base::BindOnce(&VideoDecoderPipeline::OnInitializeDone, - decoder_weak_this_, config, cdm_context, Status()), + decoder_weak_this_, config, cdm_context, waiting_cb, + Status()), base::BindRepeating(&VideoDecoderPipeline::OnFrameDecoded, - decoder_weak_this_)); + decoder_weak_this_), + waiting_cb); } } void VideoDecoderPipeline::CreateAndInitializeVD(VideoDecoderConfig config, CdmContext* cdm_context, + const WaitingCB& waiting_cb, Status parent_error) { DCHECK_CALLED_ON_VALID_SEQUENCE(decoder_sequence_checker_); DCHECK(init_cb_); @@ -280,7 +290,7 @@ void VideoDecoderPipeline::CreateAndInitializeVD(VideoDecoderConfig config, DVLOGF(2) << "|decoder_| creation failed, trying again with the next " "available create function."; return CreateAndInitializeVD( - config, cdm_context, + config, cdm_context, std::move(waiting_cb), AppendOrForwardStatus(parent_error, StatusCode::kDecoderFailedCreation)); } @@ -288,14 +298,16 @@ void VideoDecoderPipeline::CreateAndInitializeVD(VideoDecoderConfig config, decoder_->Initialize( config, cdm_context, base::BindOnce(&VideoDecoderPipeline::OnInitializeDone, - decoder_weak_this_, config, cdm_context, + decoder_weak_this_, config, cdm_context, waiting_cb, std::move(parent_error)), base::BindRepeating(&VideoDecoderPipeline::OnFrameDecoded, - decoder_weak_this_)); + decoder_weak_this_), + waiting_cb); } void VideoDecoderPipeline::OnInitializeDone(VideoDecoderConfig config, CdmContext* cdm_context, + const WaitingCB& waiting_cb, Status parent_error, Status status) { DCHECK_CALLED_ON_VALID_SEQUENCE(decoder_sequence_checker_); @@ -314,7 +326,7 @@ void VideoDecoderPipeline::OnInitializeDone(VideoDecoderConfig config, DVLOGF(3) << "|decoder_| initialization failed, trying again with the next " "available create function."; decoder_ = nullptr; - CreateAndInitializeVD(config, cdm_context, + CreateAndInitializeVD(config, cdm_context, waiting_cb, AppendOrForwardStatus(parent_error, std::move(status))); } @@ -431,9 +443,9 @@ void VideoDecoderPipeline::OnFrameConverted(scoped_refptr<VideoFrame> frame) { } // Flag that the video frame is capable of being put in an overlay. - frame->metadata()->allow_overlay = true; + frame->metadata().allow_overlay = true; // Flag that the video frame was decoded in a power efficient way. - frame->metadata()->power_efficient = true; + frame->metadata().power_efficient = true; // MojoVideoDecoderService expects the |output_cb_| to be called on the client // task runner, even though media::VideoDecoder states frames should be output |