aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMina Nagy Zaki <mnzaki@gmail.com>2011-06-28 08:56:19 +0300
committerStefano Sabatini <stefano.sabatini-lala@poste.it>2011-07-16 19:22:49 +0200
commitb57df29f95d1107a66315a6744c1c3e73293b2ee (patch)
treee3ec19ee11571deaef1a69c82deb31abf0ea0117
parent7bda0c9a82eb3c9a58e0c9f170ac47fe7289f6f7 (diff)
downloadffmpeg-b57df29f95d1107a66315a6744c1c3e73293b2ee.tar.gz
lavfi: add audio channel packing negotiation fields
Signed-off-by: Stefano Sabatini <stefano.sabatini-lala@poste.it>
-rw-r--r--doc/APIchanges8
-rw-r--r--libavfilter/avfilter.c3
-rw-r--r--libavfilter/avfilter.h18
-rw-r--r--libavfilter/avfiltergraph.c6
-rw-r--r--libavfilter/defaults.c8
-rw-r--r--libavfilter/formats.c11
6 files changed, 51 insertions, 3 deletions
diff --git a/doc/APIchanges b/doc/APIchanges
index e2b271892d..94a598798d 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 a57677c0e4..7003cdda5c 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 edcc726b87..d89ac26e9f 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 04768617de..8756e42bd4 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 b03816dd24..eef9fd1278 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 b6e30e7ab4..214718b779 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;