summaryrefslogtreecommitdiff
path: root/chromium/media/gpu/chromeos/video_decoder_pipeline.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/media/gpu/chromeos/video_decoder_pipeline.cc')
-rw-r--r--chromium/media/gpu/chromeos/video_decoder_pipeline.cc44
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