Delete transitional method EncodedImage.maybeRetain

Bug: webrtc:9378
Change-Id: Ibe3d5bad835d1725faa38f8e2a804efc9272776e
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/155661
Reviewed-by: Sami Kalliomäki <sakal@webrtc.org>
Commit-Queue: Niels Moller <nisse@webrtc.org>
Cr-Commit-Position: refs/heads/master@{#30072}
This commit is contained in:
Niels Möller
2019-10-04 16:17:48 +02:00
committed by Commit Bot
parent 3927298c22
commit 82f33c566a
7 changed files with 30 additions and 46 deletions

View File

@ -47,7 +47,6 @@ public class EncodedImage implements RefCounted {
} }
private final RefCountDelegate refCountDelegate; private final RefCountDelegate refCountDelegate;
private final boolean supportsRetain;
public final ByteBuffer buffer; public final ByteBuffer buffer;
public final int encodedWidth; public final int encodedWidth;
public final int encodedHeight; public final int encodedHeight;
@ -69,22 +68,10 @@ public class EncodedImage implements RefCounted {
refCountDelegate.release(); refCountDelegate.release();
} }
// A false return value means that the encoder expects that the buffer is no longer used after
// VideoEncoder.Callback.onEncodedFrame returns.
@CalledByNative @CalledByNative
boolean maybeRetain() { private EncodedImage(ByteBuffer buffer, @Nullable Runnable releaseCallback, int encodedWidth,
if (supportsRetain) { int encodedHeight, long captureTimeNs, FrameType frameType, int rotation,
retain(); boolean completeFrame, @Nullable Integer qp) {
return true;
} else {
return false;
}
}
@CalledByNative
private EncodedImage(ByteBuffer buffer, boolean supportsRetain,
@Nullable Runnable releaseCallback, int encodedWidth, int encodedHeight, long captureTimeNs,
FrameType frameType, int rotation, boolean completeFrame, @Nullable Integer qp) {
this.buffer = buffer; this.buffer = buffer;
this.encodedWidth = encodedWidth; this.encodedWidth = encodedWidth;
this.encodedHeight = encodedHeight; this.encodedHeight = encodedHeight;
@ -94,7 +81,6 @@ public class EncodedImage implements RefCounted {
this.rotation = rotation; this.rotation = rotation;
this.completeFrame = completeFrame; this.completeFrame = completeFrame;
this.qp = qp; this.qp = qp;
this.supportsRetain = supportsRetain;
this.refCountDelegate = new RefCountDelegate(releaseCallback); this.refCountDelegate = new RefCountDelegate(releaseCallback);
} }
@ -144,7 +130,6 @@ public class EncodedImage implements RefCounted {
public static class Builder { public static class Builder {
private ByteBuffer buffer; private ByteBuffer buffer;
private boolean supportsRetain;
private @Nullable Runnable releaseCallback; private @Nullable Runnable releaseCallback;
private int encodedWidth; private int encodedWidth;
private int encodedHeight; private int encodedHeight;
@ -156,18 +141,9 @@ public class EncodedImage implements RefCounted {
private Builder() {} private Builder() {}
@Deprecated
public Builder setBuffer(ByteBuffer buffer) {
this.buffer = buffer;
this.releaseCallback = null;
this.supportsRetain = false;
return this;
}
public Builder setBuffer(ByteBuffer buffer, @Nullable Runnable releaseCallback) { public Builder setBuffer(ByteBuffer buffer, @Nullable Runnable releaseCallback) {
this.buffer = buffer; this.buffer = buffer;
this.releaseCallback = releaseCallback; this.releaseCallback = releaseCallback;
this.supportsRetain = true;
return this; return this;
} }
@ -213,8 +189,8 @@ public class EncodedImage implements RefCounted {
} }
public EncodedImage createEncodedImage() { public EncodedImage createEncodedImage() {
return new EncodedImage(buffer, supportsRetain, releaseCallback, encodedWidth, encodedHeight, return new EncodedImage(buffer, releaseCallback, encodedWidth, encodedHeight, captureTimeNs,
captureTimeNs, frameType, rotation, completeFrame, qp); frameType, rotation, completeFrame, qp);
} }
} }
} }

View File

