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:
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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 =
|
||||||
|
|||||||
@ -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()";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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_;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user