Search in sources :

Example 1 with Quad

use of androidx.media.filterfw.geometry.Quad in project platform_frameworks_base by android.

the class CropFilter method onProcess.

@Override
protected void onProcess() {
    OutputPort outPort = getConnectedOutputPort("image");
    // Pull input frame
    FrameImage2D inputImage = getConnectedInputPort("image").pullFrame().asFrameImage2D();
    int[] inDims = inputImage.getDimensions();
    int[] croppedDims = { (int) Math.ceil(mCropRect.xEdge().length() * inDims[0]), (int) Math.ceil(mCropRect.yEdge().length() * inDims[1]) };
    int[] outDims = { getOutputWidth(croppedDims[0], croppedDims[1]), getOutputHeight(croppedDims[0], croppedDims[1]) };
    FrameImage2D outputImage = outPort.fetchAvailableFrame(outDims).asFrameImage2D();
    if (isOpenGLSupported()) {
        FrameImage2D sourceFrame;
        Quad sourceQuad = null;
        boolean scaleDown = (outDims[0] < croppedDims[0]) || (outDims[1] < croppedDims[1]);
        if (scaleDown && mUseMipmaps) {
            mPow2Frame = TransformUtils.makeMipMappedFrame(mPow2Frame, croppedDims);
            int[] extDims = mPow2Frame.getDimensions();
            float targetWidth = croppedDims[0] / (float) extDims[0];
            float targetHeight = croppedDims[1] / (float) extDims[1];
            Quad targetQuad = Quad.fromRect(0f, 0f, targetWidth, targetHeight);
            mShader.setSourceQuad(mCropRect);
            mShader.setTargetQuad(targetQuad);
            mShader.process(inputImage, mPow2Frame);
            TransformUtils.generateMipMaps(mPow2Frame);
            sourceFrame = mPow2Frame;
            sourceQuad = targetQuad;
        } else {
            sourceFrame = inputImage;
            sourceQuad = mCropRect;
        }
        mShader.setSourceQuad(sourceQuad);
        mShader.setTargetRect(0f, 0f, 1f, 1f);
        mShader.process(sourceFrame, outputImage);
    } else {
        // Convert quads to canvas coordinate space
        Quad sourceQuad = mCropRect.scale2(inDims[0], inDims[1]);
        Quad targetQuad = Quad.fromRect(0f, 0f, inDims[0], inDims[1]);
        // Calculate transform for crop
        Matrix transform = Quad.getTransform(sourceQuad, targetQuad);
        transform.postScale(outDims[0] / (float) inDims[0], outDims[1] / (float) inDims[1]);
        // Create target canvas
        Bitmap.Config config = Bitmap.Config.ARGB_8888;
        Bitmap cropped = Bitmap.createBitmap(outDims[0], outDims[1], config);
        Canvas canvas = new Canvas(cropped);
        // Draw source bitmap into target canvas
        Paint paint = new Paint();
        paint.setFilterBitmap(true);
        Bitmap sourceBitmap = inputImage.toBitmap();
        canvas.drawBitmap(sourceBitmap, transform, paint);
        // Assign bitmap to output frame
        outputImage.setBitmap(cropped);
    }
    outPort.pushFrame(outputImage);
}
Also used : OutputPort(androidx.media.filterfw.OutputPort) Quad(androidx.media.filterfw.geometry.Quad) Bitmap(android.graphics.Bitmap) Matrix(android.graphics.Matrix) FrameImage2D(androidx.media.filterfw.FrameImage2D) Canvas(android.graphics.Canvas) Paint(android.graphics.Paint)

Example 2 with Quad

use of androidx.media.filterfw.geometry.Quad in project android_frameworks_base by DirtyUnicorns.

the class RotateFilter method onProcess.

@Override
protected void onProcess() {
    OutputPort outPort = getConnectedOutputPort("image");
    FrameImage2D inputImage = getConnectedInputPort("image").pullFrame().asFrameImage2D();
    int[] inDims = inputImage.getDimensions();
    FrameImage2D outputImage = outPort.fetchAvailableFrame(inDims).asFrameImage2D();
    mShader.setSourceQuad(mSourceRect);
    Quad targetQuad = mSourceRect.rotated((float) (mRotateAngle / 180 * Math.PI));
    mShader.setTargetQuad(targetQuad);
    mShader.process(inputImage, outputImage);
    outPort.pushFrame(outputImage);
}
Also used : OutputPort(androidx.media.filterfw.OutputPort) Quad(androidx.media.filterfw.geometry.Quad) FrameImage2D(androidx.media.filterfw.FrameImage2D)