@ -18,7 +18,7 @@ package org.webrtc;
*/ */
public interface RefCounted { public interface RefCounted {
/** Increases ref count by one. */ /** Increases ref count by one. */
void retain(); @CalledByNative void retain();
/** /**
* Decreases ref count by one. When the ref count reaches zero, resources related to the object * Decreases ref count by one. When the ref count reaches zero, resources related to the object

View File

@ -95,7 +95,7 @@ public class HardwareVideoEncoderTest {
bufferCopy.rewind(); bufferCopy.rewind();
frameQueue.offer(EncodedImage.builder() frameQueue.offer(EncodedImage.builder()
.setBuffer(bufferCopy) .setBuffer(bufferCopy, null)
.setEncodedWidth(frame.encodedWidth) .setEncodedWidth(frame.encodedWidth)
.setEncodedHeight(frame.encodedHeight) .setEncodedHeight(frame.encodedHeight)
.setCaptureTimeNs(frame.captureTimeNs) .setCaptureTimeNs(frame.captureTimeNs)

View File

@ -29,7 +29,7 @@ class JavaEncodedImageBuffer : public EncodedImageBufferInterface {
const JavaRef<jobject>& j_encoded_image, const JavaRef<jobject>& j_encoded_image,
const uint8_t* payload, const uint8_t* payload,
size_t size) size_t size)
: j_encoded_image_(ScopedJavaRefCounted::Adopt(env, j_encoded_image)), : j_encoded_image_(ScopedJavaRefCounted::Retain(env, j_encoded_image)),
data_(const_cast<uint8_t*>(payload)), data_(const_cast<uint8_t*>(payload)),
size_(size) {} size_(size) {}
@ -65,7 +65,7 @@ ScopedJavaLocalRef<jobject> NativeToJavaEncodedImage(
// TODO(bugs.webrtc.org/9378): Keep a reference to the C++ EncodedImage data, // TODO(bugs.webrtc.org/9378): Keep a reference to the C++ EncodedImage data,
// and use the releaseCallback to manage lifetime. // and use the releaseCallback to manage lifetime.
return Java_EncodedImage_Constructor( return Java_EncodedImage_Constructor(
jni, buffer, /*supportsRetain=*/true, jni, buffer,
/*releaseCallback=*/ScopedJavaGlobalRef<jobject>(nullptr), /*releaseCallback=*/ScopedJavaGlobalRef<jobject>(nullptr),
static_cast<int>(image._encodedWidth), static_cast<int>(image._encodedWidth),
static_cast<int>(image._encodedHeight), static_cast<int>(image._encodedHeight),
@ -90,13 +90,8 @@ EncodedImage JavaToNativeEncodedImage(JNIEnv* env,
const size_t buffer_size = env->GetDirectBufferCapacity(j_buffer.obj()); const size_t buffer_size = env->GetDirectBufferCapacity(j_buffer.obj());
EncodedImage frame; EncodedImage frame;
if (Java_EncodedImage_maybeRetain(env, j_encoded_image)) { frame.SetEncodedData(new rtc::RefCountedObject<JavaEncodedImageBuffer>(
frame.SetEncodedData(new rtc::RefCountedObject<JavaEncodedImageBuffer>( env, j_encoded_image, buffer, buffer_size));
env, j_encoded_image, buffer, buffer_size));
} else {
// Encoder doesn't support retain/release, so make a copy.
frame.SetEncodedData(EncodedImageBuffer::Create(buffer, buffer_size));
}
frame._encodedWidth = Java_EncodedImage_getEncodedWidth(env, j_encoded_image); frame._encodedWidth = Java_EncodedImage_getEncodedWidth(env, j_encoded_image);
frame._encodedHeight = frame._encodedHeight =

View File

@ -15,12 +15,22 @@
namespace webrtc { namespace webrtc {
namespace jni { namespace jni {
// static
ScopedJavaRefCounted ScopedJavaRefCounted::Retain(
JNIEnv* jni,
const JavaRef<jobject>& j_object) {
Java_RefCounted_retain(jni, j_object);
CHECK_EXCEPTION(jni)
<< "Unexpected java exception from java JavaRefCounted.retain()";
return Adopt(jni, j_object);
}
ScopedJavaRefCounted::~ScopedJavaRefCounted() { ScopedJavaRefCounted::~ScopedJavaRefCounted() {
if (!j_object_.is_null()) { if (!j_object_.is_null()) {
JNIEnv* jni = AttachCurrentThreadIfNeeded(); JNIEnv* jni = AttachCurrentThreadIfNeeded();
Java_RefCounted_release(jni, j_object_); Java_RefCounted_release(jni, j_object_);
CHECK_EXCEPTION(jni) CHECK_EXCEPTION(jni)
<< "Unexpected java exception from ScopedJavaRefCounted.release()"; << "Unexpected java exception from java RefCounted.release()";
} }
} }

View File

@ -20,11 +20,14 @@ namespace jni {
class ScopedJavaRefCounted { class ScopedJavaRefCounted {
public: public:
// Takes over the caller's reference. // Takes over the caller's reference.
static ScopedJavaRefCounted Adopt(JNIEnv* env, static ScopedJavaRefCounted Adopt(JNIEnv* jni,
const JavaRef<jobject>& j_object) { const JavaRef<jobject>& j_object) {
return ScopedJavaRefCounted(env, j_object); return ScopedJavaRefCounted(jni, j_object);
} }
// Retains the java object for the live time of this object.
static ScopedJavaRefCounted Retain(JNIEnv* jni,
const JavaRef<jobject>& j_object);
ScopedJavaRefCounted(ScopedJavaRefCounted&& other) = default; ScopedJavaRefCounted(ScopedJavaRefCounted&& other) = default;
// TODO(nisse): Implement move assignment and copy operations when needed. // TODO(nisse): Implement move assignment and copy operations when needed.
@ -35,8 +38,8 @@ class ScopedJavaRefCounted {
private: private:
// Adopts reference. // Adopts reference.
ScopedJavaRefCounted(JNIEnv* env, const JavaRef<jobject>& j_object) ScopedJavaRefCounted(JNIEnv* jni, const JavaRef<jobject>& j_object)
: j_object_(env, j_object) {} : j_object_(jni, j_object) {}
ScopedJavaGlobalRef<jobject> j_object_; ScopedJavaGlobalRef<jobject> j_object_;
}; };

View File

@ -185,7 +185,7 @@ public class AndroidVideoDecoderTest {
private EncodedImage createTestEncodedImage() { private EncodedImage createTestEncodedImage() {
return EncodedImage.builder() return EncodedImage.builder()
.setBuffer(ByteBuffer.wrap(ENCODED_TEST_DATA)) .setBuffer(ByteBuffer.wrap(ENCODED_TEST_DATA), null)
.setFrameType(FrameType.VideoFrameKey) .setFrameType(FrameType.VideoFrameKey)
.setCompleteFrame(true) .setCompleteFrame(true)
.createEncodedImage(); .createEncodedImage();