Add support for scaling textures in AndroidVideoCapturer.

The idea is to also reuse AndroidTextureBuffer::CropAndScale when scaling in the encoder.

BUG=webrtc:4993
R=magjed@webrtc.org

Review URL: https://codereview.webrtc.org/1471333003 .

Cr-Commit-Position: refs/heads/master@{#10802}
This commit is contained in:
Per
2015-11-26 13:41:44 +01:00
parent fd5dae395b
commit a3c20bb9a0
6 changed files with 112 additions and 4 deletions

View File

@ -28,9 +28,17 @@
#include "talk/app/webrtc/java/jni/native_handle_impl.h"
#include "webrtc/base/checks.h"
#include "webrtc/base/bind.h"
using rtc::scoped_refptr;
using webrtc::NativeHandleBuffer;
namespace webrtc_jni {
namespace {
void ScaledFrameNotInUse(scoped_refptr<NativeHandleBuffer> original) {}
} // anonymous namespace
NativeHandleImpl::NativeHandleImpl(JNIEnv* jni,
jint j_oes_texture_id,
jfloatArray j_transform_matrix)
@ -64,4 +72,22 @@ AndroidTextureBuffer::NativeToI420Buffer() {
return nullptr;
}
rtc::scoped_refptr<AndroidTextureBuffer> AndroidTextureBuffer::CropAndScale(
int cropped_input_width,
int cropped_input_height,
int dst_widht,
int dst_height) {
// TODO(perkj) Implement cropping.
RTC_CHECK_EQ(cropped_input_width, width_);
RTC_CHECK_EQ(cropped_input_height, height_);
// Here we use Bind magic to add a reference count to |this| until the newly
// created AndroidTextureBuffer is destructed. ScaledFrameNotInUse will be
// called that happens and when it finishes, the reference count to |this|
// will be decreased by one.
return new rtc::RefCountedObject<AndroidTextureBuffer>(
dst_widht, dst_height, native_handle_,
rtc::Bind(&ScaledFrameNotInUse, this));
}
} // namespace webrtc_jni