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

Unified Diff: webrtc/sdk/android/src/jni/androidmediaencoder_jni.cc

Issue 2936313002: Support H.264 high profile encoding on Exynos devices. (Closed)
Patch Set: Created 3 years, 6 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: webrtc/sdk/android/src/jni/androidmediaencoder_jni.cc
diff --git a/webrtc/sdk/android/src/jni/androidmediaencoder_jni.cc b/webrtc/sdk/android/src/jni/androidmediaencoder_jni.cc
index 39c1e96cbec2dd4cb9c232041e243ea3457e4b78..a20ca375fe5bc56b5b3222027cc1e1c37c8df78d 100644
--- a/webrtc/sdk/android/src/jni/androidmediaencoder_jni.cc
+++ b/webrtc/sdk/android/src/jni/androidmediaencoder_jni.cc
@@ -274,6 +274,7 @@ class MediaCodecVideoEncoder : public webrtc::VideoEncoder {
// value and the next Encode() call being ignored.
bool drop_next_input_frame_;
bool scale_;
+ webrtc::H264::Profile profile_;
// Global references; must be deleted in Release().
std::vector<jobject> input_buffers_;
webrtc::H264BitstreamParser h264_bitstream_parser_;
@@ -335,12 +336,10 @@ MediaCodecVideoEncoder::MediaCodecVideoEncoder(JNIEnv* jni,
jclass j_output_buffer_info_class =
FindClass(jni, "org/webrtc/MediaCodecVideoEncoder$OutputBufferInfo");
- j_init_encode_method_ = GetMethodID(
- jni,
- *j_media_codec_video_encoder_class_,
- "initEncode",
- "(Lorg/webrtc/MediaCodecVideoEncoder$VideoCodecType;"
- "IIIILorg/webrtc/EglBase14$Context;)Z");
+ j_init_encode_method_ =
+ GetMethodID(jni, *j_media_codec_video_encoder_class_, "initEncode",
+ "(Lorg/webrtc/MediaCodecVideoEncoder$VideoCodecType;"
+ "IIIIILorg/webrtc/EglBase14$Context;)Z");
j_get_input_buffers_method_ = GetMethodID(
jni,
*j_media_codec_video_encoder_class_,
@@ -419,6 +418,16 @@ int32_t MediaCodecVideoEncoder::InitEncode(
ALOGD << "InitEncode request: " << init_width << " x " << init_height;
ALOGD << "Encoder automatic resize " << (scale_ ? "enabled" : "disabled");
+ // Check allowed H.264 profile
+ profile_ = webrtc::H264::Profile::kProfileBaseline;
+ if (codec_type == kVideoCodecH264) {
+ const rtc::Optional<webrtc::H264::ProfileLevelId> profile_level_id =
+ webrtc::H264::ParseSdpProfileLevelId(codec_.params);
+ RTC_DCHECK(profile_level_id);
+ profile_ = profile_level_id->profile;
+ ALOGD << "H.264 profile: " << profile_;
+ }
+
return InitEncodeInternal(
init_width, init_height, codec_settings->startBitrate,
codec_settings->maxFramerate, codec_settings->expect_encode_from_texture);
@@ -531,7 +540,7 @@ int32_t MediaCodecVideoEncoder::InitEncodeInternal(int width,
const VideoCodecType codec_type = GetCodecType();
ALOGD << "InitEncodeInternal Type: " << static_cast<int>(codec_type) << ", "
<< width << " x " << height << ". Bitrate: " << kbps
- << " kbps. Fps: " << fps;
+ << " kbps. Fps: " << fps << ". Profile: " << profile_;
brandtr 2017/06/15 09:04:06 nit: add << ".";
AlexG 2017/06/15 23:01:12 Done.
if (kbps == 0) {
kbps = last_set_bitrate_kbps_;
}
@@ -570,8 +579,8 @@ int32_t MediaCodecVideoEncoder::InitEncodeInternal(int width,
jobject j_video_codec_enum = JavaEnumFromIndexAndClassName(
jni, "MediaCodecVideoEncoder$VideoCodecType", codec_type);
const bool encode_status = jni->CallBooleanMethod(
- *j_media_codec_video_encoder_, j_init_encode_method_,
- j_video_codec_enum, width, height, kbps, fps,
+ *j_media_codec_video_encoder_, j_init_encode_method_, j_video_codec_enum,
+ profile_, width, height, kbps, fps,
(use_surface ? egl_context_ : nullptr));
if (!encode_status) {
ALOGE << "Failed to configure encoder.";
@@ -1252,7 +1261,7 @@ MediaCodecVideoEncoderFactory::MediaCodecVideoEncoderFactory()
CHECK_EXCEPTION(jni);
if (is_vp8_hw_supported) {
ALOGD << "VP8 HW Encoder supported.";
- supported_codecs_.push_back(cricket::VideoCodec("VP8"));
+ supported_codecs_.push_back(cricket::VideoCodec(cricket::kVp8CodecName));
}
bool is_vp9_hw_supported = jni->CallStaticBooleanMethod(
@@ -1261,7 +1270,7 @@ MediaCodecVideoEncoderFactory::MediaCodecVideoEncoderFactory()
CHECK_EXCEPTION(jni);
if (is_vp9_hw_supported) {
ALOGD << "VP9 HW Encoder supported.";
- supported_codecs_.push_back(cricket::VideoCodec("VP9"));
+ supported_codecs_.push_back(cricket::VideoCodec(cricket::kVp9CodecName));
}
supported_codecs_with_h264_hp_ = supported_codecs_;

Powered by Google App Engine
This is Rietveld 408576698