History

lavfi: add audio channel packing negotiation fields

Mina Nagy Zaki committed 15 years ago

Commit b57df291 parent 7bda0c96 files · +51 −3Browse files

Unified · Split

6 files
  1. doc/APIchanges +8 −0
  2. libavfilter/avfilter.c +3 −0
  3. libavfilter/avfilter.h +16 −2
  4. libavfilter/avfiltergraph.c +5 −1
  5. libavfilter/defaults.c +8 −0
  6. libavfilter/formats.c +11 −0
doc/APIchanges+8−0
@@ -13,6 +13,14 @@ libavutil: 2011-04-18 · 12 unmodified lines
1313
1414 API changes, most recent first:
1515
16+2011-07-16 - xxxxxx - lavfi 2.27.0
17+ Add audio packing negotiation fields and helper functions.
18+
19+ In particular, add AVFilterPacking enum, planar, in_packings and
20+ out_packings fields to AVFilterLink, and the functions:
21+ avfilter_set_common_packing_formats()
22+ avfilter_all_packing_formats()
23+
1624 2011-07-10 - a67c061 - lavf 53.3.0
1725 Add avformat_find_stream_info(), deprecate av_find_stream_info().
1826
libavfilter/avfilter.c+3−0
@@ -221,6 +221,9 @@ int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt, · 220 unmodified lines
221221 if (link->out_chlayouts)
222222 avfilter_formats_changeref(&link->out_chlayouts,
223223 &filt->outputs[filt_dstpad_idx]->out_chlayouts);
224+ if (link->out_packing)
225+ avfilter_formats_changeref(&link->out_packing,
226+ &filt->outputs[filt_dstpad_idx]->out_packing);
224227
225228 return 0;
226229 }
libavfilter/avfilter.h+16−2
@@ -29,7 +29,7 @@ · 28 unmodified lines
2929 #include "libavutil/rational.h"
3030
3131 #define LIBAVFILTER_VERSION_MAJOR 2
32−#define LIBAVFILTER_VERSION_MINOR 26
32+#define LIBAVFILTER_VERSION_MINOR 27
3333 #define LIBAVFILTER_VERSION_MICRO 0
3434
3535 #define LIBAVFILTER_VERSION_INT AV_VERSION_INT(LIBAVFILTER_VERSION_MAJOR, \
@@ -264,6 +264,11 @@ AVFilterFormats *avfilter_all_formats(enum AVMediaType type); · 228 unmodified lines
264264 */
265265 AVFilterFormats *avfilter_all_channel_layouts(void);
266266
267+/**
268+ * Return a list of all audio packing formats.
269+ */
270+AVFilterFormats *avfilter_all_packing_formats(void);
271+
267272 /**
268273 * Return a format list which contains the intersection of the formats of
269274 * a and b. Also, all the references of a, all the references of b, and
@@ -482,6 +487,7 @@ AVFilterBufferRef *avfilter_default_get_audio_buffer(AVFilterLink *link, int per · 212 unmodified lines
482487 void avfilter_set_common_pixel_formats(AVFilterContext *ctx, AVFilterFormats *formats);
483488 void avfilter_set_common_sample_formats(AVFilterContext *ctx, AVFilterFormats *formats);
484489 void avfilter_set_common_channel_layouts(AVFilterContext *ctx, AVFilterFormats *formats);
490+void avfilter_set_common_packing_formats(AVFilterContext *ctx, AVFilterFormats *formats);
485491
486492 /** Default handler for query_formats() */
487493 int avfilter_default_query_formats(AVFilterContext *ctx);
@@ -570,6 +576,11 @@ struct AVFilterContext { · 82 unmodified lines
570576 void *priv; ///< private data for use by the filter
571577 };
572578
579+enum AVFilterPacking {
580+ AVFILTER_PACKED = 0,
581+ AVFILTER_PLANAR,
582+};
583+
573584 /**
574585 * A link between two filters. This contains pointers to the source and
575586 * destination filters between which this link exists, and the indexes of
@@ -597,9 +608,10 @@ struct AVFilterLink { · 21 unmodified lines
597608 int w; ///< agreed upon image width
598609 int h; ///< agreed upon image height
599610 AVRational sample_aspect_ratio; ///< agreed upon sample aspect ratio
600− /* These two parameters apply only to audio */
611+ /* These parameters apply only to audio */
601612 int64_t channel_layout; ///< channel layout of current buffer (see libavutil/audioconvert.h)
602613 int64_t sample_rate; ///< samples per second
614+ int planar; ///< agreed upon packing mode of audio buffers. true if planar.
603615
604616 int format; ///< agreed upon media format
605617
@@ -615,6 +627,8 @@ struct AVFilterLink { · 9 unmodified lines
615627
616628 AVFilterFormats *in_chlayouts;
617629 AVFilterFormats *out_chlayouts;
630+ AVFilterFormats *in_packing;
631+ AVFilterFormats *out_packing;
618632
619633 /**
620634 * The buffer reference currently being sent across the link by the source
libavfilter/avfiltergraph.c+5−1
@@ -203,8 +203,12 @@ static void pick_format(AVFilterLink *link) · 202 unmodified lines
203203 link->channel_layout = link->in_chlayouts->formats[0];
204204 avfilter_formats_unref(&link->in_chlayouts);
205205 avfilter_formats_unref(&link->out_chlayouts);
206− }
207206
207+ link->in_packing->format_count = 1;
208+ link->planar = link->in_packing->formats[0] == AVFILTER_PLANAR;
209+ avfilter_formats_unref(&link->in_packing);
210+ avfilter_formats_unref(&link->out_packing);
211+ }
208212 }
209213
210214 static void pick_formats(AVFilterGraph *graph)
libavfilter/defaults.c+8−0
@@ -239,11 +239,19 @@ void avfilter_set_common_channel_layouts(AVFilterContext *ctx, AVFilterFormats * · 238 unmodified lines
239239 offsetof(AVFilterLink, out_chlayouts));
240240 }
241241
242+void avfilter_set_common_packing_formats(AVFilterContext *ctx, AVFilterFormats *formats)
243+{
244+ set_common_formats(ctx, formats, AVMEDIA_TYPE_AUDIO,
245+ offsetof(AVFilterLink, in_packing),
246+ offsetof(AVFilterLink, out_packing));
247+}
248+
242249 int avfilter_default_query_formats(AVFilterContext *ctx)
243250 {
244251 avfilter_set_common_pixel_formats(ctx, avfilter_all_formats(AVMEDIA_TYPE_VIDEO));
245252 avfilter_set_common_sample_formats(ctx, avfilter_all_formats(AVMEDIA_TYPE_AUDIO));
246253 avfilter_set_common_channel_layouts(ctx, avfilter_all_channel_layouts());
254+ avfilter_set_common_packing_formats(ctx, avfilter_all_packing_formats());
247255
248256 return 0;
249257 }
libavfilter/formats.c+11−0
@@ -173,6 +173,17 @@ AVFilterFormats *avfilter_all_channel_layouts(void) · 172 unmodified lines
173173 return avfilter_make_format64_list(chlayouts);
174174 }
175175
176+AVFilterFormats *avfilter_all_packing_formats(void)
177+{
178+ static int packing[] = {
179+ AVFILTER_PACKED,
180+ AVFILTER_PLANAR,
181+ -1,
182+ };
183+
184+ return avfilter_make_format_list(packing);
185+}
186+
176187 void avfilter_formats_ref(AVFilterFormats *f, AVFilterFormats **ref)
177188 {
178189 *ref = f;

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t