Home | History | Annotate | Download | only in filterfw
      1 // Copyright 2012 Google Inc. All Rights Reserved.
      2 
      3 package androidx.media.filterpacks.base;
      4 
      5 import androidx.media.filterfw.Filter;
      6 import androidx.media.filterfw.Frame;
      7 import androidx.media.filterfw.FrameType;
      8 import androidx.media.filterfw.MffContext;
      9 import androidx.media.filterfw.Signature;
     10 
     11 public class GraphInputSource extends Filter {
     12 
     13     private Frame mFrame = null;
     14 
     15     public GraphInputSource(MffContext context, String name) {
     16         super(context, name);
     17     }
     18 
     19     @Override
     20     public Signature getSignature() {
     21         return new Signature()
     22             .addOutputPort("frame", Signature.PORT_REQUIRED, FrameType.any())
     23             .disallowOtherInputs();
     24     }
     25 
     26     public void pushFrame(Frame frame) {
     27         if (mFrame != null) {
     28             mFrame.release();
     29         }
     30         if (frame == null) {
     31             throw new RuntimeException("Attempting to assign null-frame!");
     32         }
     33         mFrame = frame.retain();
     34     }
     35 
     36     @Override
     37     protected void onProcess() {
     38         if (mFrame != null) {
     39             getConnectedOutputPort("frame").pushFrame(mFrame);
     40             mFrame.release();
     41             mFrame = null;
     42         }
     43     }
     44 
     45     @Override
     46     protected void onTearDown() {
     47         if (mFrame != null) {
     48             mFrame.release();
     49             mFrame = null;
     50         }
     51     }
     52 
     53     @Override
     54     protected boolean canSchedule() {
     55         return super.canSchedule() && mFrame != null;
     56     }
     57 
     58 }
     59