public void init() {
    try {
      this.demuxer = Demuxer.make();

      demuxer.open(inputFile.getAbsolutePath(), null, false, true, null, null);

      int numStreams = demuxer.getNumStreams();

      videoStreamId = -1;
      videoDecoder = null;
      for (int i = 0; i < numStreams; i++) {
        final DemuxerStream stream = demuxer.getStream(i);
        final Decoder decoder = stream.getDecoder();
        if (decoder != null && decoder.getCodecType() == MediaDescriptor.Type.MEDIA_VIDEO) {
          videoStreamId = i;
          videoDecoder = decoder;
          // stop at the first one.
          break;
        }
      }
      if (videoStreamId == -1) {
        throw new RuntimeException(
            "could not find video stream in video file: '" + inputFile + "'");
      }

      videoDecoder.open(null, null);

      int width = videoDecoder.getWidth();
      int height = videoDecoder.getHeight();
      this.dim = new Dim(width, height);
      picture = MediaPicture.make(width, height, videoDecoder.getPixelFormat());

      // converter to BGR_24 for java swing
      converter =
          MediaPictureConverterFactory.createConverter(
              MediaPictureConverterFactory.HUMBLE_BGR_24, picture);
      image3ByteBGR = null; // new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);

      imageRGB = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
      imageRGBDataInts = ((DataBufferInt) imageRGB.getRaster().getDataBuffer()).getData();

      packet = MediaPacket.make();
    } catch (Exception ex) {
      throw new RuntimeException("Failed init HumbleioPacketReader '" + inputFile + "'", ex);
    }
  }