[PATCH] audio/cmus ffmpeg deprecation fixes (MAINTAINER)

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

[PATCH] audio/cmus ffmpeg deprecation fixes (MAINTAINER)

Donovan Watteau-2
Hi,

The following diff uses a patch from upstream to avoid some deprecation
warnings when building audio/cmus with our current version of FFmpeg.

Update my email address, while here.

(I'm not upgrading to the latest 2.8.0 for the moment.  It's been
released just after the project has been declared not maintained, and
there are some regressions.)

Also available here if the diff gets mangled:
https://www.dwatteau.fr/tmp/cmus_ffmpeg_fixes-20190310.diff

Thanks.

Index: Makefile
===================================================================
RCS file: /cvs/ports/audio/cmus/Makefile,v
retrieving revision 1.19
diff -u -p -r1.19 Makefile
--- Makefile 5 Dec 2018 20:19:00 -0000 1.19
+++ Makefile 10 Mar 2019 12:53:48 -0000
@@ -7,7 +7,7 @@ V= 2.7.1
 DISTNAME= cmus-${V}
 PKGNAME-main= ${PKGNAME}
 PKGNAME-ffmpeg= cmus-ffmpeg-${V}
-REVISION= 5
+REVISION= 6
 
 GH_ACCOUNT= cmus
 GH_PROJECT= cmus
@@ -16,7 +16,7 @@ GH_TAGNAME= v${V}
 CATEGORIES= audio
 HOMEPAGE= https://cmus.github.io/
 
-MAINTAINER= Donovan Watteau <[hidden email]>
+MAINTAINER= Donovan Watteau <[hidden email]>
 
 # GPLv2+
 PERMIT_PACKAGE_CDROM= Yes
Index: patches/patch-ffmpeg_c
===================================================================
RCS file: /cvs/ports/audio/cmus/patches/patch-ffmpeg_c,v
retrieving revision 1.1
diff -u -p -r1.1 patch-ffmpeg_c
--- patches/patch-ffmpeg_c 6 Jun 2018 12:14:44 -0000 1.1
+++ patches/patch-ffmpeg_c 10 Mar 2019 12:53:48 -0000
@@ -8,6 +8,7 @@ among other things:
 98ab2a6: Replace deprecated FFmpeg API
 ef65f69: remove dead code for ancient ffmpeg versions
 b595b8c: Fix ffmpeg plugin build
+9877eb0: Fixes ffmpeg deprecations
 
 Index: ffmpeg.c
 --- ffmpeg.c.orig
@@ -91,7 +92,7 @@ Index: ffmpeg.c
  free(input);
  }
 
-@@ -157,30 +128,9 @@ static void ffmpeg_init(void)
+@@ -157,26 +128,7 @@ static void ffmpeg_init(void)
 
  av_log_set_level(AV_LOG_QUIET);
 
@@ -115,14 +116,18 @@ Index: ffmpeg.c
 -
 - register_protocol(&file_protocol);
 -#else
++#if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(58, 18, 100)
  /* We could register decoders explicitly to save memory, but we have to
  * be careful about compatibility. */
  av_register_all();
