[FFmpeg-cvslog] lavfi: add audio channel packing negotiation fields

Mina Nagy Zaki git at videolan.org
Sat Jul 16 19:29:20 CEST 2011


ffmpeg | branch: master | Mina Nagy Zaki <mnzaki at gmail.com> | Tue Jun 28 08:56:19 2011 +0300| [b57df29f95d1107a66315a6744c1c3e73293b2ee] | committer: Stefano Sabatini

lavfi: add audio channel packing negotiation fields

Signed-off-by: Stefano Sabatini <stefano.sabatini-lala at poste.it>

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

 doc/APIchanges              |    8 ++++++++
 libavfilter/avfilter.c      |    3 +++
 libavfilter/avfilter.h      |   18 ++++++++++++++++--
 libavfilter/avfiltergraph.c |    6 +++++-
 libavfilter/defaults.c      |    8 ++++++++
 libavfilter/formats.c       |   11 +++++++++++
 6 files changed, 51 insertions(+), 3 deletions(-)

diff --git a/doc/APIchanges b/doc/APIchanges
index e2b2718..94a5987 100644
--- a/doc/APIchanges
+++ b/doc/APIchanges
@@ -13,6 +13,14 @@ libavutil:   2011-04-18
 
 API changes, most recent first:
 
+2011-07-16 - xxxxxx - lavfi 2.27.0
+  Add audio packing negotiation fields and helper functions.
+
+  In particular, add AVFilterPacking enum, planar, in_packings and
+  out_packings fields to AVFilterLink, and the functions:
+  avfilter_set_common_packing_formats()
+  avfilter_all_packing_formats()
+
 2011-07-10 - a67c061 - lavf 53.3.0
   Add avformat_find_stream_info(), deprecate av_find_stream_info().
 
diff --git a/libavfilter/avfilter.c b/libavfilter/avfilter.c
index a57677c..7003cdd 100644
--- a/libavfilter/avfilter.c
+++ b/libavfilter/avfilter.c
@@ -221,6 +221,9 @@ int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt,
     if (link->out_chlayouts)
         avfilter_formats_changeref(&link->out_chlayouts,
                                    &filt->outputs[filt_dstpad_idx]->out_chlayouts);
+    if (link->out_packing)
+        avfilter_formats_changeref(&link->out_packing,
+                                   &filt->outputs[filt_dstpad_idx]->out_packing);
 
     return 0;
 }
diff --git a/libavfilter/avfilter.h b/libavfilter/avfilter.h
index edcc726..d89ac26 100644
--- a/libavfilter/avfilter.h
+++ b/libavfilter/avfilter.h
@@ -29,7 +29,7 @@
 #include "libavutil/rational.h"
 
 #define LIBAVFILTER_VERSION_MAJOR  2
-#define LIBAVFILTER_VERSION_MINOR 26
+#define LIBAVFILTER_VERSION_MINOR 27
 #define LIBAVFILTER_VERSION_MICRO  0
 
 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
@@ -265,6 +265,11 @@ AVFilterFormats *avfilter_all_formats(enum AVMediaType type);
 AVFilterFormats *avfilter_all_channel_layouts(void);
 
 /**
+ * Return a list of all audio packing formats.
+ */
+AVFilterFormats *avfilter_all_packing_formats(void);
+
+/**
  * Return a format list which contains the intersection of the formats of
  * a and b. Also, all the references of a, all the references of b, and
  * a and b themselves will be deallocated.
@@ -482,6 +487,7 @@ AVFilterBufferRef *avfilter_default_get_audio_buffer(AVFilterLink *link, int per
 void avfilter_set_common_pixel_formats(AVFilterContext *ctx, AVFilterFormats *formats);
 void avfilter_set_common_sample_formats(AVFilterContext *ctx, AVFilterFormats *formats);
 void avfilter_set_common_channel_layouts(AVFilterContext *ctx, AVFilterFormats *formats);
+void avfilter_set_common_packing_formats(AVFilterContext *ctx, AVFilterFormats *formats);
 
 /** Default handler for query_formats() */
 int avfilter_default_query_formats(AVFilterContext *ctx);
