Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a9a3f316 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge changes from topic "cherrypicker-L42900000962703660:N58500001398762844" into main

* changes:
  Remove unused getRenderScript
  Remove unused AllocationBacking
parents 5314b091 b0b4612d
Loading
Loading
Loading
Loading
+0 −191
Original line number Diff line number Diff line
@@ -14,17 +14,10 @@

package androidx.media.filterfw;

import android.annotation.TargetApi;
import android.graphics.Bitmap;
import android.os.Build;
import android.renderscript.Allocation;
import android.renderscript.Element;
import android.renderscript.RenderScript;
import android.renderscript.Type;
import android.util.Log;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.util.Arrays;
import java.util.Vector;

@@ -42,14 +35,11 @@ final class BackingStore {
    static final int ACCESS_OBJECT = 0x08;
    /** Access mode Bitmap: Frame data will be accessed as a Bitmap. */
    static final int ACCESS_BITMAP = 0x10;
    /** Access mode Allocation: Frame data will be accessed as a RenderScript Allocation. */
    static final int ACCESS_ALLOCATION = 0x20;

    private static final int BACKING_BYTEBUFFER = 1;
    private static final int BACKING_TEXTURE = 2;
    private static final int BACKING_OBJECT = 3;
    private static final int BACKING_BITMAP = 4;
    private static final int BACKING_ALLOCATION = 5;

    private final FrameType mType;
    private int[] mDimensions;
@@ -243,14 +233,6 @@ final class BackingStore {
                case ACCESS_BITMAP:
                    backing = new BitmapBacking();
                    break;
                case ACCESS_ALLOCATION:
                    if (!AllocationBacking.isSupported()) {
                        throw new RuntimeException(
                                "Attempted to create an AllocationBacking in context that does " +
                                "not support RenderScript!");
                    }
                    backing = new AllocationBacking(mFrameManager.getContext().getRenderScript());
                    break;
            }
            if (backing == null) {
                throw new RuntimeException(
@@ -518,9 +500,6 @@ final class BackingStore {
                RenderTarget renderTarget = (RenderTarget) backing.lock(ACCESS_RENDERTARGET);
                mBitmap.copyPixelsFromBuffer(
                        renderTarget.getPixelData(mDimensions[0], mDimensions[1]));
            } else if ((access & ACCESS_ALLOCATION) != 0 && AllocationBacking.isSupported()) {
                createBitmap();
                syncToAllocationBacking(backing);
            } else {
                throw new RuntimeException("Cannot sync bytebuffer backing!");
            }
@@ -528,12 +507,6 @@ final class BackingStore {
            mIsDirty = false;
        }

        @TargetApi(11)
        private void syncToAllocationBacking(Backing backing) {
            Allocation allocation = (Allocation) backing.lock(ACCESS_ALLOCATION);
            allocation.copyTo(mBitmap);
        }

        @Override
        public Object lock(int accessType) {
            return mBitmap;
@@ -612,8 +585,6 @@ final class BackingStore {
                int w = mDimensions[0];
                int h = mDimensions[1];
                ImageShader.renderTextureToTarget(texture, getRenderTarget(), w, h);
            } else if ((access & ACCESS_ALLOCATION) != 0 && AllocationBacking.isSupported()) {
                syncToAllocationBacking(backing);
            } else {
                throw new RuntimeException("Cannot sync bytebuffer backing!");
            }
@@ -621,14 +592,6 @@ final class BackingStore {
            mIsDirty = false;
        }

        @TargetApi(11)
        private void syncToAllocationBacking(Backing backing) {
            Allocation allocation = (Allocation) backing.lock(ACCESS_ALLOCATION);
            ByteBuffer pixels = ByteBuffer.allocateDirect(getSize());
            allocation.copyTo(pixels.array());
            mTexture.allocateWithPixels(pixels, mDimensions[0], mDimensions[1]);
        }

        @Override
        public Object lock(int accessType) {
            switch (accessType) {
@@ -733,8 +696,6 @@ final class BackingStore {
                ByteBuffer otherBuffer = (ByteBuffer) backing.lock(ACCESS_BYTES);
                mBuffer.put(otherBuffer);
                otherBuffer.rewind();
            } else if ((access & ACCESS_ALLOCATION) != 0 && AllocationBacking.isSupported()) {
                syncToAllocationBacking(backing);
            } else {
                throw new RuntimeException("Cannot sync bytebuffer backing!");
            }
@@ -743,23 +704,6 @@ final class BackingStore {
            mIsDirty = false;
        }

        @TargetApi(11)
        private void syncToAllocationBacking(Backing backing) {
            Allocation allocation = (Allocation) backing.lock(ACCESS_ALLOCATION);
            if (getElementId() == FrameType.ELEMENT_RGBA8888) {
                byte[] bytes = mBuffer.array();
                allocation.copyTo(bytes);
            } else if (getElementId() == FrameType.ELEMENT_FLOAT32) {
                float[] floats = new float[getSize() / 4];
                allocation.copyTo(floats);
                mBuffer.asFloatBuffer().put(floats);
            } else {
                throw new RuntimeException(
                        "Trying to sync to an allocation with an unsupported element id: "
                        + getElementId());
            }
        }

        @Override
        public Object lock(int accessType) {
            return mBuffer.rewind();
@@ -791,139 +735,4 @@ final class BackingStore {
        }

    }

    @TargetApi(11)
    static class AllocationBacking extends Backing {

        private final RenderScript mRenderScript;
        private Allocation mAllocation = null;

        public AllocationBacking(RenderScript renderScript) {
            mRenderScript = renderScript;
        }

        @Override
        public void allocate(FrameType frameType) {
            assertCompatible(frameType);

            Element element = null;
            switch (frameType.getElementId()) {
                case FrameType.ELEMENT_RGBA8888:
                    element = Element.RGBA_8888(mRenderScript);
                    break;
                case FrameType.ELEMENT_FLOAT32:
                    element = Element.F32(mRenderScript);
                    break;
            }
            Type.Builder imageTypeBuilder = new Type.Builder(mRenderScript, element);
            imageTypeBuilder.setX(mDimensions.length >= 1 ? mDimensions[0] : 1);
            imageTypeBuilder.setY(mDimensions.length == 2 ? mDimensions[1] : 1);
            Type imageType = imageTypeBuilder.create();

            mAllocation = Allocation.createTyped(mRenderScript, imageType);
        }

        @Override
        public int readAccess() {
            return ACCESS_ALLOCATION;
        }

        @Override
        public int writeAccess() {
            return ACCESS_ALLOCATION;
        }

        @Override
        public boolean requiresGpu() {
            return false;
        }

        @Override
        public void syncTo(Backing backing) {
            int access = backing.readAccess();
            if ((access & ACCESS_TEXTURE) != 0) {
                RenderTarget target = (RenderTarget) backing.lock(ACCESS_RENDERTARGET);
                ByteBuffer pixels = ByteBuffer.allocateDirect(getSize());
                GLToolbox.readTarget(target, pixels, mDimensions[0], mDimensions[1]);
                mAllocation.copyFrom(pixels.array());
            } else if ((access & ACCESS_BITMAP) != 0) {
                Bitmap bitmap = (Bitmap) backing.lock(ACCESS_BITMAP);
                mAllocation.copyFrom(bitmap);
            } else if ((access & ACCESS_BYTES) != 0) {
                ByteBuffer buffer = (ByteBuffer) backing.lock(ACCESS_BYTES);
                if (buffer.order() != ByteOrder.nativeOrder()) {
                    throw new RuntimeException(
                            "Trying to sync to the ByteBufferBacking with non-native byte order!");
                }
                byte[] bytes;
                if (buffer.hasArray()) {
                    bytes = buffer.array();
                } else {
                    bytes = new byte[getSize()];
                    buffer.get(bytes);
                    buffer.rewind();
                }
                mAllocation.copyFromUnchecked(bytes);
            } else {
                throw new RuntimeException("Cannot sync allocation backing!");
            }
            backing.unlock();
            mIsDirty = false;
        }

        @Override
        public Object lock(int accessType) {
            return mAllocation;
        }

        @Override
        public void unlock() {
        }

        @Override
        public int getType() {
            return BACKING_ALLOCATION;
        }

        @Override
        public boolean shouldCache() {
            return true;
        }

        @Override
        public void destroy() {
            if (mAllocation != null) {
                mAllocation.destroy();
                mAllocation = null;
            }
        }

        @Override
        public int getSize() {
            int elementCount = 1;
            for (int dim : mDimensions) {
                elementCount *= dim;
            }
            return getElementSize() * elementCount;
        }

        public static boolean isSupported() {
            return Build.VERSION.SDK_INT >= 11;
        }

        private void assertCompatible(FrameType type) {
            // TODO: consider adding support for other data types.
            if (type.getElementId() != FrameType.ELEMENT_RGBA8888
                    && type.getElementId() != FrameType.ELEMENT_FLOAT32) {
                throw new RuntimeException(
                        "Cannot allocate allocation with a non-RGBA or non-float data type!");
            }
            if (mDimensions == null || mDimensions.length > 2) {
                throw new RuntimeException(
                        "Cannot create an allocation with more than 2 dimensions!");
            }
        }

    }

}
+0 −16
Original line number Diff line number Diff line
@@ -16,9 +16,6 @@

package androidx.media.filterfw;

import android.annotation.TargetApi;
import android.renderscript.Allocation;

import java.nio.ByteBuffer;
import java.nio.ByteOrder;

@@ -40,19 +37,6 @@ public class FrameBuffer1D extends Frame {
        return (ByteBuffer)mBackingStore.lockData(mode, BackingStore.ACCESS_BYTES);
    }

    /**
     * Access frame's data using a RenderScript {@link Allocation}.
     * This is a convenience method and is equivalent to calling {@code lockData} with an
     * {@code accessFormat} of {@code ACCESS_ALLOCATION}.
     *
     * @return The Allocation instance holding the Frame's data.
     */
    @TargetApi(11)
    public Allocation lockAllocation(int mode) {
        assertAccessible(mode);
        return (Allocation) mBackingStore.lockData(mode, BackingStore.ACCESS_ALLOCATION);
    }

    public int getLength() {
        return mLength;
    }
+1 −25
Original line number Diff line number Diff line
@@ -16,15 +16,12 @@

package androidx.media.filterfw;

import android.annotation.TargetApi;
import android.app.Activity;
import android.app.ActivityManager;
import android.content.Context;
import android.content.pm.ConfigurationInfo;
import android.os.Build;
import android.os.Handler;
import android.os.Looper;
import android.renderscript.RenderScript;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
@@ -116,9 +113,6 @@ public class MffContext {
    /** Flag whether camera streaming is supported in this context. */
    private boolean mCameraStreamingSupport;

    /** RenderScript base master class. */
    private RenderScript mRenderScript;

    /**
     * Creates a new MffContext with the default configuration.
     *
@@ -200,9 +194,7 @@ public class MffContext {
                    mCameraStreamer.stop();
                    mCameraStreamer.tearDown();
                }
                if (Build.VERSION.SDK_INT >= 11) {
                    maybeDestroyRenderScript();
                }

                stopRunners(false);
                waitUntilStopped();
                tearDown();
@@ -301,14 +293,6 @@ public class MffContext {
        return mCameraStreamingSupport;
    }

    @TargetApi(11)
    public final RenderScript getRenderScript() {
        if (mRenderScript == null) {
            mRenderScript = RenderScript.create(mApplicationContext);
        }
        return mRenderScript;
    }

    final void assertOpenGLSupported() {
        if (!isOpenGLSupported()) {
            throw new RuntimeException("Attempting to use OpenGL ES 2 in a context that does not "
@@ -459,12 +443,4 @@ public class MffContext {
        return (context instanceof Activity) ? (Activity) context : null;
    }

    @TargetApi(11)
    private void maybeDestroyRenderScript() {
        if (mRenderScript != null) {
            mRenderScript.destroy();
            mRenderScript = null;
        }
    }

}