Search in sources :

Example 26 with Frame

use of android.filterfw.core.Frame in project android_frameworks_base by ParanoidAndroid.

the class ResizeFilter method process.

@Override
public void process(FilterContext env) {
    // Get input frame
    Frame input = pullInput("image");
    createProgram(env, input.getFormat());
    // Create output frame
    MutableFrameFormat outputFormat = input.getFormat().mutableCopy();
    if (mKeepAspectRatio) {
        FrameFormat inputFormat = input.getFormat();
        mOHeight = mOWidth * inputFormat.getHeight() / inputFormat.getWidth();
    }
    outputFormat.setDimensions(mOWidth, mOHeight);
    Frame output = env.getFrameManager().newFrame(outputFormat);
    // Process
    if (mGenerateMipMap) {
        GLFrame mipmapped = (GLFrame) env.getFrameManager().newFrame(input.getFormat());
        mipmapped.setTextureParameter(GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR_MIPMAP_NEAREST);
        mipmapped.setDataFromFrame(input);
        mipmapped.generateMipMap();
        mProgram.process(mipmapped, output);
        mipmapped.release();
    } else {
        mProgram.process(input, output);
    }
    // Push output
    pushOutput("image", output);
    // Release pushed frame
    output.release();
}
Also used : MutableFrameFormat(android.filterfw.core.MutableFrameFormat) FrameFormat(android.filterfw.core.FrameFormat) Frame(android.filterfw.core.Frame) GLFrame(android.filterfw.core.GLFrame) NativeFrame(android.filterfw.core.NativeFrame) GLFrame(android.filterfw.core.GLFrame) MutableFrameFormat(android.filterfw.core.MutableFrameFormat)

Example 27 with Frame

use of android.filterfw.core.Frame in project android_frameworks_base by ParanoidAndroid.

the class SaturateFilter method process.

@Override
public void process(FilterContext context) {
    // Get input frame
    Frame input = pullInput("image");
    FrameFormat inputFormat = input.getFormat();
    // Create program if not created already
    if (mBenProgram == null || inputFormat.getTarget() != mTarget) {
        initProgram(context, inputFormat.getTarget());
        initParameters();
    }
    // Create output frame
    Frame output = context.getFrameManager().newFrame(inputFormat);
    // Process
    if (mScale > 0.0f) {
        mHerfProgram.process(input, output);
    } else {
        mBenProgram.process(input, output);
    }
    // Push output
    pushOutput("image", output);
    // Release pushed frame
    output.release();
}
Also used : FrameFormat(android.filterfw.core.FrameFormat) Frame(android.filterfw.core.Frame) NativeFrame(android.filterfw.core.NativeFrame)

Example 28 with Frame

use of android.filterfw.core.Frame in project android_frameworks_base by ParanoidAndroid.

the class ImageEncoder method process.

@Override
public void process(FilterContext env) {
    Frame input = pullInput("image");
    Bitmap bitmap = input.getBitmap();
    bitmap.compress(CompressFormat.JPEG, mQuality, mOutputStream);
}
Also used : Frame(android.filterfw.core.Frame) Bitmap(android.graphics.Bitmap)

Example 29 with Frame

use of android.filterfw.core.Frame in project android_frameworks_base by ParanoidAndroid.

the class ImageSlicer method process.

@Override
public void process(FilterContext context) {
    // Get input frame
    if (mSliceIndex == 0) {
        mOriginalFrame = pullInput("image");
        calcOutputFormatForInput(mOriginalFrame);
    }
    FrameFormat inputFormat = mOriginalFrame.getFormat();
    MutableFrameFormat outputFormat = inputFormat.mutableCopy();
    outputFormat.setDimensions(mOutputWidth, mOutputHeight);
    // Create output frame
    Frame output = context.getFrameManager().newFrame(outputFormat);
    // Create the program if not created already
    if (mProgram == null) {
        mProgram = ShaderProgram.createIdentity(context);
    }
    // Calculate the four corner of the source region
    int xSliceIndex = mSliceIndex % mXSlices;
    int ySliceIndex = mSliceIndex / mXSlices;
    // TODO(rslin) : not sure shifting by 0.5 is needed.
    float x0 = (xSliceIndex * mSliceWidth - mPadSize) / ((float) mInputWidth);
    float y0 = (ySliceIndex * mSliceHeight - mPadSize) / ((float) mInputHeight);
    ((ShaderProgram) mProgram).setSourceRect(x0, y0, ((float) mOutputWidth) / mInputWidth, ((float) mOutputHeight) / mInputHeight);
    // Process
    mProgram.process(mOriginalFrame, output);
    mSliceIndex++;
    if (mSliceIndex == mXSlices * mYSlices) {
        mSliceIndex = 0;
        mOriginalFrame.release();
        setWaitsOnInputPort("image", true);
    } else {
        // Retain the original frame so it can be used next time.
        mOriginalFrame.retain();
        setWaitsOnInputPort("image", false);
    }
    // Push output
    pushOutput("image", output);
    // Release pushed frame
    output.release();
}
Also used : FrameFormat(android.filterfw.core.FrameFormat) MutableFrameFormat(android.filterfw.core.MutableFrameFormat) Frame(android.filterfw.core.Frame) ShaderProgram(android.filterfw.core.ShaderProgram) MutableFrameFormat(android.filterfw.core.MutableFrameFormat)