@@ -570,6 +576,11 @@ struct AVFilterContext {
     void *priv;                     ///< private data for use by the filter
 };
 
+enum AVFilterPacking {
+    AVFILTER_PACKED = 0,
+    AVFILTER_PLANAR,
+};
+
 /**
  * A link between two filters. This contains pointers to the source and
  * destination filters between which this link exists, and the indexes of
@@ -597,9 +608,10 @@ struct AVFilterLink {
     int w;                      ///< agreed upon image width
     int h;                      ///< agreed upon image height
     AVRational sample_aspect_ratio; ///< agreed upon sample aspect ratio
-    /* These two parameters apply only to audio */
+    /* These parameters apply only to audio */
     int64_t channel_layout;     ///< channel layout of current buffer (see libavutil/audioconvert.h)
     int64_t sample_rate;        ///< samples per second
+    int planar;                 ///< agreed upon packing mode of audio buffers. true if planar.
 
     int format;                 ///< agreed upon media format
 
@@ -615,6 +627,8 @@ struct AVFilterLink {
 
     AVFilterFormats *in_chlayouts;
     AVFilterFormats *out_chlayouts;
+    AVFilterFormats *in_packing;
+    AVFilterFormats *out_packing;
 
     /**
      * The buffer reference currently being sent across the link by the source
diff --git a/libavfilter/avfiltergraph.c b/libavfilter/avfiltergraph.c
index 0476861..8756e42 100644
--- a/libavfilter/avfiltergraph.c
+++ b/libavfilter/avfiltergraph.c
@@ -203,8 +203,12 @@ static void pick_format(AVFilterLink *link)
         link->channel_layout = link->in_chlayouts->formats[0];
         avfilter_formats_unref(&link->in_chlayouts);
         avfilter_formats_unref(&link->out_chlayouts);
-    }
 
+        link->in_packing->format_count = 1;
+        link->planar = link->in_packing->formats[0] == AVFILTER_PLANAR;
+        avfilter_formats_unref(&link->in_packing);
+        avfilter_formats_unref(&link->out_packing);
+    }
 }
 
 static void pick_formats(AVFilterGraph *graph)
diff --git a/libavfilter/defaults.c b/libavfilter/defaults.c
index b03816d..eef9fd1 100644
--- a/libavfilter/defaults.c
+++ b/libavfilter/defaults.c
@@ -239,11 +239,19 @@ void avfilter_set_common_channel_layouts(AVFilterContext *ctx, AVFilterFormats *
                        offsetof(AVFilterLink, out_chlayouts));
 }
 
+void avfilter_set_common_packing_formats(AVFilterContext *ctx, AVFilterFormats *formats)
+{
+    set_common_formats(ctx, formats, AVMEDIA_TYPE_AUDIO,
+                       offsetof(AVFilterLink, in_packing),
+                       offsetof(AVFilterLink, out_packing));
+}
+
 int avfilter_default_query_formats(AVFilterContext *ctx)
 {
     avfilter_set_common_pixel_formats(ctx, avfilter_all_formats(AVMEDIA_TYPE_VIDEO));
     avfilter_set_common_sample_formats(ctx, avfilter_all_formats(AVMEDIA_TYPE_AUDIO));
     avfilter_set_common_channel_layouts(ctx, avfilter_all_channel_layouts());
+    avfilter_set_common_packing_formats(ctx, avfilter_all_packing_formats());
 
     return 0;
 }
diff --git a/libavfilter/formats.c b/libavfilter/formats.c
index b6e30e7..214718b 100644
--- a/libavfilter/formats.c
+++ b/libavfilter/formats.c
@@ -173,6 +173,17 @@ AVFilterFormats *avfilter_all_channel_layouts(void)
     return avfilter_make_format64_list(chlayouts);
 }
 
+AVFilterFormats *avfilter_all_packing_formats(void)
+{
+    static int packing[] = {
+        AVFILTER_PACKED,
+        AVFILTER_PLANAR,
+        -1,
+    };
+
+    return avfilter_make_format_list(packing);
+}
+
 void avfilter_formats_ref(AVFilterFormats *f, AVFilterFormats **ref)
 {
     *ref = f;



More information about the ffmpeg-cvslog mailing list