UPDATE: iaxclient - FFmpeg API

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

UPDATE: iaxclient - FFmpeg API

Brad Smith-14
Update API usage to deal with current vs new FFmpeg API.


Index: Makefile
===================================================================
RCS file: /home/cvs/ports/telephony/iaxclient/Makefile,v
retrieving revision 1.40
diff -u -p -u -p -r1.40 Makefile
--- Makefile 17 Dec 2018 01:08:29 -0000 1.40
+++ Makefile 9 Feb 2019 18:44:11 -0000
@@ -6,7 +6,7 @@ COMMENT-tcl= IAX client library, tcl bin
 DISTNAME= iaxclient-2.1beta3
 PKGNAME-main= ${DISTNAME}
 PKGNAME-tcl= ${DISTNAME:S/iaxclient/iaxclient-tcl/}
-REVISION= 22
+REVISION= 23
 
 CATEGORIES= telephony
 SHARED_LIBS= tcliaxclient02 0.0 \
Index: patches/patch-lib_codec_ffmpeg_c
===================================================================
RCS file: /home/cvs/ports/telephony/iaxclient/patches/patch-lib_codec_ffmpeg_c,v
retrieving revision 1.4
diff -u -p -u -p -r1.4 patch-lib_codec_ffmpeg_c
--- patches/patch-lib_codec_ffmpeg_c 27 Apr 2014 20:52:50 -0000 1.4
+++ patches/patch-lib_codec_ffmpeg_c 9 Feb 2019 19:14:46 -0000
@@ -2,8 +2,9 @@ $OpenBSD: patch-lib_codec_ffmpeg_c,v 1.4
 
 Update for newer FFmpeg API.
 
---- lib/codec_ffmpeg.c.orig Mon Apr  7 12:05:42 2008
-+++ lib/codec_ffmpeg.c Thu Apr 24 20:26:53 2014
+Index: lib/codec_ffmpeg.c
+--- lib/codec_ffmpeg.c.orig
++++ lib/codec_ffmpeg.c
 @@ -23,11 +23,7 @@
  #include "codec_ffmpeg.h"
  #include "iaxclient_lib.h"
