]> git.sesse.net Git - nageru/blobdiff - ffmpeg_capture.cpp
Fix some compiler warnings.
[nageru] / ffmpeg_capture.cpp
index d2b1cb5200d1e15677151bf2f6bc88c74533c81c..b8010d08219b52e30479b299822550ac8a850519 100644 (file)
@@ -313,12 +313,20 @@ void FFmpegCapture::send_disconnected_frame()
                VideoFormat video_format;
                video_format.width = width;
                video_format.height = height;
-               video_format.stride = width * 4;
                video_format.frame_rate_nom = 60;
                video_format.frame_rate_den = 1;
                video_format.is_connected = false;
-
-               video_frame.len = width * height * 4;
+               if (pixel_format == bmusb::PixelFormat_8BitBGRA) {
+                       video_format.stride = width * 4;
+                       video_frame.len = width * height * 4;
+               } else {
+                       video_format.stride = width;
+                       current_frame_ycbcr_format.full_range = true;
+                       current_frame_ycbcr_format.num_levels = 256;
+                       current_frame_ycbcr_format.chroma_subsampling_x = 2;
+                       current_frame_ycbcr_format.chroma_subsampling_y = 2;
+                       video_frame.len = width * height * 2;
+               }
                memset(video_frame.data, 0, video_frame.len);
 
                frame_callback(-1, AVRational{1, TIMEBASE}, -1, AVRational{1, TIMEBASE}, timecode++,
@@ -381,8 +389,9 @@ bool FFmpegCapture::play_video(const string &pathname)
                video_codec_ctx.get(), avcodec_close);
 
        // Open audio decoder, if we have audio.
-       AVCodecContextWithDeleter audio_codec_ctx = avcodec_alloc_context3_unique(nullptr);
+       AVCodecContextWithDeleter audio_codec_ctx;
        if (audio_stream_index != -1) {
+               audio_codec_ctx = avcodec_alloc_context3_unique(nullptr);
                const AVCodecParameters *audio_codecpar = format_ctx->streams[audio_stream_index]->codecpar;
                audio_timebase = format_ctx->streams[audio_stream_index]->time_base;
                if (avcodec_parameters_to_context(audio_codec_ctx.get(), audio_codecpar) < 0) {
@@ -685,7 +694,7 @@ void FFmpegCapture::convert_audio(const AVFrame *audio_avframe, FrameAllocator::
 
        uint8_t *data = audio_frame->data + audio_frame->len;
        int out_samples = avresample_convert(resampler, &data, 0, num_samples_room,
-               audio_avframe->data, audio_avframe->linesize[0], audio_avframe->nb_samples);
+               const_cast<uint8_t **>(audio_avframe->data), audio_avframe->linesize[0], audio_avframe->nb_samples);
        if (out_samples < 0) {
                 fprintf(stderr, "Audio conversion failed.\n");
                 exit(1);