bytedeco/javacv

JVM crash when set FFmpegFrameGrabber's image mode to RAW

Open

#2,351 opened on Sep 6, 2025

View on GitHub
 (0 comments) (0 reactions) (0 assignees)Java (1,583 forks)batch import
help wantedquestion

Repository metrics

Stars
 (6,985 stars)
PR merge metrics
 (No merged PRs in 30d)

Description

I set FFmpegFrameGrabber image mode to raw to avoid recorder call sws_scale when input video's pixel format is yuv420. When i execute code below, the jvm crashed when calling avcodec_send_frame in recordImage function of class FFmpegFrameRecorder. Is there something wrong with my code or is it a limitation of javacv?

        FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(src);
        grabber.setImageMode(FrameGrabber.ImageMode.RAW);
        grabber.start();

        FFmpegFrameRecorder recorder = new FFmpegFrameRecorder(dst, grabber.getImageWidth(), grabber.getImageHeight()
            , grabber.getAudioChannels());

        recorder.setFormat("hls");
        recorder.setVideoCodec(avcodec.AV_CODEC_ID_H264);
        recorder.setFrameRate(grabber.getFrameRate());
        recorder.setPixelFormat(AV_PIX_FMT_YUV420P); 
        recorder.setAudioCodec(avcodec.AV_CODEC_ID_AAC);
        recorder.setSampleFormat(avutil.AV_SAMPLE_FMT_FLTP);
        recorder.setSampleRate(grabber.getSampleRate());

        recorder.setVideoOption("crf", "24");
        recorder.setVideoOption("preset", "veryfast"); 

        recorder.setOption("hls_list_size", "0");
        recorder.setOption("hls_time", "15");
        recorder.setOption("hls_playlist_type", "vod");

        recorder.start();

        try {
            Frame frame;

            while ((frame = grabber.grab()) != null) {
                if (frame.type == Frame.Type.VIDEO || frame.type == Frame.Type.AUDIO) {
                    recorder.record(frame);
                }
            }

            System.out.println(System.currentTimeMillis() - begin);
        } finally {
            grabber.close();

            recorder.close();
        }

hs_err_pid63236.log

Contributor guide