@@ -16,7 +17,7 @@ Update for newer FFmpeg API.
 
  struct slice_header_t
  {
-@@ -63,7 +59,7 @@ struct decoder_ctx
+@@ -63,30 +59,30 @@ struct decoder_ctx
 
  static struct slice_set_t * g_slice_set = 0;
 
@@ -25,6 +26,36 @@ Update for newer FFmpeg API.
  {
  switch (format)
  {
+ case IAXC_FORMAT_H261:
+- return CODEC_ID_H261;
++ return AV_CODEC_ID_H261;
+
+ case IAXC_FORMAT_H263:
+- return CODEC_ID_H263;
++ return AV_CODEC_ID_H263;
+
+ case IAXC_FORMAT_H263_PLUS:
+- return CODEC_ID_H263P;
++ return AV_CODEC_ID_H263P;
+
+ case IAXC_FORMAT_MPEG4:
+- return CODEC_ID_MPEG4;
++ return AV_CODEC_ID_MPEG4;
+
+ case IAXC_FORMAT_H264:
+- return CODEC_ID_H264;
++ return AV_CODEC_ID_H264;
+
+ case IAXC_FORMAT_THEORA:
+- return CODEC_ID_THEORA;
++ return AV_CODEC_ID_THEORA;
+
+ default:
+- return CODEC_ID_NONE;
++ return AV_CODEC_ID_NONE;
+ }
+ }
+
 @@ -165,10 +161,14 @@ static int pass_frame_to_decoder(AVCodecContext * avct
  {
  int bytes_decoded;
@@ -59,6 +90,15 @@ Update for newer FFmpeg API.
  if ( bytes_decoded < 0 )
  {
  fprintf(stderr,
+@@ -374,7 +378,7 @@ static int encode(struct iaxc_video_codec *c,
+ struct encoder_ctx *e = (struct encoder_ctx *) c->encstate;
+ int encoded_size;
+
+- avcodec_get_frame_defaults(e->picture);
++ av_frame_unref(e->picture);
+
+ e->picture->data[0] = (unsigned char *)in;
+ e->picture->data[1] = (unsigned char *)in
 @@ -441,6 +445,7 @@ struct iaxc_video_codec *codec_video_ffmpeg_new(int fo
  {
  struct encoder_ctx *e;
@@ -75,7 +115,7 @@ Update for newer FFmpeg API.
  avcodec_register_all();
 
  c->format = format;
-@@ -475,7 +479,7 @@ struct iaxc_video_codec *codec_video_ffmpeg_new(int fo
+@@ -475,10 +479,10 @@ struct iaxc_video_codec *codec_video_ffmpeg_new(int fo
  if (!c->encstate)
  goto bail;
  e = c->encstate;
@@ -83,7 +123,11 @@ Update for newer FFmpeg API.
 + e->avctx = avcodec_alloc_context3(NULL);
  if (!e->avctx)
  goto bail;
- e->picture = avcodec_alloc_frame();
+- e->picture = avcodec_alloc_frame();
++ e->picture = av_frame_alloc();
+ if (!e->picture)
+ goto bail;
+ /* The idea here is that the encoded frame that will land in this
 @@ -496,7 +500,7 @@ struct iaxc_video_codec *codec_video_ffmpeg_new(int fo
  if (!c->decstate)
  goto bail;
@@ -93,61 +137,150 @@ Update for newer FFmpeg API.
  if (!d->avctx)
  goto bail;
  d->picture = avcodec_alloc_frame();
-@@ -524,9 +528,6 @@ struct iaxc_video_codec *codec_video_ffmpeg_new(int fo
- e->avctx->pix_fmt = PIX_FMT_YUV420P;
+@@ -521,20 +525,20 @@ struct iaxc_video_codec *codec_video_ffmpeg_new(int fo
+
+ /* This determines how often i-frames are sent */
+ e->avctx->gop_size = framerate * 3;
+- e->avctx->pix_fmt = PIX_FMT_YUV420P;
++ e->avctx->pix_fmt = AV_PIX_FMT_YUV420P;
  e->avctx->has_b_frames = 0;
 
 - e->avctx->mb_qmin = e->avctx->qmin = 10;
 - e->avctx->mb_qmax = e->avctx->qmax = 10;
 -
++#if 0
  e->avctx->lmin = 2 * FF_QP2LAMBDA;
  e->avctx->lmax = 10 * FF_QP2LAMBDA;
++#endif
++
  e->avctx->global_quality = FF_QP2LAMBDA * 2;
-@@ -561,7 +562,8 @@ struct iaxc_video_codec *codec_video_ffmpeg_new(int fo
+ e->avctx->qblur = 0.5;
+ e->avctx->global_quality = 10;
+
+- e->avctx->flags |= CODEC_FLAG_PSNR;
+- e->avctx->flags |= CODEC_FLAG_QSCALE;
++ e->avctx->flags |= AV_CODEC_FLAG_PSNR;
++ e->avctx->flags |= AV_CODEC_FLAG_QSCALE;
+
+ e->avctx->mb_decision = FF_MB_DECISION_SIMPLE;
+
+@@ -555,37 +559,38 @@ struct iaxc_video_codec *codec_video_ffmpeg_new(int fo
+ case IAXC_FORMAT_H263:
+ /* TODO: H263 only works with specific resolutions. */
+ name = "H.263";
+- e->avctx->flags |= CODEC_FLAG_AC_PRED;
++ e->avctx->flags |= AV_CODEC_FLAG_AC_PRED;
+ if (fragsize)
+ {
  c->decode = decode_rtp_slice;
  e->avctx->rtp_payload_size = fragsize;
  e->avctx->flags |=
 - CODEC_FLAG_TRUNCATED | CODEC_FLAG2_STRICT_GOP;
-+ CODEC_FLAG_TRUNCATED;
++ AV_CODEC_FLAG_TRUNCATED;
 + av_dict_set(&opts, "strict_gop", "1", 0);
  e->avctx->rtp_callback = encode_rtp_callback;
- d->avctx->flags |= CODEC_FLAG_TRUNCATED;
+- d->avctx->flags |= CODEC_FLAG_TRUNCATED;
++ d->avctx->flags |= AV_CODEC_FLAG_TRUNCATED;
  }
-@@ -581,9 +583,9 @@ struct iaxc_video_codec *codec_video_ffmpeg_new(int fo
+ break;
+
+ case IAXC_FORMAT_H263_PLUS:
+- /* Although the encoder is CODEC_ID_H263P, the decoder
++ /* Although the encoder is AV_CODEC_ID_H263P, the decoder
+ * is the regular h.263, so we handle this special case
+ * here.
+ */
+- ff_dec_id = CODEC_ID_H263;
++ ff_dec_id = AV_CODEC_ID_H263;
+ name = "H.263+";
+- e->avctx->flags |= CODEC_FLAG_AC_PRED;
++ e->avctx->flags |= AV_CODEC_FLAG_AC_PRED;
+ if (fragsize)
+ {
+ c->decode = decode_rtp_slice;
  e->avctx->rtp_payload_size = fragsize;
  e->avctx->flags |=
- CODEC_FLAG_TRUNCATED |
+- CODEC_FLAG_TRUNCATED |
 - CODEC_FLAG_H263P_SLICE_STRUCT |
 - CODEC_FLAG2_STRICT_GOP |
- CODEC_FLAG2_LOCAL_HEADER;
+- CODEC_FLAG2_LOCAL_HEADER;
++ AV_CODEC_FLAG_TRUNCATED |
++ AV_CODEC_FLAG2_LOCAL_HEADER;
 + av_dict_set(&opts, "strict_gop", "1", 0);
 + av_dict_set(&opts, "structured_slices", "1", 0);
  e->avctx->rtp_callback = encode_rtp_callback;
- d->avctx->flags |= CODEC_FLAG_TRUNCATED;
+- d->avctx->flags |= CODEC_FLAG_TRUNCATED;
++ d->avctx->flags |= AV_CODEC_FLAG_TRUNCATED;
  }
-@@ -596,10 +598,9 @@ struct iaxc_video_codec *codec_video_ffmpeg_new(int fo
+ break;
+
+@@ -595,12 +600,11 @@ struct iaxc_video_codec *codec_video_ffmpeg_new(int fo
+ e->avctx->rtp_payload_size = fragsize;
  e->avctx->rtp_callback = encode_rtp_callback;
  e->avctx->flags |=
- CODEC_FLAG_TRUNCATED |
+- CODEC_FLAG_TRUNCATED |
 - CODEC_FLAG_H263P_SLICE_STRUCT |
 - CODEC_FLAG2_STRICT_GOP |
- CODEC_FLAG2_LOCAL_HEADER;
+- CODEC_FLAG2_LOCAL_HEADER;
 -
+- d->avctx->flags |= CODEC_FLAG_TRUNCATED;
++ AV_CODEC_FLAG_TRUNCATED |
++ AV_CODEC_FLAG2_LOCAL_HEADER;
 + av_dict_set(&opts, "strict_gop", "1", 0);
 + av_dict_set(&opts, "structured_slices", "1", 0);
- d->avctx->flags |= CODEC_FLAG_TRUNCATED;
++ d->avctx->flags |= AV_CODEC_FLAG_TRUNCATED;
  break;
 
-@@ -625,7 +626,7 @@ struct iaxc_video_codec *codec_video_ffmpeg_new(int fo
- /* e->avctx->flags2 |= CODEC_FLAG2_8X8DCT; */
+ case IAXC_FORMAT_H264:
+@@ -611,35 +615,35 @@ struct iaxc_video_codec *codec_video_ffmpeg_new(int fo
+ */
+
+ /* Headers are not repeated */
+- /* e->avctx->flags |= CODEC_FLAG_GLOBAL_HEADER; */
++ /* e->avctx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER; */
+
+ /* Slower, less blocky */
+- /* e->avctx->flags |= CODEC_FLAG_LOOP_FILTER; */
++ /* e->avctx->flags |= AV_CODEC_FLAG_LOOP_FILTER; */
+
+- e->avctx->flags |= CODEC_FLAG_PASS1;
+- /* e->avctx->flags |= CODEC_FLAG_PASS2; */
++ e->avctx->flags |= AV_CODEC_FLAG_PASS1;
++ /* e->avctx->flags |= AV_CODEC_FLAG_PASS2; */
+
+ /* Compute psnr values at encode-time (avctx->error[]) */
+- /* e->avctx->flags |= CODEC_FLAG_PSNR; */
++ /* e->avctx->flags |= AV_CODEC_FLAG_PSNR; */
+
+- /* e->avctx->flags2 |= CODEC_FLAG2_8X8DCT; */
++ /* e->avctx->flags2 |= AV_CODEC_FLAG2_8X8DCT; */
 
  /* Access Unit Delimiters */
 - e->avctx->flags2 |= CODEC_FLAG2_AUD;
 + av_dict_set(&opts, "aud", "1", 0);
 
  /* Allow b-frames to be used as reference */
- /* e->avctx->flags2 |= CODEC_FLAG2_BPYRAMID; */
-@@ -686,7 +687,7 @@ struct iaxc_video_codec *codec_video_ffmpeg_new(int fo
+- /* e->avctx->flags2 |= CODEC_FLAG2_BPYRAMID; */
++ /* e->avctx->flags2 |= AV_CODEC_FLAG2_BPYRAMID; */
+
+ /* b-frame rate distortion optimization */
+- /* e->avctx->flags2 |= CODEC_FLAG2_BRDO; */
++ /* e->avctx->flags2 |= AV_CODEC_FLAG2_BRDO; */
+
+- /* e->avctx->flags2 |= CODEC_FLAG2_FASTPSKIP; */
++ /* e->avctx->flags2 |= AV_CODEC_FLAG2_FASTPSKIP; */
+
+ /* Multiple references per partition */
+- /* e->avctx->flags2 |= CODEC_FLAG2_MIXED_REFS; */
++ /* e->avctx->flags2 |= AV_CODEC_FLAG2_MIXED_REFS; */
+
+ /* Weighted biprediction for b-frames */
+- /* e->avctx->flags2 |= CODEC_FLAG2_WPRED; */
++ /* e->avctx->flags2 |= AV_CODEC_FLAG2_WPRED; */
+
+ /*
+ * Decoder flags
+@@ -686,7 +690,7 @@ struct iaxc_video_codec *codec_video_ffmpeg_new(int fo
  goto bail;
  }
 
@@ -156,7 +289,7 @@ Update for newer FFmpeg API.
  {
  iaxci_usermsg(IAXC_TEXT_TYPE_ERROR,
      "codec_ffmpeg: cannot open encoder %s\n", name);
-@@ -701,7 +702,7 @@ struct iaxc_video_codec *codec_video_ffmpeg_new(int fo
+@@ -701,7 +705,7 @@ struct iaxc_video_codec *codec_video_ffmpeg_new(int fo
      ff_dec_id);
  goto bail;
  }
@@ -165,7 +298,18 @@ Update for newer FFmpeg API.
  {
  iaxci_usermsg(IAXC_TEXT_TYPE_ERROR,
      "codec_ffmpeg: cannot open decoder %s\n", name);
-@@ -728,12 +729,11 @@ bail:
+@@ -709,8 +713,8 @@ struct iaxc_video_codec *codec_video_ffmpeg_new(int fo
+ }
+
+ {
+- enum PixelFormat fmts[] = { PIX_FMT_YUV420P, -1 };
+- if (d->avctx->get_format(d->avctx, fmts) != PIX_FMT_YUV420P)
++ enum AVPixelFormat fmts[] = { AV_PIX_FMT_YUV420P, -1 };
++ if (d->avctx->get_format(d->avctx, fmts) != AV_PIX_FMT_YUV420P)
+ {
+ iaxci_usermsg(IAXC_TEXT_TYPE_ERROR,
+ "codec_ffmpeg: cannot set decode format to YUV420P\n");
+@@ -728,17 +732,16 @@ bail:
  int codec_video_ffmpeg_check_codec(int format)
  {
  AVCodec *codec;
@@ -179,3 +323,9 @@ Update for newer FFmpeg API.
  avcodec_register_all();
 
  codec_id = map_iaxc_codec_to_avcodec(format);
+
+- if (codec_id == CODEC_ID_NONE)
++ if (codec_id == AV_CODEC_ID_NONE)
+ return 0;
+
+ codec = avcodec_find_encoder(codec_id);