Example 30 with Frame

use of android.filterfw.core.Frame in project android_frameworks_base by ParanoidAndroid.

the class ImageStitcher method process.

@Override
public void process(FilterContext context) {
    // Get input frame
    Frame input = pullInput("image");
    FrameFormat format = input.getFormat();
    // Create output frame
    if (mSliceIndex == 0) {
        mOutputFrame = context.getFrameManager().newFrame(calcOutputFormatForInput(format));
    } else {
        if ((format.getWidth() != mInputWidth) || (format.getHeight() != mInputHeight)) {
            // CHECK input format here
            throw new RuntimeException("Image size should not change.");
        }
    }
    // Create the program if not created already
    if (mProgram == null) {
        mProgram = ShaderProgram.createIdentity(context);
    }
    // TODO(rslin) : not sure shifting by 0.5 is needed.
    float x0 = ((float) mPadSize) / mInputWidth;
    float y0 = ((float) mPadSize) / mInputHeight;
    int outputOffsetX = (mSliceIndex % mXSlices) * mSliceWidth;
    int outputOffsetY = (mSliceIndex / mXSlices) * mSliceHeight;
    float outputWidth = (float) Math.min(mSliceWidth, mImageWidth - outputOffsetX);
    float outputHeight = (float) Math.min(mSliceHeight, mImageHeight - outputOffsetY);
    // We need to set the source rect as well because the input are padded images.
    ((ShaderProgram) mProgram).setSourceRect(x0, y0, outputWidth / mInputWidth, outputHeight / mInputHeight);
    ((ShaderProgram) mProgram).setTargetRect(((float) outputOffsetX) / mImageWidth, ((float) outputOffsetY) / mImageHeight, outputWidth / mImageWidth, outputHeight / mImageHeight);
    // Process this tile
    mProgram.process(input, mOutputFrame);
    mSliceIndex++;
    // Push output
    if (mSliceIndex == mXSlices * mYSlices) {
        pushOutput("image", mOutputFrame);
        mOutputFrame.release();
        mSliceIndex = 0;
    }
}
Also used : FrameFormat(android.filterfw.core.FrameFormat) MutableFrameFormat(android.filterfw.core.MutableFrameFormat) Frame(android.filterfw.core.Frame) ShaderProgram(android.filterfw.core.ShaderProgram)

Aggregations

Frame (android.filterfw.core.Frame)414 FrameFormat (android.filterfw.core.FrameFormat)198 GLFrame (android.filterfw.core.GLFrame)73 MutableFrameFormat (android.filterfw.core.MutableFrameFormat)47 NativeFrame (android.filterfw.core.NativeFrame)38 Quad (android.filterfw.geometry.Quad)24 GLEnvironment (android.filterfw.core.GLEnvironment)18 ShaderProgram (android.filterfw.core.ShaderProgram)18 ByteBuffer (java.nio.ByteBuffer)18 Point (android.filterfw.geometry.Point)12 IOException (java.io.IOException)12 FrameManager (android.filterfw.core.FrameManager)6 Bitmap (android.graphics.Bitmap)6 ByteArrayOutputStream (java.io.ByteArrayOutputStream)6 Map (java.util.Map)6 SortedMap (java.util.SortedMap)6 TreeMap (java.util.TreeMap)6 CachedFrameManager (android.filterfw.core.CachedFrameManager)1