bytedeco/javacv

JVM crash when set FFmpegFrameGrabber's image mode to RAW

Open

#2351 opened on Sep 6, 2025

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

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