Package com.xuggle.xuggler

Examples of com.xuggle.xuggler.IStreamCoder


  private IStreamCoder getStreamCoder(int streamIndex)
  {
    // if the coder does not exists, get it

    IStreamCoder coder = mCoders.get(streamIndex);
    if (coder == null)
    {
      // test valid stream index

      int numStreams = getContainer().getNumStreams();
      if (streamIndex < 0 || streamIndex >= numStreams)
        throw new RuntimeException("invalid stream index");
   
      // estabish all streams in the container, informing listeners of
      // new streams without needing to wait for a packet for each
      // stream to show up

      for(int i = 0; i < numStreams; i++)
      {
        coder = mCoders.get(i);
        if (coder == null)
        {
          // now get the coder for the given stream index
         
          IStream stream = getContainer().getStream(i);
          try
          {
            coder = stream.getStreamCoder();

            // put the coder into the coder map, event if it not a supported
            // type so that on further reads it will find the coder but choose
            // not decode unsupported types

            mCoders.put(i, coder);
            // and release our coder to the list
            coder = null;
            super.onAddStream(new AddStreamEvent(this, i));
          }
          finally
          {
            if (coder != null) coder.delete();
            if (stream != null)
              stream.delete();
          }
        }
      }
    }
    coder = mCoders.get(streamIndex);
    IStream stream = getContainer().getStream(streamIndex);
    try
    {
      ICodec.Type type = coder.getCodecType();

      // if the coder is not open, open it
      // NOTE: MediaReader currently supports audio & video streams

      if (!coder.isOpen()
          && (type == ICodec.Type.CODEC_TYPE_AUDIO || type == ICodec.Type.CODEC_TYPE_VIDEO))
      {
        if (coder.open(null, null) < 0)
          throw new RuntimeException("could not open coder for stream: "
              + streamIndex);
        mOpenedStreams.add(stream);
        super.onOpenCoder(new OpenCoderEvent(this, stream.getIndex()));
        stream = null;
View Full Code Here


      super.onReadPacket(new ReadPacketEvent(this,packet));

      // get the coder for this packet

      IStreamCoder coder = getStreamCoder(packet.getStreamIndex());
      // decode based on type

      switch (coder.getCodecType())
      {
        // decode audio

        case CODEC_TYPE_AUDIO:
          decodeAudio(coder, packet);
View Full Code Here

    // close the coders opened by this

    for (IStream stream: mOpenedStreams)
    {
      IStreamCoder coder = stream.getStreamCoder();
      try {
        if ((rv = coder.close()) < 0)
        {
          String errorString = getErrorMessage(rv);
          throw new RuntimeException("error " + errorString
              + ", failed close coder " + coder);
        }
        // inform listeners that the stream was closed
        super.onCloseCoder(new CloseCoderEvent(this, stream.getIndex()));
      } finally {
        coder.delete();
        stream.delete();
      }
    }
    // expunge all referneces to the coders and resamplers
    for(IStreamCoder coder : mCoders.values())
      coder.delete();
    mCoders.clear();
    mOpenedStreams.clear();

    // if we're supposed to, close the container
View Full Code Here

    // get the coder, and stream index

    IContainer container = event.getSource().getContainer();
    IStream stream = container.getStream(event.getStreamIndex());
    IStreamCoder coder = stream.getStreamCoder();
    int streamIndex = event.getStreamIndex();

    // if video stream and showing video, configure video stream

    if (coder.getCodecType() == ICodec.Type.CODEC_TYPE_VIDEO &&
      getMode().showVideo())
    {
      // create a converter for this video stream

      IConverter converter = mConverters.get(streamIndex);
      if (null == converter)
      {
        converter = ConverterFactory.createConverter(
            ConverterFactory.XUGGLER_BGR_24, coder.getPixelType(), coder
                .getWidth(), coder.getHeight());
        mConverters.put(streamIndex, converter);
      }

      // get a frame for this stream

      MediaFrame frame = mFrames.get(streamIndex);
      if (null == frame)
      {
        frame = new MediaFrame(mDefaultCloseOperation, stream, this);
        mFrames.put(streamIndex, frame);
        mFrameIndex.put(frame, mNextFrameIndex++);
      }

      // if real time establish video queue

      if (getMode().isRealTime())
        getVideoQueue(streamIndex, frame);
    }

    // if audio stream and playing audio, configure audio stream

    else if (coder.getCodecType() == ICodec.Type.CODEC_TYPE_AUDIO &&
      getMode().playAudio() &&
      getMode().isRealTime())

    {
      // if real time establish audio queue
View Full Code Here

   * @return the line
   */

  private SourceDataLine getJavaSoundLine(IStream stream)
  {
    IStreamCoder audioCoder = stream.getStreamCoder();
    int streamIndex = stream.getIndex();
    SourceDataLine line = mAudioLines.get(streamIndex);
    if (line == null)
    {
      try
      {
        // estabish the audio format, NOTE: xuggler defaults to signed 16 bit
        // samples

        AudioFormat audioFormat = new AudioFormat(audioCoder.getSampleRate(),
          (int) IAudioSamples
          .findSampleBitDepth(audioCoder.getSampleFormat()), audioCoder
          .getChannels(), true, false);
       
        // create the audio line out
       
        DataLine.Info info = new DataLine.Info(SourceDataLine.class,
View Full Code Here

  public void testGetCodecTag()
  {
    IContainer container = IContainer.make();
    assertTrue("should be able to open",
        container.open("fixtures/subtitled_video.mkv", IContainer.Type.READ, null) >= 0);
    IStreamCoder coder = container.getStream(0).getStreamCoder();
   
    assertEquals("should be 0 by default", 0, coder.getCodecTag());
    coder.setCodecTag(0xDEADBEEF);
    assertEquals("should be set now", 0xDEADBEEF, coder.getCodecTag());
  }
View Full Code Here

  public void testGetCodecTagArray()
  {
    IContainer container = IContainer.make();
    assertTrue("should be able to open",
        container.open("fixtures/subtitled_video.mkv", IContainer.Type.READ, null) >= 0);
    IStreamCoder coder = container.getStream(0).getStreamCoder();
  
    char[] tag = coder.getCodecTagArray();
    assertNotNull("should exist", tag);
    assertEquals("should always be 4", 4, tag.length);
    for(int i = 0; i < tag.length; i++)
      assertEquals("should be 0 by default", (char)0, tag[i]);
    coder.setCodecTag(0xDEADBEEF);
    assertEquals("should be set now", 0xDEADBEEF, coder.getCodecTag());
    tag = coder.getCodecTagArray();
    assertNotNull("should exist", tag);
    assertEquals("should always be 4", 4, tag.length);
    assertEquals("test value", 0xDE, tag[3]);
    assertEquals("test value", 0xAD, tag[2]);
    assertEquals("test value", 0xBE, tag[1]);
View Full Code Here

  public void testSetCodecTagArray()
  {
    IContainer container = IContainer.make();
    assertTrue("should be able to open",
        container.open("fixtures/subtitled_video.mkv", IContainer.Type.READ, null) >= 0);
    IStreamCoder coder = container.getStream(0).getStreamCoder();
  
    char[] tag = new char[4];
    tag[3] = 0xDE;
    tag[2] = 0xAD;
    tag[1] = 0xBE;
    tag[0] = 0xEF;
    coder.setCodecTag(tag);
    assertEquals("should be set now", 0xDEADBEEF, coder.getCodecTag());
  }
View Full Code Here

  }

  @Test
  public void testGetDefaultAudioFrameSize()
  {
    IStreamCoder coder = getStreamCoder(sampleFile, 0);
    assertNotNull(coder);
   
    assertEquals(coder.getDefaultAudioFrameSize(), 576);
    coder.setDefaultAudioFrameSize(3);
    assertEquals(coder.getDefaultAudioFrameSize(), 3);
    // sample file has nellymoser audio, which has a non default frame size
    assertTrue(coder.getAudioFrameSize() != coder.getDefaultAudioFrameSize());
   
    coder = IStreamCoder.make(IStreamCoder.Direction.ENCODING, ICodec.ID.CODEC_ID_PCM_S16LE);
    assertNotNull(coder.getCodec());
    log.debug("Coder: {}", coder.getCodec());
    coder.setSampleRate(22050);
    coder.setChannels(1);
    assertTrue("could not open coder", coder.open(null, null) >= 0);
    assertEquals(coder.getAudioFrameSize(), coder.getDefaultAudioFrameSize());
    coder.setDefaultAudioFrameSize(3);
    assertEquals(coder.getAudioFrameSize(), coder.getDefaultAudioFrameSize());
   
  }
View Full Code Here

   
  }
 
  private IStreamCoder getStreamCoder(String url, int index)
  {
    IStreamCoder retval = null;
    int errorVal = 0;
    mContainer = IContainer.make();
    assertTrue(mContainer != null);
   
    errorVal = mContainer.open(url, IContainer.Type.READ, null);
View Full Code Here

TOP

Related Classes of com.xuggle.xuggler.IStreamCoder

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.