[FFmpeg-cvslog] lavc: add channels field to AVFrame

Stefano Sabatini git at videolan.org
Tue Jul 31 13:32:42 CEST 2012


ffmpeg | branch: master | Stefano Sabatini <stefasab at gmail.com> | Mon Jul 30 15:24:30 2012 +0200| [23fc4dd6e7e150ea163a867dfaee2062ade90b74] | committer: Stefano Sabatini

lavc: add channels field to AVFrame

This is required otherwise it is not always possible to guess the number
of channels from the layout, for example if the channel layout is
unknown.

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

 doc/APIchanges       |    3 +++
 libavcodec/avcodec.h |   11 +++++++++++
 libavcodec/utils.c   |    4 ++++
 libavcodec/version.h |    2 +-
 4 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/doc/APIchanges b/doc/APIchanges
index 359ac32..89623ed 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -15,6 +15,9 @@ libavutil:     2011-04-18
 
 API changes, most recent first:
 
+2012-07-31 - xxxxxxx - lavc 54.46.100
+  Add channels field to AVFrame.
+
 2012-07-30 - xxxxxxx - lavu 51.66.100
   Add av_get_channel_description()
   and av_get_standard_channel_layout() functions.
diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index edbc59b..fb16c83 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -1337,6 +1337,15 @@ typedef struct AVFrame {
     int decode_error_flags;
 #define FF_DECODE_ERROR_INVALID_BITSTREAM   1
 #define FF_DECODE_ERROR_MISSING_REFERENCE   2
+
+    /**
+     * number of audio channels, only used for audio.
+     * Code outside libavcodec should access this field using:
+     * av_frame_get_channels(frame)
+     * - encoding: unused
+     * - decoding: Read by user.
+     */
+    int64_t channels;
 } AVFrame;
 
 /**
@@ -1352,6 +1361,8 @@ int64_t av_frame_get_pkt_pos              (const AVFrame *frame);
 void    av_frame_set_pkt_pos              (AVFrame *frame, int64_t val);
 int64_t av_frame_get_channel_layout       (const AVFrame *frame);
 void    av_frame_set_channel_layout       (AVFrame *frame, int64_t val);
+int     av_frame_get_channels             (const AVFrame *frame);
+void    av_frame_set_channels             (AVFrame *frame, int     val);
 int     av_frame_get_sample_rate          (const AVFrame *frame);
 void    av_frame_set_sample_rate          (AVFrame *frame, int     val);
 AVDictionary *av_frame_get_metadata       (const AVFrame *frame);
diff --git a/libavcodec/utils.c b/libavcodec/utils.c
index 53fda1f..2f4cb5d 100644
--- a/libavcodec/utils.c
+++ b/libavcodec/utils.c
@@ -427,6 +427,7 @@ static int audio_get_buffer(AVCodecContext *avctx, AVFrame *frame)
     frame->sample_rate    = avctx->sample_rate;
     frame->format         = avctx->sample_fmt;
     frame->channel_layout = avctx->channel_layout;
+    frame->channels       = avctx->channels;
 
     if (avctx->debug & FF_DEBUG_BUFFERS)
         av_log(avctx, AV_LOG_DEBUG, "default_get_buffer called on frame %p, "
@@ -724,6 +725,7 @@ MAKE_ACCESSORS(AVFrame, frame, int64_t, best_effort_timestamp)
 MAKE_ACCESSORS(AVFrame, frame, int64_t, pkt_duration)
 MAKE_ACCESSORS(AVFrame, frame, int64_t, pkt_pos)
 MAKE_ACCESSORS(AVFrame, frame, int64_t, channel_layout)
+MAKE_ACCESSORS(AVFrame, frame, int,     channels)
 MAKE_ACCESSORS(AVFrame, frame, int,     sample_rate)
 MAKE_ACCESSORS(AVFrame, frame, AVDictionary *, metadata)
 MAKE_ACCESSORS(AVFrame, frame, int,     decode_error_flags)
@@ -1648,6 +1650,8 @@ int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx,
                 frame->format = avctx->sample_fmt;
             if (!frame->channel_layout)
                 frame->channel_layout = avctx->channel_layout;
+            if (!frame->channels)
+                frame->channels = avctx->channels;
             if (!frame->sample_rate)
                 frame->sample_rate = avctx->sample_rate;
         }
diff --git a/libavcodec/version.h b/libavcodec/version.h
index 81d731c..6cef037 100644
--- a/libavcodec/version.h
+++ b/libavcodec/version.h
@@ -27,7 +27,7 @@
  */
 
 #define LIBAVCODEC_VERSION_MAJOR 54
-#define LIBAVCODEC_VERSION_MINOR  45
+#define LIBAVCODEC_VERSION_MINOR  46
 #define LIBAVCODEC_VERSION_MICRO 100
 
 #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \



More information about the ffmpeg-cvslog mailing list