| // 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 GraphOutputTarget extends Filter { |
| |
| private Frame mFrame = null; |
| private FrameType mType = FrameType.any(); |
| |
| public GraphOutputTarget(MffContext context, String name) { |
| super(context, name); |
| } |
| |
| // TODO: During initialization only? |
| public void setType(FrameType type) { |
| mType = type; |
| } |
| |
| public FrameType getType() { |
| return mType; |
| } |
| |
| @Override |
| public Signature getSignature() { |
| return new Signature() |
| .addInputPort("frame", Signature.PORT_REQUIRED, mType) |
| .disallowOtherInputs(); |
| } |
| |
| // Returns a retained frame! |
| public Frame pullFrame() { |
| Frame result = null; |
| if (mFrame != null) { |
| result = mFrame; |
| mFrame = null; |
| } |
| return result; |
| } |
| |
| @Override |
| protected void onProcess() { |
| Frame frame = getConnectedInputPort("frame").pullFrame(); |
| if (mFrame != null) { |
| mFrame.release(); |
| } |
| mFrame = frame.retain(); |
| } |
| |
| @Override |
| protected boolean canSchedule() { |
| return super.canSchedule() && mFrame == null; |
| } |
| |
| } |