Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(325)

Unified Diff: media/cast/sender/external_video_encoder.cc

Issue 901833004: [Cast] Repurpose CastInitializationStatus for variable frame size support. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Compile fixes. Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: media/cast/sender/external_video_encoder.cc
diff --git a/media/cast/sender/external_video_encoder.cc b/media/cast/sender/external_video_encoder.cc
index d09dcfe24710458c3e9a65689dd74c227e83e881..c5685e5005a7ed6466429f5abef9206577b5f9cc 100644
--- a/media/cast/sender/external_video_encoder.cc
+++ b/media/cast/sender/external_video_encoder.cc
@@ -63,10 +63,12 @@ class ExternalVideoEncoder::VEAClientImpl
const scoped_refptr<base::SingleThreadTaskRunner>& encoder_task_runner,
scoped_ptr<media::VideoEncodeAccelerator> vea,
int max_frame_rate,
+ const StatusChangeCallback& status_change_cb,
const CreateVideoEncodeMemoryCallback& create_video_encode_memory_cb)
: cast_environment_(cast_environment),
task_runner_(encoder_task_runner),
max_frame_rate_(max_frame_rate),
+ status_change_cb_(status_change_cb),
create_video_encode_memory_cb_(create_video_encode_memory_cb),
video_encode_accelerator_(vea.Pass()),
encoder_active_(false),
@@ -80,8 +82,7 @@ class ExternalVideoEncoder::VEAClientImpl
void Initialize(const gfx::Size& frame_size,
VideoCodecProfile codec_profile,
- int start_bit_rate,
- const CastInitializationCallback& initialization_cb) {
+ int start_bit_rate) {
DCHECK(task_runner_->RunsTasksOnCurrentThread());
DCHECK(!frame_size.IsEmpty());
@@ -95,14 +96,12 @@ class ExternalVideoEncoder::VEAClientImpl
UMA_HISTOGRAM_BOOLEAN("Cast.Sender.VideoEncodeAcceleratorInitializeSuccess",
encoder_active_);
- if (!initialization_cb.is_null()) {
- cast_environment_->PostTask(
- CastEnvironment::MAIN,
- FROM_HERE,
- base::Bind(initialization_cb,
- encoder_active_ ? STATUS_VIDEO_INITIALIZED :
- STATUS_HW_VIDEO_ENCODER_NOT_SUPPORTED));
- }
+ cast_environment_->PostTask(
+ CastEnvironment::MAIN,
+ FROM_HERE,
+ base::Bind(status_change_cb_,
+ encoder_active_ ? STATUS_INITIALIZED :
+ STATUS_CODEC_INIT_FAILED));
}
void SetBitRate(int bit_rate) {
@@ -134,11 +133,17 @@ class ExternalVideoEncoder::VEAClientImpl
protected:
void NotifyError(VideoEncodeAccelerator::Error error) override {
DCHECK(task_runner_->RunsTasksOnCurrentThread());
- VLOG(1) << "ExternalVideoEncoder NotifyError: " << error;
+
+ DCHECK(error != VideoEncodeAccelerator::kInvalidArgumentError &&
+ error != VideoEncodeAccelerator::kIllegalStateError);
encoder_active_ = false;
- // TODO(miu): Plumbing is required to bubble this up to the CastSession and
- // beyond.
+
+ cast_environment_->PostTask(
+ CastEnvironment::MAIN,
+ FROM_HERE,
+ base::Bind(status_change_cb_, STATUS_CODEC_RUNTIME_ERROR));
+
// TODO(miu): Force-flush all |in_progress_frame_encodes_| immediately so
// pending frames do not become stuck, freezing VideoSender.
}
@@ -281,6 +286,7 @@ class ExternalVideoEncoder::VEAClientImpl
const scoped_refptr<CastEnvironment> cast_environment_;
const scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
const int max_frame_rate_;
+ const StatusChangeCallback status_change_cb_; // Must be run on MAIN thread.
const CreateVideoEncodeMemoryCallback create_video_encode_memory_cb_;
scoped_ptr<media::VideoEncodeAccelerator> video_encode_accelerator_;
bool encoder_active_;
@@ -301,7 +307,7 @@ ExternalVideoEncoder::ExternalVideoEncoder(
const scoped_refptr<CastEnvironment>& cast_environment,
const VideoSenderConfig& video_config,
const gfx::Size& frame_size,
- const CastInitializationCallback& initialization_cb,
+ const StatusChangeCallback& status_change_cb,
const CreateVideoEncodeAcceleratorCallback& create_vea_cb,
const CreateVideoEncodeMemoryCallback& create_video_encode_memory_cb)
: cast_environment_(cast_environment),
@@ -312,6 +318,7 @@ ExternalVideoEncoder::ExternalVideoEncoder(
DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
DCHECK_GT(video_config.max_frame_rate, 0);
DCHECK(!frame_size.IsEmpty());
+ DCHECK(!status_change_cb.is_null());
DCHECK(!create_vea_cb.is_null());
DCHECK(!create_video_encode_memory_cb_.is_null());
DCHECK_GT(bit_rate_, 0);
@@ -331,7 +338,7 @@ ExternalVideoEncoder::ExternalVideoEncoder(
cast_environment_->PostTask(
CastEnvironment::MAIN,
FROM_HERE,
- base::Bind(initialization_cb, STATUS_HW_VIDEO_ENCODER_NOT_SUPPORTED));
+ base::Bind(status_change_cb, STATUS_UNSUPPORTED_CODEC));
return;
}
@@ -341,7 +348,7 @@ ExternalVideoEncoder::ExternalVideoEncoder(
frame_size,
codec_profile,
video_config.max_frame_rate,
- initialization_cb));
+ status_change_cb));
}
ExternalVideoEncoder::~ExternalVideoEncoder() {
@@ -397,7 +404,7 @@ void ExternalVideoEncoder::OnCreateVideoEncodeAccelerator(
const gfx::Size& frame_size,
VideoCodecProfile codec_profile,
int max_frame_rate,
- const CastInitializationCallback& initialization_cb,
+ const StatusChangeCallback& status_change_cb,
scoped_refptr<base::SingleThreadTaskRunner> encoder_task_runner,
scoped_ptr<media::VideoEncodeAccelerator> vea) {
DCHECK(cast_environment_->CurrentlyOn(CastEnvironment::MAIN));
@@ -406,12 +413,10 @@ void ExternalVideoEncoder::OnCreateVideoEncodeAccelerator(
// system does not support or lacks the resources to provide GPU-accelerated
// video encoding.
if (!encoder_task_runner || !vea) {
- if (!initialization_cb.is_null()) {
- cast_environment_->PostTask(
- CastEnvironment::MAIN,
- FROM_HERE,
- base::Bind(initialization_cb, STATUS_INVALID_VIDEO_CONFIGURATION));
- }
+ cast_environment_->PostTask(
+ CastEnvironment::MAIN,
+ FROM_HERE,
+ base::Bind(status_change_cb, STATUS_CODEC_INIT_FAILED));
return;
}
@@ -420,14 +425,14 @@ void ExternalVideoEncoder::OnCreateVideoEncodeAccelerator(
encoder_task_runner,
vea.Pass(),
max_frame_rate,
+ status_change_cb,
create_video_encode_memory_cb_);
client_->task_runner()->PostTask(FROM_HERE,
base::Bind(&VEAClientImpl::Initialize,
client_,
frame_size,
codec_profile,
- bit_rate_,
- initialization_cb));
+ bit_rate_));
}
} // namespace cast

Powered by Google App Engine
This is Rietveld 408576698