// Copyright 2012 Google Inc. All Rights Reserved. package androidx.media.filterpacks.base; import androidx.media.filterfw.Filter; import androidx.media.filterfw.Frame; import androidx.media.filterfw.FrameType; import androidx.media.filterfw.MffContext; import androidx.media.filterfw.Signature; public class GraphInputSource extends Filter { private Frame mFrame = null; public GraphInputSource(MffContext context, String name) { super(context, name); } @Override public Signature getSignature() { return new Signature() .addOutputPort("frame", Signature.PORT_REQUIRED, FrameType.any()) .disallowOtherInputs(); } public void pushFrame(Frame frame) { if (mFrame != null) { mFrame.release(); } if (frame == null) { throw new RuntimeException("Attempting to assign null-frame!"); } mFrame = frame.retain(); } @Override protected void onProcess() { if (mFrame != null) { getConnectedOutputPort("frame").pushFrame(mFrame); mFrame.release(); mFrame = null; } } @Override protected void onTearDown() { if (mFrame != null) { mFrame.release(); mFrame = null; } } @Override protected boolean canSchedule() { return super.canSchedule() && mFrame != null; } }