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

Unified Diff: talk/app/webrtc/java/jni/androidmediaencoder_jni.cc

Issue 1470043002: Support texture scaling in Androids MediaEncoder (Closed) Base URL: https://chromium.googlesource.com/external/webrtc.git@master
Patch Set: Added test in VideoCapturerAndroid Created 5 years, 1 month 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 | « talk/app/webrtc/androidvideocapturer.cc ('k') | talk/app/webrtc/java/jni/native_handle_impl.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: talk/app/webrtc/java/jni/androidmediaencoder_jni.cc
diff --git a/talk/app/webrtc/java/jni/androidmediaencoder_jni.cc b/talk/app/webrtc/java/jni/androidmediaencoder_jni.cc
index 3fc13222ede0a2316ecf39f8a4e9cdbe22cb5e73..5f76170891f34400fdf9f4380d3e3bad5c354b26 100644
--- a/talk/app/webrtc/java/jni/androidmediaencoder_jni.cc
+++ b/talk/app/webrtc/java/jni/androidmediaencoder_jni.cc
@@ -506,9 +506,7 @@ int32_t MediaCodecVideoEncoder::InitEncodeOnCodecThread(
}
CHECK_EXCEPTION(jni);
- if (use_surface) {
- scale_ = false; // TODO(perkj): Implement scaling when using textures.
- } else {
+ if (!use_surface) {
jobjectArray input_buffers = reinterpret_cast<jobjectArray>(
jni->CallObjectMethod(*j_media_codec_video_encoder_,
j_get_input_buffers_method_));
@@ -574,12 +572,27 @@ int32_t MediaCodecVideoEncoder::EncodeOnCodecThread(
}
RTC_CHECK(frame_types->size() == 1) << "Unexpected stream count";
- // Check framerate before spatial resolution change.
- if (scale_)
- quality_scaler_.OnEncodeFrame(frame);
- const VideoFrame& input_frame =
- scale_ ? quality_scaler_.GetScaledFrame(frame) : frame;
+ VideoFrame input_frame = frame;
+ if (scale_) {
+ // Check framerate before spatial resolution change.
+ quality_scaler_.OnEncodeFrame(frame);
+ if (quality_scaler_.GetScaledResolution().width != frame.width() ||
pbos-webrtc 2015/11/26 09:41:37 Get scaled resolution once, this looks clunky. Oth
perkj_webrtc 2015/11/26 12:58:48 Done.
+ quality_scaler_.GetScaledResolution().height != frame.height()) {
+ if (frame.native_handle() != nullptr) {
+ rtc::scoped_refptr<webrtc::VideoFrameBuffer> scaled_buffer(
pbos-webrtc 2015/11/26 09:41:37 If you wanna put a comment on how the crop-and-sca
perkj_webrtc 2015/11/26 12:58:48 No I don't :-> Read the code...
+ static_cast<AndroidTextureBuffer*>(
+ frame.video_frame_buffer().get())->CropAndScale(
+ frame.width(),
+ frame.height(),
+ quality_scaler_.GetScaledResolution().width,
+ quality_scaler_.GetScaledResolution().height));
+ input_frame.set_video_frame_buffer(scaled_buffer);
+ } else {
+ input_frame.ShallowCopy(quality_scaler_.GetScaledFrame(frame));
+ }
+ }
+ }
if (!MaybeReconfigureEncoderOnCodecThread(input_frame)) {
ALOGE << "Failed to reconfigure encoder.";
« no previous file with comments | « talk/app/webrtc/androidvideocapturer.cc ('k') | talk/app/webrtc/java/jni/native_handle_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698