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}
diff --git a/sdk/android/api/org/webrtc/EncodedImage.java b/sdk/android/api/org/webrtc/EncodedImage.java
index fabf36a..b50136c 100644
--- a/sdk/android/api/org/webrtc/EncodedImage.java
+++ b/sdk/android/api/org/webrtc/EncodedImage.java
@@ -47,7 +47,6 @@
   }
 
   private final RefCountDelegate refCountDelegate;
-  private final boolean supportsRetain;
   public final ByteBuffer buffer;
   public final int encodedWidth;
   public final int encodedHeight;
@@ -69,22 +68,10 @@
     refCountDelegate.release();
   }
 
-  // A false return value means that the encoder expects that the buffer is no longer used after
-  // VideoEncoder.Callback.onEncodedFrame returns.
   @CalledByNative
-  boolean maybeRetain() {
-    if (supportsRetain) {
-      retain();
-      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) {
+  private EncodedImage(ByteBuffer buffer, @Nullable Runnable releaseCallback, int encodedWidth,
+      int encodedHeight, long captureTimeNs, FrameType frameType, int rotation,
+      boolean completeFrame, @Nullable Integer qp) {
     this.buffer = buffer;
     this.encodedWidth = encodedWidth;
     this.encodedHeight = encodedHeight;
@@ -94,7 +81,6 @@
     this.rotation = rotation;
     this.completeFrame = completeFrame;
     this.qp = qp;
-    this.supportsRetain = supportsRetain;
     this.refCountDelegate = new RefCountDelegate(releaseCallback);
   }
 
@@ -144,7 +130,6 @@
 
   public static class Builder {
     private ByteBuffer buffer;
-    private boolean supportsRetain;
     private @Nullable Runnable releaseCallback;
     private int encodedWidth;
     private int encodedHeight;
@@ -156,18 +141,9 @@
 
     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) {
       this.buffer = buffer;
       this.releaseCallback = releaseCallback;
-      this.supportsRetain = true;
       return this;
     }
 
@@ -213,8 +189,8 @@
     }
 
     public EncodedImage createEncodedImage() {
-      return new EncodedImage(buffer, supportsRetain, releaseCallback, encodedWidth, encodedHeight,
-          captureTimeNs, frameType, rotation, completeFrame, qp);
+      return new EncodedImage(buffer, releaseCallback, encodedWidth, encodedHeight, captureTimeNs,
+          frameType, rotation, completeFrame, qp);
     }
   }
 }
