| Index: content/renderer/media_recorder/video_track_recorder.cc
|
| diff --git a/content/renderer/media_recorder/video_track_recorder.cc b/content/renderer/media_recorder/video_track_recorder.cc
|
| index 4d327e7f28a525e3c62b9e5ebffdc5a39395bec4..6aff9390b402976909174c016dc3d9a2dc8098ad 100644
|
| --- a/content/renderer/media_recorder/video_track_recorder.cc
|
| +++ b/content/renderer/media_recorder/video_track_recorder.cc
|
| @@ -47,6 +47,8 @@ using media::VideoFrame;
|
| using media::VideoFrameMetadata;
|
| using video_track_recorder::kVEAEncoderMinResolutionWidth;
|
| using video_track_recorder::kVEAEncoderMinResolutionHeight;
|
| +using video_track_recorder::kVEAEncoderMinResolutionWidthAndroid;
|
| +using video_track_recorder::kVEAEncoderMinResolutionHeightAndroid;
|
|
|
| namespace content {
|
|
|
| @@ -68,7 +70,7 @@ static const struct {
|
| } kPreferredCodecIdAndVEAProfiles[] = {
|
| {CodecId::VP8, media::VP8PROFILE_MIN, media::VP8PROFILE_MAX},
|
| {CodecId::VP9, media::VP9PROFILE_MIN, media::VP9PROFILE_MAX},
|
| -#if BUILDFLAG(RTC_USE_H264)
|
| +#if BUILDFLAG(RTC_USE_H264) || defined(OS_ANDROID)
|
| {CodecId::H264, media::H264PROFILE_MIN, media::H264PROFILE_MAX}
|
| #endif
|
| };
|
| @@ -111,11 +113,6 @@ CodecEnumerator::CodecEnumerator() {
|
| return;
|
| #endif
|
|
|
| -#if defined(OS_ANDROID)
|
| - // See https://crbug.com/653864.
|
| - return;
|
| -#endif
|
| -
|
| content::RenderThreadImpl* const render_thread_impl =
|
| content::RenderThreadImpl::current();
|
| if (!render_thread_impl) {
|
| @@ -158,6 +155,21 @@ media::VideoCodecProfile CodecEnumerator::CodecIdToVEAProfile(CodecId codec) {
|
| : profile->second;
|
| }
|
|
|
| +bool IsFrameSizeBiggerThanVEAEncoderMinResolution(const gfx::Size& input_size) {
|
| +#if !defined(OS_ANDROID)
|
| + if (input_size.width() >= input_size.height()) {
|
| + return input_size.width() >= kVEAEncoderMinResolutionWidth &&
|
| + input_size.height() >= kVEAEncoderMinResolutionHeight;
|
| + } else {
|
| + return input_size.height() >= kVEAEncoderMinResolutionWidth &&
|
| + input_size.width() >= kVEAEncoderMinResolutionHeight;
|
| + }
|
| +#else
|
| + return input_size.width() >= kVEAEncoderMinResolutionWidthAndroid &&
|
| + input_size.height() >= kVEAEncoderMinResolutionHeightAndroid;
|
| +#endif
|
| +}
|
| +
|
| } // anonymous namespace
|
|
|
| // Base class to describe a generic Encoder, encapsulating all actual encoder
|
| @@ -599,8 +611,6 @@ VEAEncoder::VEAEncoder(
|
| codec_(codec),
|
| error_notified_(false) {
|
| DCHECK(gpu_factories_);
|
| - DCHECK_GE(size.width(), kVEAEncoderMinResolutionWidth);
|
| - DCHECK_GE(size.height(), kVEAEncoderMinResolutionHeight);
|
|
|
| encoding_task_runner_->PostTask(
|
| FROM_HERE, base::Bind(&VEAEncoder::ConfigureEncoderOnEncodingTaskRunner,
|
| @@ -731,8 +741,7 @@ void VEAEncoder::EncodeOnEncodingTaskRunner(
|
| scoped_refptr<media::VideoFrame> video_frame = frame;
|
| if (video_frame->storage_type() != VideoFrame::STORAGE_SHMEM ||
|
| vea_requested_input_coded_size_ != frame->coded_size() ||
|
| - input_visible_size_.width() < kVEAEncoderMinResolutionWidth ||
|
| - input_visible_size_.height() < kVEAEncoderMinResolutionHeight) {
|
| + !IsFrameSizeBiggerThanVEAEncoderMinResolution(input_visible_size_)) {
|
| // Create SharedMemory backed input buffers as necessary. These SharedMemory
|
| // instances will be shared with GPU process.
|
| std::unique_ptr<base::SharedMemory> input_buffer;
|
| @@ -1305,8 +1314,7 @@ void VideoTrackRecorder::InitializeEncoder(
|
| const auto& vea_supported_profile =
|
| GetCodecEnumerator()->CodecIdToVEAProfile(codec);
|
| if (vea_supported_profile != media::VIDEO_CODEC_PROFILE_UNKNOWN &&
|
| - input_size.width() >= kVEAEncoderMinResolutionWidth &&
|
| - input_size.height() >= kVEAEncoderMinResolutionHeight) {
|
| + IsFrameSizeBiggerThanVEAEncoderMinResolution(input_size)) {
|
| encoder_ = new VEAEncoder(on_encoded_video_callback, bits_per_second,
|
| vea_supported_profile, input_size);
|
| } else {
|
|
|