[FFmpeg-cvslog] Merge commit 'ac6d53589f3631ae08467c784fb371a15c957f01'

Derek Buitenhuis git at videolan.org
Mon Apr 11 15:15:46 CEST 2016


ffmpeg | branch: master | Derek Buitenhuis <derek.buitenhuis at gmail.com> | Mon Apr 11 14:15:28 2016 +0100| [6bc5ef37cbf6628dd4f4c9dae9d8b3009fc81408] | committer: Derek Buitenhuis

Merge commit 'ac6d53589f3631ae08467c784fb371a15c957f01'

* commit 'ac6d53589f3631ae08467c784fb371a15c957f01':
  examples/transcode_aac: convert to codecpar

Merged-by: Derek Buitenhuis <derek.buitenhuis at gmail.com>

> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=6bc5ef37cbf6628dd4f4c9dae9d8b3009fc81408
---

 doc/examples/transcode_aac.c |   66 +++++++++++++++++++++++++++++++-----------
 1 file changed, 49 insertions(+), 17 deletions(-)

diff --git a/doc/examples/transcode_aac.c b/doc/examples/transcode_aac.c
index 486e54c..9b3ee67 100644
--- a/doc/examples/transcode_aac.c
+++ b/doc/examples/transcode_aac.c
@@ -62,6 +62,7 @@ static int open_input_file(const char *filename,
                            AVFormatContext **input_format_context,
                            AVCodecContext **input_codec_context)
 {
+    AVCodecContext *avctx;
     AVCodec *input_codec;
     int error;
 
@@ -91,23 +92,39 @@ static int open_input_file(const char *filename,
     }
 
     /** Find a decoder for the audio stream. */
-    if (!(input_codec = avcodec_find_decoder((*input_format_context)->streams[0]->codec->codec_id))) {
+    if (!(input_codec = avcodec_find_decoder((*input_format_context)->streams[0]->codecpar->codec_id))) {
         fprintf(stderr, "Could not find input codec\n");
         avformat_close_input(input_format_context);
         return AVERROR_EXIT;
     }
 
+    /** allocate a new decoding context */
+    avctx = avcodec_alloc_context3(input_codec);
+    if (!avctx) {
+        fprintf(stderr, "Could not allocate a decoding context\n");
+        avformat_close_input(input_format_context);
+        return AVERROR(ENOMEM);
+    }
+
+    /** initialize the stream parameters with demuxer information */
+    error = avcodec_parameters_to_context(avctx, (*input_format_context)->streams[0]->codecpar);
+    if (error < 0) {
+        avformat_close_input(input_format_context);
+        avcodec_free_context(&avctx);
+        return error;
+    }
+
     /** Open the decoder for the audio stream to use it later. */
-    if ((error = avcodec_open2((*input_format_context)->streams[0]->codec,
-                               input_codec, NULL)) < 0) {
+    if ((error = avcodec_open2(avctx, input_codec, NULL)) < 0) {
         fprintf(stderr, "Could not open input codec (error '%s')\n",
                 get_error_text(error));
+        avcodec_free_context(&avctx);
         avformat_close_input(input_format_context);
         return error;
     }
 
     /** Save the decoder context for easier access later. */
-    *input_codec_context = (*input_format_context)->streams[0]->codec;
+    *input_codec_context = avctx;
 
     return 0;
 }
@@ -122,6 +139,7 @@ static int open_output_file(const char *filename,
                             AVFormatContext **output_format_context,
                             AVCodecContext **output_codec_context)
 {
+    AVCodecContext *avctx          = NULL;
     AVIOContext *output_io_context = NULL;
     AVStream *stream               = NULL;
     AVCodec *output_codec          = NULL;
@@ -161,27 +179,31 @@ static int open_output_file(const char *filename,
     }
 
     /** Create a new audio stream in the output file container. */
-    if (!(stream = avformat_new_stream(*output_format_context, output_codec))) {
+    if (!(stream = avformat_new_stream(*output_format_context, NULL))) {
         fprintf(stderr, "Could not create new stream\n");
         error = AVERROR(ENOMEM);
         goto cleanup;
     }
 
-    /** Save the encoder context for easier access later. */
-    *output_codec_context = stream->codec;
+    avctx = avcodec_alloc_context3(output_codec);
+    if (!avctx) {
+        fprintf(stderr, "Could not allocate an encoding context\n");
+        error = AVERROR(ENOMEM);
+        goto cleanup;
+    }
 
     /**
      * Set the basic encoder parameters.
      * The input file's sample rate is used to avoid a sample rate conversion.
      */
-    (*output_codec_context)->channels       = OUTPUT_CHANNELS;
-    (*output_codec_context)->channel_layout = av_get_default_channel_layout(OUTPUT_CHANNELS);
-    (*output_codec_context)->sample_rate    = input_codec_context->sample_rate;
-    (*output_codec_context)->sample_fmt     = output_codec->sample_fmts[0];
-    (*output_codec_context)->bit_rate       = OUTPUT_BIT_RATE;
+    avctx->channels       = OUTPUT_CHANNELS;
+    avctx->channel_layout = av_get_default_channel_layout(OUTPUT_CHANNELS);
+    avctx->sample_rate    = input_codec_context->sample_rate;
+    avctx->sample_fmt     = output_codec->sample_fmts[0];
+    avctx->bit_rate       = OUTPUT_BIT_RATE;
 
     /** Allow the use of the experimental AAC encoder */
-    (*output_codec_context)->strict_std_compliance = FF_COMPLIANCE_EXPERIMENTAL;
+    avctx->strict_std_compliance = FF_COMPLIANCE_EXPERIMENTAL;
 
     /** Set the sample rate for the container. */
     stream->time_base.den = input_codec_context->sample_rate;
@@ -192,18 +214,28 @@ static int open_output_file(const char *filename,
      * Mark the encoder so that it behaves accordingly.
      */
     if ((*output_format_context)->oformat->flags & AVFMT_GLOBALHEADER)
-        (*output_codec_context)->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
+        avctx->flags |= AV_CODEC_FLAG_GLOBAL_HEADER;
 
     /** Open the encoder for the audio stream to use it later. */
-    if ((error = avcodec_open2(*output_codec_context, output_codec, NULL)) < 0) {
+    if ((error = avcodec_open2(avctx, output_codec, NULL)) < 0) {
         fprintf(stderr, "Could not open output codec (error '%s')\n",
                 get_error_text(error));
         goto cleanup;
     }
 
+    error = avcodec_parameters_from_context(stream->codecpar, avctx);
+    if (error < 0) {
+        fprintf(stderr, "Could not initialize stream parameters\n");
+        goto cleanup;
+    }
+
+    /** Save the encoder context for easier access later. */
+    *output_codec_context = avctx;
+
     return 0;
 
 cleanup:
+    avcodec_free_context(&avctx);
     avio_closep(&(*output_format_context)->pb);
     avformat_free_context(*output_format_context);
     *output_format_context = NULL;
@@ -756,13 +788,13 @@ cleanup:
         av_audio_fifo_free(fifo);
     swr_free(&resample_context);
     if (output_codec_context)
-        avcodec_close(output_codec_context);
+        avcodec_free_context(&output_codec_context);
     if (output_format_context) {
         avio_closep(&output_format_context->pb);
         avformat_free_context(output_format_context);
     }
     if (input_codec_context)
-        avcodec_close(input_codec_context);
+        avcodec_free_context(&input_codec_context);
     if (input_format_context)
         avformat_close_input(&input_format_context);
 


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

diff --cc doc/examples/transcode_aac.c
index 486e54c,be86fe5..9b3ee67
--- a/doc/examples/transcode_aac.c
+++ b/doc/examples/transcode_aac.c
@@@ -204,7 -234,8 +235,8 @@@ static int open_output_file(const char 
      return 0;
  
  cleanup:
+     avcodec_free_context(&avctx);
 -    avio_close((*output_format_context)->pb);
 +    avio_closep(&(*output_format_context)->pb);
      avformat_free_context(*output_format_context);
      *output_format_context = NULL;
      return error < 0 ? error : AVERROR_EXIT;
@@@ -754,11 -800,14 +786,11 @@@ int main(int argc, char **argv
  cleanup:
      if (fifo)
          av_audio_fifo_free(fifo);
 -    if (resample_context) {
 -        avresample_close(resample_context);
 -        avresample_free(&resample_context);
 -    }
 +    swr_free(&resample_context);
      if (output_codec_context)
-         avcodec_close(output_codec_context);
+         avcodec_free_context(&output_codec_context);
      if (output_format_context) {
 -        avio_close(output_format_context->pb);
 +        avio_closep(&output_format_context->pb);
          avformat_free_context(output_format_context);
      }
      if (input_codec_context)



More information about the ffmpeg-cvslog mailing list