Commit bc9072b5 authored by John Lin's avatar John Lin Committed by Pier Angelo Vendrame
Browse files

Bug 2023515 - p1: add 'copy between native memory' method to SampleBuffer. a=diannaS DONTBUILD

With this method, C++ code won't have to create a temporary Java object
just to copy sample buffer data into native heap.

Original Revision: https://phabricator.services.mozilla.com/D289046

Differential Revision: https://phabricator.services.mozilla.com/D292302
parent b7e6bb28
Loading
Loading
Loading
Loading
+18 −0
Original line number Diff line number Diff line
@@ -82,6 +82,24 @@ public final class SampleBuffer implements Parcelable {
  private static native void nativeWriteToDirectBuffer(
      long src, ByteBuffer dest, int offset, int size);

  @WrapForJNI(exceptionMode = "nsresult")
  public void nativeCopy(final long dest, final int offset, final int size) throws IOException {
    if (mSharedMem == null || !mSharedMem.isValid()) {
      throw new IOException("Invalid state.");
    }
    if (offset + size > mSharedMem.getSize()) {
      throw new IOException("Out-of-bound: buffer too small.");
    }
    try {
      final long src = mSharedMem.getPointer() + offset;
      nativeMemcpy(dest, src, size);
    } catch (final NullPointerException e) {
      throw new IOException(e);
    }
  }

  private static native void nativeMemcpy(long dest, long src, int size);

  public void dispose() {
    if (mSharedMem != null) {
      mSharedMem.dispose();
+7 −0
Original line number Diff line number Diff line
@@ -55,6 +55,13 @@ Java_org_mozilla_gecko_media_SampleBuffer_nativeWriteToDirectBuffer(
  memcpy(to, from + offset, size);
}

JNIEXPORT
void JNICALL Java_org_mozilla_gecko_media_SampleBuffer_nativeMemcpy(
    JNIEnv*, jclass, jlong dest, jlong src, jint size) {
  memcpy(reinterpret_cast<void*>(dest), reinterpret_cast<const void*>(src),
         size);
}

JNIEXPORT
jlong JNICALL Java_org_mozilla_gecko_mozglue_SharedMemory_map(JNIEnv* env,
                                                              jobject jobj,