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 { |