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

Unified Diff: content/renderer/media_recorder/video_track_recorder.cc

Issue 2801803002: Android: enable H264&VP8 HW accelerator for MediaRecorder (Closed)
Patch Set: Created 3 years, 8 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: 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 {

Powered by Google App Engine
This is Rietveld 408576698