1227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks// Copyright 2012 Google Inc. All Rights Reserved. 2227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 3227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendrickspackage androidx.media.filterpacks.base; 4227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 5227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport androidx.media.filterfw.Filter; 6227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport androidx.media.filterfw.Frame; 7227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport androidx.media.filterfw.FrameType; 8227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport androidx.media.filterfw.MffContext; 9227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricksimport androidx.media.filterfw.Signature; 10227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 11227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendrickspublic class GraphOutputTarget extends Filter { 12227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 13227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private Frame mFrame = null; 14227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private FrameType mType = FrameType.any(); 15227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 16227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks public GraphOutputTarget(MffContext context, String name) { 17227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks super(context, name); 18227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 19227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 20227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks // TODO: During initialization only? 21227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks public void setType(FrameType type) { 22227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mType = type; 23227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 24227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 25227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks public FrameType getType() { 26227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks return mType; 27227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 28227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 29227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks @Override 30227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks public Signature getSignature() { 31227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks return new Signature() 32227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks .addInputPort("frame", Signature.PORT_REQUIRED, mType) 33227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks .disallowOtherInputs(); 34227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 35227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 36227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks // Returns a retained frame! 37227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks public Frame pullFrame() { 38227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks Frame result = null; 39227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks if (mFrame != null) { 40227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks result = mFrame; 41227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mFrame = null; 42227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 43227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks return result; 44227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 45227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 46227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks @Override 47227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks protected void onProcess() { 48227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks Frame frame = getConnectedInputPort("frame").pullFrame(); 49227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks if (mFrame != null) { 50227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mFrame.release(); 51227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 52227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mFrame = frame.retain(); 53227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 54227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 55227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks @Override 56227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks protected boolean canSchedule() { 57227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks return super.canSchedule() && mFrame == null; 58227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 59227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 60227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks} 61