--#endif
- }
-
- static int ffmpeg_open(struct input_plugin_data *ip_data)
-@@ -197,22 +147,14 @@ static int ffmpeg_open(struct input_plugin_data *ip_da
+@@ -193,26 +145,21 @@ static int ffmpeg_open(struct input_plugin_data *ip_da
+ AVCodec *codec;
+ AVCodecContext *cc = NULL;
+ AVFormatContext *ic = NULL;
++#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 48, 101)
++ AVCodecParameters *cp = NULL;
++#endif
+ SwrContext *swr = NULL;
 
  ffmpeg_init();
 
@@ -145,9 +150,39 @@ Index: ffmpeg.c
  if (err < 0) {
  d_print("unable to find stream info: %d\n", err);
  err = -IP_ERROR_FILE_FORMAT;
-@@ -235,20 +177,16 @@ static int ffmpeg_open(struct input_plugin_data *ip_da
+@@ -220,11 +167,21 @@ static int ffmpeg_open(struct input_plugin_data *ip_da
+ }
+
+ for (i = 0; i < ic->nb_streams; i++) {
++
++#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 48, 101)
++ cp = ic->streams[i]->codecpar;
++ if (cp->codec_type == AVMEDIA_TYPE_AUDIO) {
++ stream_index = i;
++ break;
++ }
++#else
++
+ cc = ic->streams[i]->codec;
+ if (cc->codec_type == AVMEDIA_TYPE_AUDIO) {
+ stream_index = i;
+ break;
+ }
++#endif
+ }
 
+ if (stream_index == -1) {
+@@ -233,22 +190,24 @@ static int ffmpeg_open(struct input_plugin_data *ip_da
+ break;
+ }
+
++#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 48, 101)
++ codec = avcodec_find_decoder(cp->codec_id);
++ cc = avcodec_alloc_context3(codec);
++ avcodec_parameters_to_context(cc, cp);
++#else
  codec = avcodec_find_decoder(cc->codec_id);
++#endif
  if (!codec) {
 - d_print("codec not found: %d, %s\n", cc->codec_id, cc->codec_name);
 + d_print("codec not found: %d, %s\n", cc->codec_id, avcodec_get_name(cc->codec_id));
@@ -170,19 +205,22 @@ Index: ffmpeg.c
  err = -IP_ERROR_UNSUPPORTED_FILE_TYPE;
  break;
  }
-@@ -258,11 +196,7 @@ static int ffmpeg_open(struct input_plugin_data *ip_da
+@@ -258,11 +217,10 @@ static int ffmpeg_open(struct input_plugin_data *ip_da
 
  if (err < 0) {
  /* Clean up.  cc is never opened at this point.  (See above assumption.) */
 -#if (LIBAVCODEC_VERSION_INT < ((53<<16)+(25<<8)+0))
 - av_close_input_file(ic);
 -#else
- avformat_close_input(&ic);
--#endif
+- avformat_close_input(&ic);
++#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 48, 101)
++ avcodec_free_context(&cc);
+ #endif
++ avformat_close_input(&ic);
  return err;
  }
 
-@@ -270,18 +204,14 @@ static int ffmpeg_open(struct input_plugin_data *ip_da
+@@ -270,18 +228,17 @@ static int ffmpeg_open(struct input_plugin_data *ip_da
  priv->codec_context = cc;
  priv->input_context = ic;
  priv->codec = codec;
@@ -193,8 +231,11 @@ Index: ffmpeg.c
 -#if (LIBAVCODEC_VERSION_INT < ((53<<16)+(25<<8)+0))
 - av_close_input_file(ic);
 -#else
- avformat_close_input(&ic);
--#endif
+- avformat_close_input(&ic);
++#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 48, 101)
++ avcodec_free_context(&cc);
+ #endif
++ avformat_close_input(&ic);
  free(priv);
  return -IP_ERROR_INTERNAL;
  }
@@ -202,7 +243,7 @@ Index: ffmpeg.c
  priv->output = ffmpeg_output_create();
 
  /* Prepare for resampling. */
-@@ -314,9 +244,7 @@ static int ffmpeg_open(struct input_plugin_data *ip_da
+@@ -314,9 +271,7 @@ static int ffmpeg_open(struct input_plugin_data *ip_da
  #ifdef WORDS_BIGENDIAN
  ip_data->sf |= sf_bigendian(1);
  #endif
@@ -212,19 +253,22 @@ Index: ffmpeg.c
  channel_map_init_waveex(cc->channels, channel_layout, ip_data->channel_map);
  return 0;
  }
-@@ -326,11 +254,7 @@ static int ffmpeg_close(struct input_plugin_data *ip_d
+@@ -326,11 +281,10 @@ static int ffmpeg_close(struct input_plugin_data *ip_d
  struct ffmpeg_private *priv = ip_data->private;
 
  avcodec_close(priv->codec_context);
 -#if (LIBAVCODEC_VERSION_INT < ((53<<16)+(25<<8)+0))
 - av_close_input_file(priv->input_context);
 -#else
- avformat_close_input(&priv->input_context);
--#endif
+- avformat_close_input(&priv->input_context);
++#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 48, 101)
++ avcodec_free_context(&priv->codec_context);
+ #endif
++ avformat_close_input(&priv->input_context);
  swr_free(&priv->swr);
  ffmpeg_input_free(priv->input);
  ffmpeg_output_free(priv->output);
-@@ -346,62 +270,50 @@ static int ffmpeg_close(struct input_plugin_data *ip_d
+@@ -346,62 +300,63 @@ static int ffmpeg_close(struct input_plugin_data *ip_d
  static int ffmpeg_fill_buffer(AVFormatContext *ic, AVCodecContext *cc, struct ffmpeg_input *input,
       struct ffmpeg_output *output, SwrContext *swr)
  {
@@ -297,7 +341,20 @@ Index: ffmpeg.c
 - AVPacket avpkt;
  av_new_packet(&avpkt, input->curr_pkt_size);
  memcpy(avpkt.data, input->curr_pkt_buf, input->curr_pkt_size);
++#if LIBAVCODEC_VERSION_INT >= AV_VERSION_INT(57, 48, 101)
++ if (avcodec_send_packet(cc, &avpkt) == 0) {
++ got_frame = !avcodec_receive_frame(cc, frame);
++ if (got_frame)
++ len = input->curr_pkt_size;
++ else
++ len = 0;
++ } else {
++ got_frame = 0;
++ len = 0;
++ }
++#else
  len = avcodec_decode_audio4(cc, frame, &got_frame, &avpkt);
++#endif
 +#if LIBAVCODEC_VERSION_MAJOR >= 56
 + av_packet_unref(&avpkt);
 +#else
@@ -308,7 +365,7 @@ Index: ffmpeg.c
  if (len < 0) {
  /* this is often reached when seeking, not sure why */
  input->curr_pkt_size = 0;
-@@ -409,13 +321,6 @@ static int ffmpeg_fill_buffer(AVFormatContext *ic, AVC
+@@ -409,13 +364,6 @@ static int ffmpeg_fill_buffer(AVFormatContext *ic, AVC
  }
  input->curr_pkt_size -= len;
  input->curr_pkt_buf += len;
@@ -322,7 +379,7 @@ Index: ffmpeg.c
  if (got_frame) {
  int res = swr_convert(swr,
  &output->buffer,
-@@ -426,10 +331,13 @@ static int ffmpeg_fill_buffer(AVFormatContext *ic, AVC
+@@ -426,10 +374,13 @@ static int ffmpeg_fill_buffer(AVFormatContext *ic, AVC
  res = 0;
  output->buffer_pos = output->buffer;
  output->buffer_used_len = res * cc->channels * sizeof(int16_t);
@@ -337,7 +394,7 @@ Index: ffmpeg.c
  }
  /* This should never get here. */
  return -IP_ERROR_INTERNAL;
-@@ -459,30 +367,16 @@ static int ffmpeg_read(struct input_plugin_data *ip_da
+@@ -459,30 +410,16 @@ static int ffmpeg_read(struct input_plugin_data *ip_da
  static int ffmpeg_seek(struct input_plugin_data *ip_data, double offset)
  {
  struct ffmpeg_private *priv = ip_data->private;
@@ -373,7 +430,7 @@ Index: ffmpeg.c
 
  if (ret < 0) {
  return -IP_ERROR_FUNCTION_NOT_SUPPORTED;
-@@ -492,56 +386,30 @@ static int ffmpeg_seek(struct input_plugin_data *ip_da
+@@ -492,56 +429,30 @@ static int ffmpeg_seek(struct input_plugin_data *ip_da
  }
  }
 
@@ -439,7 +496,7 @@ Index: ffmpeg.c
 
  return 0;
  }
-@@ -562,13 +430,15 @@ static long ffmpeg_bitrate(struct input_plugin_data *i
+@@ -562,13 +473,15 @@ static long ffmpeg_bitrate(struct input_plugin_data *i
  static long ffmpeg_current_bitrate(struct input_plugin_data *ip_data)
  {
  struct ffmpeg_private *priv = ip_data->private;
@@ -458,7 +515,7 @@ Index: ffmpeg.c
  if (priv->input->curr_duration > 0) {
  double seconds = priv->input->curr_duration * av_q2d(st->time_base);
  bitrate = (8 * priv->input->curr_size) / seconds;
-@@ -584,32 +454,11 @@ static char *ffmpeg_codec(struct input_plugin_data *ip
+@@ -584,32 +497,11 @@ static char *ffmpeg_codec(struct input_plugin_data *ip
  return xstrdup(priv->codec->name);
  }