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