Example 3 with Quad

use of androidx.media.filterfw.geometry.Quad in project android_frameworks_base by ResurrectionRemix.

the class RotateFilter method onProcess.

@Override
protected void onProcess() {
    OutputPort outPort = getConnectedOutputPort("image");
    FrameImage2D inputImage = getConnectedInputPort("image").pullFrame().asFrameImage2D();
    int[] inDims = inputImage.getDimensions();
    FrameImage2D outputImage = outPort.fetchAvailableFrame(inDims).asFrameImage2D();
    mShader.setSourceQuad(mSourceRect);
    Quad targetQuad = mSourceRect.rotated((float) (mRotateAngle / 180 * Math.PI));
    mShader.setTargetQuad(targetQuad);
    mShader.process(inputImage, outputImage);
    outPort.pushFrame(outputImage);
}
Also used : OutputPort(androidx.media.filterfw.OutputPort) Quad(androidx.media.filterfw.geometry.Quad) FrameImage2D(androidx.media.filterfw.FrameImage2D)

Example 4 with Quad

use of androidx.media.filterfw.geometry.Quad in project android_frameworks_base by ResurrectionRemix.

the class CropFilter method onProcess.

@Override
protected void onProcess() {
    OutputPort outPort = getConnectedOutputPort("image");
    // Pull input frame
    FrameImage2D inputImage = getConnectedInputPort("image").pullFrame().asFrameImage2D();
    int[] inDims = inputImage.getDimensions();
    int[] croppedDims = { (int) Math.ceil(mCropRect.xEdge().length() * inDims[0]), (int) Math.ceil(mCropRect.yEdge().length() * inDims[1]) };
    int[] outDims = { getOutputWidth(croppedDims[0], croppedDims[1]), getOutputHeight(croppedDims[0], croppedDims[1]) };
    FrameImage2D outputImage = outPort.fetchAvailableFrame(outDims).asFrameImage2D();
    if (isOpenGLSupported()) {
        FrameImage2D sourceFrame;
        Quad sourceQuad = null;
        boolean scaleDown = (outDims[0] < croppedDims[0]) || (outDims[1] < croppedDims[1]);
        if (scaleDown && mUseMipmaps) {
            mPow2Frame = TransformUtils.makeMipMappedFrame(mPow2Frame, croppedDims);
            int[] extDims = mPow2Frame.getDimensions();
            float targetWidth = croppedDims[0] / (float) extDims[0];
            float targetHeight = croppedDims[1] / (float) extDims[1];
            Quad targetQuad = Quad.fromRect(0f, 0f, targetWidth, targetHeight);
            mShader.setSourceQuad(mCropRect);
            mShader.setTargetQuad(targetQuad);
            mShader.process(inputImage, mPow2Frame);
            TransformUtils.generateMipMaps(mPow2Frame);
            sourceFrame = mPow2Frame;
            sourceQuad = targetQuad;
        } else {
            sourceFrame = inputImage;
            sourceQuad = mCropRect;
        }
        mShader.setSourceQuad(sourceQuad);
        mShader.setTargetRect(0f, 0f, 1f, 1f);
        mShader.process(sourceFrame, outputImage);
    } else {
        // Convert quads to canvas coordinate space
        Quad sourceQuad = mCropRect.scale2(inDims[0], inDims[1]);
        Quad targetQuad = Quad.fromRect(0f, 0f, inDims[0], inDims[1]);
        // Calculate transform for crop
        Matrix transform = Quad.getTransform(sourceQuad, targetQuad);
        transform.postScale(outDims[0] / (float) inDims[0], outDims[1] / (float) inDims[1]);
        // Create target canvas
        Bitmap.Config config = Bitmap.Config.ARGB_8888;
        Bitmap cropped = Bitmap.createBitmap(outDims[0], outDims[1], config);
        Canvas canvas = new Canvas(cropped);
        // Draw source bitmap into target canvas
        Paint paint = new Paint();
        paint.setFilterBitmap(true);
        Bitmap sourceBitmap = inputImage.toBitmap();
        canvas.drawBitmap(sourceBitmap, transform, paint);
        // Assign bitmap to output frame
        outputImage.setBitmap(cropped);
    }
    outPort.pushFrame(outputImage);
}
Also used : OutputPort(androidx.media.filterfw.OutputPort) Quad(androidx.media.filterfw.geometry.Quad) Bitmap(android.graphics.Bitmap) Matrix(android.graphics.Matrix) FrameImage2D(androidx.media.filterfw.FrameImage2D) Canvas(android.graphics.Canvas) Paint(android.graphics.Paint)

