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

Unified Diff: webrtc/api/java/jni/androidmediaencoder_jni.cc

Issue 1889463002: Remove field trial for scaling down MediaCodec. (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Created 4 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
« no previous file with comments | « no previous file | webrtc/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: webrtc/api/java/jni/androidmediaencoder_jni.cc
diff --git a/webrtc/api/java/jni/androidmediaencoder_jni.cc b/webrtc/api/java/jni/androidmediaencoder_jni.cc
index d83c4314c6c558c0937ffcc344d1d605e8197cf6..81014b779c823725be0ebee895b3f244e11baf49 100644
--- a/webrtc/api/java/jni/androidmediaencoder_jni.cc
+++ b/webrtc/api/java/jni/androidmediaencoder_jni.cc
@@ -242,8 +242,6 @@ class MediaCodecVideoEncoder : public webrtc::VideoEncoder,
// Global references; must be deleted in Release().
std::vector<jobject> input_buffers_;
QualityScaler quality_scaler_;
- // Dynamic resolution change, off by default.
- bool scale_;
// H264 bitstream parser, used to extract QP from encoded bitstreams.
webrtc::H264BitstreamParser h264_bitstream_parser_;
@@ -365,44 +363,35 @@ int32_t MediaCodecVideoEncoder::InitEncode(
codec_mode_ = codec_settings->mode;
int init_width = codec_settings->width;
int init_height = codec_settings->height;
- scale_ = (codecType_ != kVideoCodecVP9) && (webrtc::field_trial::FindFullName(
- "WebRTC-MediaCodecVideoEncoder-AutomaticResize") == "Enabled");
-
ALOGD << "InitEncode request: " << init_width << " x " << init_height;
- ALOGD << "Encoder automatic resize " << (scale_ ? "enabled" : "disabled");
-
- if (scale_) {
- if (codecType_ == kVideoCodecVP8) {
- // QP is obtained from VP8-bitstream for HW, so the QP corresponds to the
- // (internal) range: [0, 127]. And we cannot change QP_max in HW, so it is
- // always = 127. Note that in SW, QP is that of the user-level range [0,
- // 63].
- const int kLowQpThreshold = 29;
- const int kBadQpThreshold = 90;
- quality_scaler_.Init(kLowQpThreshold, kBadQpThreshold, false,
- codec_settings->startBitrate, codec_settings->width,
- codec_settings->height,
- codec_settings->maxFramerate);
- } else if (codecType_ == kVideoCodecH264) {
- // H264 QP is in the range [0, 51].
- const int kLowQpThreshold = 21;
- const int kBadQpThreshold = 33;
- quality_scaler_.Init(kLowQpThreshold, kBadQpThreshold, false,
- codec_settings->startBitrate, codec_settings->width,
- codec_settings->height,
- codec_settings->maxFramerate);
- } else {
- // When adding codec support to additional hardware codecs, also configure
- // their QP thresholds for scaling.
- RTC_NOTREACHED() << "Unsupported codec without configured QP thresholds.";
- scale_ = false;
- }
- quality_scaler_.SetMinResolution(kMinDimension, kMinDimension);
- QualityScaler::Resolution res = quality_scaler_.GetScaledResolution();
- init_width = std::max(res.width, kMinDimension);
- init_height = std::max(res.height, kMinDimension);
- ALOGD << "Scaled resolution: " << init_width << " x " << init_height;
+
+ if (codecType_ == kVideoCodecVP8) {
+ // QP is obtained from VP8-bitstream for HW, so the QP corresponds to the
+ // (internal) range: [0, 127]. And we cannot change QP_max in HW, so it is
+ // always = 127. Note that in SW, QP is that of the user-level range [0,
+ // 63].
+ const int kLowQpThreshold = 29;
+ const int kBadQpThreshold = 90;
+ quality_scaler_.Init(kLowQpThreshold, kBadQpThreshold, false,
+ codec_settings->startBitrate, codec_settings->width,
+ codec_settings->height, codec_settings->maxFramerate);
+ } else if (codecType_ == kVideoCodecH264) {
+ // H264 QP is in the range [0, 51].
+ const int kLowQpThreshold = 21;
+ const int kBadQpThreshold = 33;
+ quality_scaler_.Init(kLowQpThreshold, kBadQpThreshold, false,
+ codec_settings->startBitrate, codec_settings->width,
+ codec_settings->height, codec_settings->maxFramerate);
+ } else {
+ // When adding codec support to additional hardware codecs, also configure
+ // their QP thresholds for scaling.
+ RTC_NOTREACHED() << "Unsupported codec without configured QP thresholds.";
}
+ quality_scaler_.SetMinResolution(kMinDimension, kMinDimension);
+ QualityScaler::Resolution res = quality_scaler_.GetScaledResolution();
+ init_width = std::max(res.width, kMinDimension);
+ init_height = std::max(res.height, kMinDimension);
+ ALOGD << "Scaled resolution: " << init_width << " x " << init_height;
return codec_thread_->Invoke<int32_t>(
Bind(&MediaCodecVideoEncoder::InitEncodeOnCodecThread,
@@ -662,24 +651,21 @@ int32_t MediaCodecVideoEncoder::EncodeOnCodecThread(
consecutive_full_queue_frame_drops_ = 0;
VideoFrame input_frame = frame;
- if (scale_) {
- // Check framerate before spatial resolution change.
- quality_scaler_.OnEncodeFrame(frame);
- const webrtc::QualityScaler::Resolution scaled_resolution =
- quality_scaler_.GetScaledResolution();
- if (scaled_resolution.width != frame.width() ||
- scaled_resolution.height != frame.height()) {
- if (frame.native_handle() != nullptr) {
- rtc::scoped_refptr<webrtc::VideoFrameBuffer> scaled_buffer(
- static_cast<AndroidTextureBuffer*>(
- frame.video_frame_buffer().get())->ScaleAndRotate(
- scaled_resolution.width,
- scaled_resolution.height,
- webrtc::kVideoRotation_0));
- input_frame.set_video_frame_buffer(scaled_buffer);
- } else {
- input_frame = quality_scaler_.GetScaledFrame(frame);
- }
+ // Check framerate before spatial resolution change.
+ quality_scaler_.OnEncodeFrame(frame);
+ const webrtc::QualityScaler::Resolution scaled_resolution =
AlexG 2016/04/13 16:46:12 How this will work for VP9 case? We do not report
+ quality_scaler_.GetScaledResolution();
+ if (scaled_resolution.width != frame.width() ||
+ scaled_resolution.height != frame.height()) {
+ if (frame.native_handle() != nullptr) {
+ rtc::scoped_refptr<webrtc::VideoFrameBuffer> scaled_buffer(
+ static_cast<AndroidTextureBuffer*>(frame.video_frame_buffer().get())
+ ->ScaleAndRotate(scaled_resolution.width,
+ scaled_resolution.height,
+ webrtc::kVideoRotation_0));
+ input_frame.set_video_frame_buffer(scaled_buffer);
+ } else {
+ input_frame = quality_scaler_.GetScaledFrame(frame);
}
}
@@ -860,9 +846,7 @@ int32_t MediaCodecVideoEncoder::SetRatesOnCodecThread(uint32_t new_bit_rate,
last_set_fps_ == frame_rate) {
return WEBRTC_VIDEO_CODEC_OK;
}
- if (scale_) {
- quality_scaler_.ReportFramerate(frame_rate);
- }
+ quality_scaler_.ReportFramerate(frame_rate);
JNIEnv* jni = AttachCurrentThreadIfNeeded();
ScopedLocalRefFrame local_ref_frame(jni);
if (new_bit_rate > 0) {
@@ -975,7 +959,7 @@ bool MediaCodecVideoEncoder::DeliverPendingOutputs(JNIEnv* jni) {
(key_frame ? webrtc::kVideoFrameKey : webrtc::kVideoFrameDelta);
image->_completeFrame = true;
image->adapt_reason_.quality_resolution_downscales =
- scale_ ? quality_scaler_.downscale_shift() : -1;
+ quality_scaler_.downscale_shift();
webrtc::CodecSpecificInfo info;
memset(&info, 0, sizeof(info));
@@ -1023,7 +1007,7 @@ bool MediaCodecVideoEncoder::DeliverPendingOutputs(JNIEnv* jni) {
header.fragmentationLength[0] = image->_length;
header.fragmentationPlType[0] = 0;
header.fragmentationTimeDiff[0] = 0;
- if (codecType_ == kVideoCodecVP8 && scale_) {
+ if (codecType_ == kVideoCodecVP8) {
int qp;
if (webrtc::vp8::GetQp(payload, payload_size, &qp)) {
current_acc_qp_ += qp;
@@ -1031,13 +1015,11 @@ bool MediaCodecVideoEncoder::DeliverPendingOutputs(JNIEnv* jni) {
}
}
} else if (codecType_ == kVideoCodecH264) {
- if (scale_) {
- h264_bitstream_parser_.ParseBitstream(payload, payload_size);
- int qp;
- if (h264_bitstream_parser_.GetLastSliceQp(&qp)) {
- current_acc_qp_ += qp;
- quality_scaler_.ReportQP(qp);
- }
+ h264_bitstream_parser_.ParseBitstream(payload, payload_size);
+ int qp;
+ if (h264_bitstream_parser_.GetLastSliceQp(&qp)) {
+ current_acc_qp_ += qp;
+ quality_scaler_.ReportQP(qp);
}
// For H.264 search for start codes.
int32_t scPositions[MAX_NALUS_PERFRAME + 1] = {};
@@ -1157,12 +1139,11 @@ int32_t MediaCodecVideoEncoder::NextNaluPosition(
void MediaCodecVideoEncoder::OnDroppedFrame() {
// Report dropped frame to quality_scaler_.
- if (scale_)
- quality_scaler_.ReportDroppedFrame();
+ quality_scaler_.ReportDroppedFrame();
}
int MediaCodecVideoEncoder::GetTargetFramerate() {
- return scale_ ? quality_scaler_.GetTargetFramerate() : -1;
+ return quality_scaler_.GetTargetFramerate();
}
const char* MediaCodecVideoEncoder::ImplementationName() const {
« no previous file with comments | « no previous file | webrtc/examples/androidapp/src/org/appspot/apprtc/PeerConnectionClient.java » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698