FileDocCategorySizeDatePackage
FilterSurfaceView.javaAPI DocAndroid 5.1 API4849Thu Mar 12 22:22:30 GMT 2015android.filterfw.core

FilterSurfaceView

public class FilterSurfaceView extends android.view.SurfaceView implements SurfaceHolder.Callback
hide

Fields Summary
private static int
STATE_ALLOCATED
private static int
STATE_CREATED
private static int
STATE_INITIALIZED
private int
mState
private SurfaceHolder.Callback
mListener
private GLEnvironment
mGLEnv
private int
mFormat
private int
mWidth
private int
mHeight
private int
mSurfaceId
Constructors Summary
public FilterSurfaceView(android.content.Context context)


       
        super(context);
        getHolder().addCallback(this);
    
public FilterSurfaceView(android.content.Context context, android.util.AttributeSet attrs)

        super(context, attrs);
        getHolder().addCallback(this);
    
Methods Summary
public synchronized voidbindToListener(SurfaceHolder.Callback listener, GLEnvironment glEnv)

        // Make sure we are not bound already
        if (listener == null) {
            throw new NullPointerException("Attempting to bind null filter to SurfaceView!");
        } else if (mListener != null && mListener != listener) {
            throw new RuntimeException(
                "Attempting to bind filter " + listener + " to SurfaceView with another open "
                + "filter " + mListener + " attached already!");
        }

        // Set listener
        mListener = listener;

        // Set GLEnv
        if (mGLEnv != null && mGLEnv != glEnv) {
            mGLEnv.unregisterSurfaceId(mSurfaceId);
        }
        mGLEnv = glEnv;

        // Check if surface has been created already
        if (mState >= STATE_CREATED) {
            // Register with env (double registration will be ignored by GLEnv, so we can simply
            // try to do it here).
            registerSurface();

            // Forward surface created to listener
            mListener.surfaceCreated(getHolder());

            // Forward surface changed to listener
            if (mState == STATE_INITIALIZED) {
                mListener.surfaceChanged(getHolder(), mFormat, mWidth, mHeight);
            }
        }
    
public synchronized GLEnvironmentgetGLEnv()

        return mGLEnv;
    
public synchronized intgetSurfaceId()

        return mSurfaceId;
    
private voidregisterSurface()

        mSurfaceId = mGLEnv.registerSurface(getHolder().getSurface());
        if (mSurfaceId < 0) {
            throw new RuntimeException("Could not register Surface: " + getHolder().getSurface() +
                                       " in FilterSurfaceView!");
        }
    
public synchronized voidsurfaceChanged(android.view.SurfaceHolder holder, int format, int width, int height)

        // Remember these values
        mFormat = format;
        mWidth = width;
        mHeight = height;
        mState = STATE_INITIALIZED;

        // Forward to renderer
        if (mListener != null) {
            mListener.surfaceChanged(holder, format, width, height);
        }
    
public synchronized voidsurfaceCreated(android.view.SurfaceHolder holder)

        mState = STATE_CREATED;

        // Register with GLEnvironment if we have it already
        if (mGLEnv != null) {
            registerSurface();
        }

        // Forward callback to listener
        if (mListener != null) {
            mListener.surfaceCreated(holder);
        }
    
public synchronized voidsurfaceDestroyed(android.view.SurfaceHolder holder)

        mState = STATE_ALLOCATED;

        // Forward to renderer
        if (mListener != null) {
            mListener.surfaceDestroyed(holder);
        }

        // Get rid of internal objects associated with this surface
        unregisterSurface();
    
public synchronized voidunbind()

        mListener = null;
    
private voidunregisterSurface()

        if (mGLEnv != null && mSurfaceId > 0) {
            mGLEnv.unregisterSurfaceId(mSurfaceId);
        }