Example 5 with Quad

use of androidx.media.filterfw.geometry.Quad in project android_frameworks_base by crdroidandroid.

the class CropFilter method onProcess.

@Override
protected void onProcess() {
    OutputPort outPort = getConnectedOutputPort("image");
    // Pull input frame
    FrameImage2D inputImage = getConnectedInputPort("image").pullFrame().asFrameImage2D();
    int[] inDims = inputImage.getDimensions();
    int[] croppedDims = { (int) Math.ceil(mCropRect.xEdge().length() * inDims[0]), (int) Math.ceil(mCropRect.yEdge().length() * inDims[1]) };
    int[] outDims = { getOutputWidth(croppedDims[0], croppedDims[1]), getOutputHeight(croppedDims[0], croppedDims[1]) };
    FrameImage2D outputImage = outPort.fetchAvailableFrame(outDims).asFrameImage2D();
    if (isOpenGLSupported()) {
        FrameImage2D sourceFrame;
        Quad sourceQuad = null;
        boolean scaleDown = (outDims[0] < croppedDims[0]) || (outDims[1] < croppedDims[1]);
        if (scaleDown && mUseMipmaps) {
            mPow2Frame = TransformUtils.makeMipMappedFrame(mPow2Frame, croppedDims);
            int[] extDims = mPow2Frame.getDimensions();
            float targetWidth = croppedDims[0] / (float) extDims[0];
            float targetHeight = croppedDims[1] / (float) extDims[1];
            Quad targetQuad = Quad.fromRect(0f, 0f, targetWidth, targetHeight);
            mShader.setSourceQuad(mCropRect);
            mShader.setTargetQuad(targetQuad);
            mShader.process(inputImage, mPow2Frame);
            TransformUtils.generateMipMaps(mPow2Frame);
            sourceFrame = mPow2Frame;
            sourceQuad = targetQuad;
        } else {
            sourceFrame = inputImage;
            sourceQuad = mCropRect;
        }
        mShader.setSourceQuad(sourceQuad);
        mShader.setTargetRect(0f, 0f, 1f, 1f);
        mShader.process(sourceFrame, outputImage);
    } else {
        // Convert quads to canvas coordinate space
        Quad sourceQuad = mCropRect.scale2(inDims[0], inDims[1]);
        Quad targetQuad = Quad.fromRect(0f, 0f, inDims[0], inDims[1]);
        // Calculate transform for crop
        Matrix transform = Quad.getTransform(sourceQuad, targetQuad);
        transform.postScale(outDims[0] / (float) inDims[0], outDims[1] / (float) inDims[1]);
        // Create target canvas
        Bitmap.Config config = Bitmap.Config.ARGB_8888;
        Bitmap cropped = Bitmap.createBitmap(outDims[0], outDims[1], config);
        Canvas canvas = new Canvas(cropped);
        // Draw source bitmap into target canvas
        Paint paint = new Paint();
        paint.setFilterBitmap(true);
        Bitmap sourceBitmap = inputImage.toBitmap();
        canvas.drawBitmap(sourceBitmap, transform, paint);
        // Assign bitmap to output frame
        outputImage.setBitmap(cropped);
    }
    outPort.pushFrame(outputImage);
}
Also used : OutputPort(androidx.media.filterfw.OutputPort) Quad(androidx.media.filterfw.geometry.Quad) Bitmap(android.graphics.Bitmap) Matrix(android.graphics.Matrix) FrameImage2D(androidx.media.filterfw.FrameImage2D) Canvas(android.graphics.Canvas) Paint(android.graphics.Paint)

Aggregations

FrameImage2D (androidx.media.filterfw.FrameImage2D)8 OutputPort (androidx.media.filterfw.OutputPort)8 Quad (androidx.media.filterfw.geometry.Quad)8 Bitmap (android.graphics.Bitmap)4 Canvas (android.graphics.Canvas)4 Matrix (android.graphics.Matrix)4 Paint (android.graphics.Paint)4