Class Frame

java.lang.Object
io.antmedia.recorder.Frame
All Implemented Interfaces:
AutoCloseable, org.bytedeco.javacpp.indexer.Indexable

public class Frame extends Object implements AutoCloseable, org.bytedeco.javacpp.indexer.Indexable
A class to manage the data of audio and video frames. It it used by CanvasFrame, FrameGrabber, FrameRecorder, and their subclasses. We can also make the link with other APIs, such as Android, Java 2D, FFmpeg, and OpenCV, via a FrameConverter.
Author:
Samuel Audet
  • Field Details

    • keyFrame

      public boolean keyFrame
      A flag set by a FrameGrabber or a FrameRecorder to indicate a key frame.
    • pictType

      public char pictType
      The type of the image frame ('I', 'P', 'B', etc).
    • DEPTH_BYTE

      public static final int DEPTH_BYTE
      Constants to be used for imageDepth.
      See Also:
    • DEPTH_UBYTE

      public static final int DEPTH_UBYTE
      Constants to be used for imageDepth.
      See Also:
    • DEPTH_SHORT

      public static final int DEPTH_SHORT
      Constants to be used for imageDepth.
      See Also:
    • DEPTH_USHORT

      public static final int DEPTH_USHORT
      Constants to be used for imageDepth.
      See Also:
    • DEPTH_INT

      public static final int DEPTH_INT
      Constants to be used for imageDepth.
      See Also:
    • DEPTH_LONG

      public static final int DEPTH_LONG
      Constants to be used for imageDepth.
      See Also:
    • DEPTH_FLOAT

      public static final int DEPTH_FLOAT
      Constants to be used for imageDepth.
      See Also:
    • DEPTH_DOUBLE

      public static final int DEPTH_DOUBLE
      Constants to be used for imageDepth.
      See Also:
    • imageWidth

      protected int imageWidth
      Information associated with the image field.
    • imageHeight

      protected int imageHeight
    • imageDepth

      protected int imageDepth
    • imageChannels

      protected int imageChannels
    • imageStride

      protected int imageStride
    • image

      public Buffer[] image
      Buffers to hold image pixels from multiple channels for a video frame. Most of the software supports packed data only, but an array is provided to allow users to store images in a planar format as well.
    • sampleRate

      private int sampleRate
      Information associated with the samples field.
    • audioChannels

      public int audioChannels
    • samples

      private Buffer[] samples
      Buffers to hold audio samples from multiple channels for an audio frame.
    • data

      private ByteBuffer data
      Buffer to hold a data stream associated with a frame.
    • streamIndex

      public int streamIndex
      Stream number the audio|video|other data is associated with.
    • type

      public Frame.Type type
      The type of the stream.
    • opaque

      private Object opaque
      The underlying data object, for example, Pointer, AVFrame, IplImage, or Mat.
    • timestamp

      public long timestamp
      Timestamp of the frame creation in microseconds.
  • Constructor Details

    • Frame

      public Frame()
      Empty constructor.
    • Frame

      public Frame(int width, int height, int depth, int channels)
      Allocates a new packed image frame in native memory where rows are 8-byte aligned.
    • Frame

      public Frame(int width, int height, int depth, int channels, int imageStride)
  • Method Details

    • pixelSize

      public static int pixelSize(int depth)
      Returns Math.abs(depth) / 8.
    • createIndexer

      public <I extends org.bytedeco.javacpp.indexer.Indexer> I createIndexer()
      Returns createIndexer(true, 0).
    • createIndexer

      public <I extends org.bytedeco.javacpp.indexer.Indexer> I createIndexer(boolean direct)
      Specified by:
      createIndexer in interface org.bytedeco.javacpp.indexer.Indexable
    • createIndexer

      public <I extends org.bytedeco.javacpp.indexer.Indexer> I createIndexer(boolean direct, int i)
      Returns an Indexer for the ith image plane.
    • clone

      public Frame clone()
      Care must be taken if this method is to be used in conjunction with movie recordings. Cloning a frame containing a full HD picture (alpha channel included) would take 1920 x 1080 * 4 = 8.294.400 Bytes. Expect a heap overflow exception when using this method without cleaning up.
      Overrides:
      clone in class Object
      Returns:
      A deep copy of this frame.
    • cloneBufferArray

      private static org.bytedeco.javacpp.Pointer cloneBufferArray(Buffer[] srcBuffers, Buffer[] clonedBuffers)
      This private method takes a buffer array as input and returns a deep copy. It is assumed that all buffers in the input array are of the same subclass.
      Parameters:
      srcBuffers - - Buffer array to be cloned
      clonedBuffers - - Buffer array to fill with clones
      Returns:
      Opaque object to store
    • getTypes

      public EnumSet<Frame.Type> getTypes()
      Returns types of data containing in the frame
    • close

      public void close()
      Specified by:
      close in interface AutoCloseable
    • getImageWidth

      public int getImageWidth()
    • getImageHeight

      public int getImageHeight()
    • getImageDepth

      public int getImageDepth()
    • getImageChannels

      public int getImageChannels()
    • getImageStride

      public int getImageStride()
    • getOpaque

      public Object getOpaque()
    • getSamples

      public Buffer[] getSamples()
    • setSamples

      public void setSamples(Buffer[] samples)
    • getSampleRate

      public int getSampleRate()
    • setSampleRate

      public void setSampleRate(int sampleRate)
    • getData

      public ByteBuffer getData()
    • setData

      public void setData(ByteBuffer data)