JpegImagesToMovie.java-处理器如何使用read(Buffer buf)

时间:2018-11-09 16:17:07

标签: java jmf

我正在查看JMF代码源,它是用户Mavie在this thread上写的答案。当我尝试从功能doIt-> ImageDataSource-> ImageSourceStream跟踪代码时,我不太清楚程序如何从矢量读取图像文件列表。

据我所知,这部分代码read(Buffer buf)读取图像数据文件,但是处理器似乎并未从代码本身内部调用此函数。

我设法使代码完美运行,但不了解逻辑流程。处理器如何/在何处调用此函数以读取和生成视频?

读取(缓冲区buf)-整个源代码的一部分

/**
 * This is called from the Processor to read a frame worth of video
 * data.
 */
 public void read(Buffer buf) throws IOException {

        // Check if we've finished all the frames.
        if (nextImage >= images.size()) {
            // We are done. Set EndOfMedia.
            //System.err.println("Done reading all images.");
            buf.setEOM(true);
            buf.setOffset(0);
            buf.setLength(0);
            ended = true;
            return;
        }

        String imageFile = (String) images.elementAt(nextImage);
        nextImage++;

        //System.err.println("  - reading image file: " + imageFile);

        // Open a random access file for the next image.
        RandomAccessFile raFile;
        raFile = new RandomAccessFile(imageFile, "r");

        byte data[] = null;

        // Check the input buffer type & size.

        if (buf.getData() instanceof byte[])
            data = (byte[]) buf.getData();

        // Check to see the given buffer is big enough for the frame.
        if (data == null || data.length < raFile.length()) {
            data = new byte[(int) raFile.length()];
            buf.setData(data);
        }

        // Read the entire JPEG image from the file.
        raFile.readFully(data, 0, (int) raFile.length());

        //System.err.println("    read " + raFile.length() + " bytes.");

        buf.setOffset(0);
        buf.setLength((int) raFile.length());
        buf.setFormat(format);
        buf.setFlags(buf.getFlags() | buf.FLAG_KEY_FRAME);

        // Close the random access file.
        raFile.close();
    }

0 个答案:

没有答案