[Bf-blender-cvs] [41c692ee2f0] master: Fix deprecation warnings in FFmpeg related code

Sergey Sharybin noreply at git.blender.org
Thu Nov 3 15:24:03 CET 2022


Commit: 41c692ee2f0f5a92d6162e65652e6f8d399df1a9
Author: Sergey Sharybin
Date:   Wed Nov 2 16:12:48 2022 +0100
Branches: master
https://developer.blender.org/rB41c692ee2f0f5a92d6162e65652e6f8d399df1a9

Fix deprecation warnings in FFmpeg related code

The non-deprecated API dates back to 2017, so it should be safe
to simply migrate to it.

Fixes verbose error prints, making it easier to see actual issues.

Differential Revision: https://developer.blender.org/D16370

===================================================================

M	intern/ffmpeg/tests/ffmpeg_codecs.cc
M	source/blender/blenkernel/intern/writeffmpeg.c

===================================================================

diff --git a/intern/ffmpeg/tests/ffmpeg_codecs.cc b/intern/ffmpeg/tests/ffmpeg_codecs.cc
index e5c33202417..10cbe4b938b 100644
--- a/intern/ffmpeg/tests/ffmpeg_codecs.cc
+++ b/intern/ffmpeg/tests/ffmpeg_codecs.cc
@@ -40,7 +40,7 @@ bool test_acodec(const AVCodec *codec, AVSampleFormat fmt)
     if (ctx) {
       ctx->sample_fmt = fmt;
       ctx->sample_rate = 48000;
-      ctx->channel_layout = AV_CH_LAYOUT_MONO;
+      av_channel_layout_from_mask(&ctx->ch_layout, AV_CH_LAYOUT_MONO);
       ctx->bit_rate = 128000;
       int open = avcodec_open2(ctx, codec, NULL);
       if (open >= 0) {
diff --git a/source/blender/blenkernel/intern/writeffmpeg.c b/source/blender/blenkernel/intern/writeffmpeg.c
index ee827cd8cd4..d71db8f71a5 100644
--- a/source/blender/blenkernel/intern/writeffmpeg.c
+++ b/source/blender/blenkernel/intern/writeffmpeg.c
@@ -141,19 +141,18 @@ static int write_audio_frame(FFMpegContext *context)
   frame->pts = context->audio_time / av_q2d(c->time_base);
   frame->nb_samples = context->audio_input_samples;
   frame->format = c->sample_fmt;
-  frame->channels = c->channels;
-  frame->channel_layout = c->channel_layout;
+  av_channel_layout_copy(&frame->ch_layout, &c->ch_layout);
 
   if (context->audio_deinterleave) {
     int channel, i;
     uint8_t *temp;
 
-    for (channel = 0; channel < c->channels; channel++) {
+    for (channel = 0; channel < c->ch_layout.nb_channels; channel++) {
       for (i = 0; i < frame->nb_samples; i++) {
         memcpy(context->audio_deinterleave_buffer +
                    (i + channel * frame->nb_samples) * context->audio_sample_size,
                context->audio_input_buffer +
-                   (c->channels * i + channel) * context->audio_sample_size,
+                   (c->ch_layout.nb_channels * i + channel) * context->audio_sample_size,
                context->audio_sample_size);
       }
     }
@@ -164,10 +163,11 @@ static int write_audio_frame(FFMpegContext *context)
   }
 
   avcodec_fill_audio_frame(frame,
-                           c->channels,
+                           c->ch_layout.nb_channels,
                            c->sample_fmt,
                            context->audio_input_buffer,
-                           context->audio_input_samples * c->channels * context->audio_sample_size,
+                           context->audio_input_samples * c->ch_layout.nb_channels *
+                               context->audio_sample_size,
                            1);
 
   int success = 1;
@@ -944,23 +944,23 @@ static AVStream *alloc_audio_stream(FFMpegContext *context,
   c->sample_rate = rd->ffcodecdata.audio_mixrate;
   c->bit_rate = context->ffmpeg_audio_bitrate * 1000;
   c->sample_fmt = AV_SAMPLE_FMT_S16;
-  c->channels = rd->ffcodecdata.audio_channels;
+  c->ch_layout.nb_channels = rd->ffcodecdata.audio_channels;
 
   switch (rd->ffcodecdata.audio_channels) {
     case FFM_CHANNELS_MONO:
-      c->channel_layout = AV_CH_LAYOUT_MONO;
+      av_channel_layout_from_mask(&c->ch_layout, AV_CH_LAYOUT_MONO);
       break;
     case FFM_CHANNELS_STEREO:
-      c->channel_layout = AV_CH_LAYOUT_STEREO;
+      av_channel_layout_from_mask(&c->ch_layout, AV_CH_LAYOUT_STEREO);
       break;
     case FFM_CHANNELS_SURROUND4:
-      c->channel_layout = AV_CH_LAYOUT_QUAD;
+      av_channel_layout_from_mask(&c->ch_layout, AV_CH_LAYOUT_QUAD);
       break;
     case FFM_CHANNELS_SURROUND51:
-      c->channel_layout = AV_CH_LAYOUT_5POINT1_BACK;
+      av_channel_layout_from_mask(&c->ch_layout, AV_CH_LAYOUT_5POINT1_BACK);
       break;
     case FFM_CHANNELS_SURROUND71:
-      c->channel_layout = AV_CH_LAYOUT_7POINT1;
+      av_channel_layout_from_mask(&c->ch_layout, AV_CH_LAYOUT_7POINT1);
       break;
   }
 
@@ -1027,7 +1027,7 @@ static AVStream *alloc_audio_stream(FFMpegContext *context,
      * not sure if that is needed anymore, so let's try out if there are any
      * complaints regarding some FFmpeg versions users might have. */
     context->audio_input_samples = AV_INPUT_BUFFER_MIN_SIZE * 8 / c->bits_per_coded_sample /
-                                   c->channels;
+                                   c->ch_layout.nb_channels;
   }
   else {
     context->audio_input_samples = c->frame_size;
@@ -1037,11 +1037,11 @@ static AVStream *alloc_audio_stream(FFMpegContext *context,
 
   context->audio_sample_size = av_get_bytes_per_sample(c->sample_fmt);
 
-  context->audio_input_buffer = (uint8_t *)av_malloc(context->audio_input_samples * c->channels *
-                                                     context->audio_sample_size);
+  context->audio_input_buffer = (uint8_t *)av_malloc(
+      context->audio_input_samples * c->ch_layout.nb_channels * context->audio_sample_size);
   if (context->audio_deinterleave) {
     context->audio_deinterleave_buffer = (uint8_t *)av_malloc(
-        context->audio_input_samples * c->channels * context->audio_sample_size);
+        context->audio_input_samples * c->ch_layout.nb_channels * context->audio_sample_size);
   }
 
   context->audio_time = 0.0f;
@@ -1432,7 +1432,7 @@ int BKE_ffmpeg_start(void *context_v,
     AVCodecContext *c = context->audio_codec;
 
     AUD_DeviceSpecs specs;
-    specs.channels = c->channels;
+    specs.channels = c->ch_layout.nb_channels;
 
     switch (av_get_packed_sample_fmt(c->sample_fmt)) {
       case AV_SAMPLE_FMT_U8:



More information about the Bf-blender-cvs mailing list