diff --git a/sdk/android/api/org/webrtc/RefCounted.java b/sdk/android/api/org/webrtc/RefCounted.java
index f854f70..0c1c3bf 100644
--- a/sdk/android/api/org/webrtc/RefCounted.java
+++ b/sdk/android/api/org/webrtc/RefCounted.java
@@ -18,7 +18,7 @@
  */
 public interface RefCounted {
   /** 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
diff --git a/sdk/android/instrumentationtests/src/org/webrtc/HardwareVideoEncoderTest.java b/sdk/android/instrumentationtests/src/org/webrtc/HardwareVideoEncoderTest.java
index 76a09ba..1591cae 100644
--- a/sdk/android/instrumentationtests/src/org/webrtc/HardwareVideoEncoderTest.java
+++ b/sdk/android/instrumentationtests/src/org/webrtc/HardwareVideoEncoderTest.java
@@ -95,7 +95,7 @@
       bufferCopy.rewind();
 
       frameQueue.offer(EncodedImage.builder()
-                           .setBuffer(bufferCopy)
+                           .setBuffer(bufferCopy, null)
                            .setEncodedWidth(frame.encodedWidth)
                            .setEncodedHeight(frame.encodedHeight)
                            .setCaptureTimeNs(frame.captureTimeNs)
diff --git a/sdk/android/src/jni/encoded_image.cc b/sdk/android/src/jni/encoded_image.cc
index 5c97bdb..e13653c 100644
--- a/sdk/android/src/jni/encoded_image.cc
+++ b/sdk/android/src/jni/encoded_image.cc
@@ -29,7 +29,7 @@
                          const JavaRef<jobject>& j_encoded_image,
                          const uint8_t* payload,
                          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)),
         size_(size) {}
 
@@ -65,7 +65,7 @@
   // TODO(bugs.webrtc.org/9378): Keep a reference to the C++ EncodedImage data,
   // and use the releaseCallback to manage lifetime.
   return Java_EncodedImage_Constructor(
-      jni, buffer, /*supportsRetain=*/true,
+      jni, buffer,
       /*releaseCallback=*/ScopedJavaGlobalRef<jobject>(nullptr),
       static_cast<int>(image._encodedWidth),
       static_cast<int>(image._encodedHeight),
@@ -90,13 +90,8 @@
   const size_t buffer_size = env->GetDirectBufferCapacity(j_buffer.obj());
 
   EncodedImage frame;
-  if (Java_EncodedImage_maybeRetain(env, j_encoded_image)) {
-    frame.SetEncodedData(new rtc::RefCountedObject<JavaEncodedImageBuffer>(
-        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.SetEncodedData(new rtc::RefCountedObject<JavaEncodedImageBuffer>(
+      env, j_encoded_image, buffer, buffer_size));
 
   frame._encodedWidth = Java_EncodedImage_getEncodedWidth(env, j_encoded_image);
   frame._encodedHeight =
diff --git a/sdk/android/src/jni/scoped_java_ref_counted.cc b/sdk/android/src/jni/scoped_java_ref_counted.cc
index aa6d817..1df8c7a 100644
--- a/sdk/android/src/jni/scoped_java_ref_counted.cc
+++ b/sdk/android/src/jni/scoped_java_ref_counted.cc
@@ -15,12 +15,22 @@
 namespace webrtc {
 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() {
   if (!j_object_.is_null()) {
     JNIEnv* jni = AttachCurrentThreadIfNeeded();
     Java_RefCounted_release(jni, j_object_);
     CHECK_EXCEPTION(jni)
-        << "Unexpected java exception from ScopedJavaRefCounted.release()";
+        << "Unexpected java exception from java RefCounted.release()";
   }
 }
 
diff --git a/sdk/android/src/jni/scoped_java_ref_counted.h b/sdk/android/src/jni/scoped_java_ref_counted.h
index a5f7ae0..4f8f183 100644
--- a/sdk/android/src/jni/scoped_java_ref_counted.h
+++ b/sdk/android/src/jni/scoped_java_ref_counted.h
@@ -20,11 +20,14 @@
 class ScopedJavaRefCounted {
  public:
   // Takes over the caller's reference.
-  static ScopedJavaRefCounted Adopt(JNIEnv* env,
+  static ScopedJavaRefCounted Adopt(JNIEnv* jni,
                                     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;
 
   // TODO(nisse): Implement move assignment and copy operations when needed.
@@ -35,8 +38,8 @@
 
  private:
   // Adopts reference.
-  ScopedJavaRefCounted(JNIEnv* env, const JavaRef<jobject>& j_object)
-      : j_object_(env, j_object) {}
+  ScopedJavaRefCounted(JNIEnv* jni, const JavaRef<jobject>& j_object)
+      : j_object_(jni, j_object) {}
 
   ScopedJavaGlobalRef<jobject> j_object_;
 };
diff --git a/sdk/android/tests/src/org/webrtc/AndroidVideoDecoderTest.java b/sdk/android/tests/src/org/webrtc/AndroidVideoDecoderTest.java
index b818a3e..2af5a20 100644
--- a/sdk/android/tests/src/org/webrtc/AndroidVideoDecoderTest.java
+++ b/sdk/android/tests/src/org/webrtc/AndroidVideoDecoderTest.java
@@ -185,7 +185,7 @@
 
   private EncodedImage createTestEncodedImage() {
     return EncodedImage.builder()
-        .setBuffer(ByteBuffer.wrap(ENCODED_TEST_DATA))
+        .setBuffer(ByteBuffer.wrap(ENCODED_TEST_DATA), null)
         .setFrameType(FrameType.VideoFrameKey)
         .setCompleteFrame(true)
         .createEncodedImage();