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 GraphInputSource extends Filter { 12227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 13227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks private Frame mFrame = null; 14227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 15227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks public GraphInputSource(MffContext context, String name) { 16227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks super(context, name); 17227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 18227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 19227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks @Override 20227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks public Signature getSignature() { 21227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks return new Signature() 22227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks .addOutputPort("frame", Signature.PORT_REQUIRED, FrameType.any()) 23227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks .disallowOtherInputs(); 24227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 25227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 26227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks public void pushFrame(Frame frame) { 27227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks if (mFrame != null) { 28227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mFrame.release(); 29227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 30227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks if (frame == null) { 31227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks throw new RuntimeException("Attempting to assign null-frame!"); 32227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 33227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mFrame = frame.retain(); 34227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 35227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 36227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks @Override 37227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks protected void onProcess() { 38227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks if (mFrame != null) { 39227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks getConnectedOutputPort("frame").pushFrame(mFrame); 40227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mFrame.release(); 41227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mFrame = null; 42227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 43227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 44227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 45227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks @Override 46227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks protected void onTearDown() { 47227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks if (mFrame != null) { 48227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mFrame.release(); 49227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks mFrame = null; 50227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 51227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 52227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 53227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks @Override 54227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks protected boolean canSchedule() { 55227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks return super.canSchedule() && mFrame != null; 56227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks } 57227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks 58227b47625d7482b5b47ad0e4c70ce0a246236adeBenjamin Hendricks} 59