The planar/packed switch and the packing_formats list is no longer
required, since the planar/packed information is now stored in the sample
format enum.
This is technically a major API break, possibly it should be not too
painful as we marked the audio filtering API as unstable.
... | ... |
@@ -88,7 +88,6 @@ static int init_filters(const char *filters_descr) |
88 | 88 |
AVFilterInOut *outputs = avfilter_inout_alloc(); |
89 | 89 |
AVFilterInOut *inputs = avfilter_inout_alloc(); |
90 | 90 |
const enum AVSampleFormat sample_fmts[] = { AV_SAMPLE_FMT_S16, -1 }; |
91 |
- const int packing_fmts[] = { AVFILTER_PACKED, -1 }; |
|
92 | 91 |
const int64_t *chlayouts = avfilter_all_channel_layouts; |
93 | 92 |
AVABufferSinkParams *abuffersink_params; |
94 | 93 |
const AVFilterLink *outlink; |
... | ... |
@@ -98,7 +97,7 @@ static int init_filters(const char *filters_descr) |
98 | 98 |
/* buffer audio source: the decoded frames from the decoder will be inserted here. */ |
99 | 99 |
if (!dec_ctx->channel_layout) |
100 | 100 |
dec_ctx->channel_layout = av_get_default_channel_layout(dec_ctx->channels); |
101 |
- snprintf(args, sizeof(args), "%d:%d:0x%"PRIx64":packed", |
|
101 |
+ snprintf(args, sizeof(args), "%d:%d:0x%"PRIx64, |
|
102 | 102 |
dec_ctx->sample_rate, dec_ctx->sample_fmt, dec_ctx->channel_layout); |
103 | 103 |
ret = avfilter_graph_create_filter(&buffersrc_ctx, abuffersrc, "in", |
104 | 104 |
args, NULL, filter_graph); |
... | ... |
@@ -111,7 +110,6 @@ static int init_filters(const char *filters_descr) |
111 | 111 |
abuffersink_params = av_abuffersink_params_alloc(); |
112 | 112 |
abuffersink_params->sample_fmts = sample_fmts; |
113 | 113 |
abuffersink_params->channel_layouts = chlayouts; |
114 |
- abuffersink_params->packing_fmts = packing_fmts; |
|
115 | 114 |
ret = avfilter_graph_create_filter(&buffersink_ctx, abuffersink, "out", |
116 | 115 |
NULL, abuffersink_params, filter_graph); |
117 | 116 |
av_free(abuffersink_params); |
... | ... |
@@ -15,7 +15,8 @@ Format negotiation |
15 | 15 |
the list supported formats. |
16 | 16 |
|
17 | 17 |
For video links, that means pixel format. For audio links, that means |
18 |
- channel layout, sample format and sample packing. |
|
18 |
+ channel layout, and sample format (the sample packing is implied by the |
|
19 |
+ sample format). |
|
19 | 20 |
|
20 | 21 |
The lists are not just lists, they are references to shared objects. When |
21 | 22 |
the negotiation mechanism computes the intersection of the formats |
... | ... |
@@ -146,7 +146,7 @@ Convert the input audio to one of the specified formats. The framework will |
146 | 146 |
negotiate the most appropriate format to minimize conversions. |
147 | 147 |
|
148 | 148 |
The filter accepts three lists of formats, separated by ":", in the form: |
149 |
-"@var{sample_formats}:@var{channel_layouts}:@var{packing_formats}". |
|
149 |
+"@var{sample_formats}:@var{channel_layouts}". |
|
150 | 150 |
|
151 | 151 |
Elements in each list are separated by "," which has to be escaped in the |
152 | 152 |
filtergraph specification. |
... | ... |
@@ -156,9 +156,9 @@ supported formats. |
156 | 156 |
|
157 | 157 |
Some examples follow: |
158 | 158 |
@example |
159 |
-aformat=u8\\,s16:mono:packed |
|
159 |
+aformat=u8\\,s16:mono |
|
160 | 160 |
|
161 |
-aformat=s16:mono\\,stereo:all |
|
161 |
+aformat=s16:mono\\,stereo |
|
162 | 162 |
@end example |
163 | 163 |
|
164 | 164 |
@section amerge |
... | ... |
@@ -184,7 +184,7 @@ On the other hand, if both input are in stereo, the output channels will be |
184 | 184 |
in the default order: a1, a2, b1, b2, and the channel layout will be |
185 | 185 |
arbitrarily set to 4.0, which may or may not be the expected value. |
186 | 186 |
|
187 |
-Both inputs must have the same sample rate, format and packing. |
|
187 |
+Both inputs must have the same sample rate, and format. |
|
188 | 188 |
|
189 | 189 |
If inputs do not have the same duration, the output will stop with the |
190 | 190 |
shortest. |
... | ... |
@@ -293,9 +293,6 @@ number of samples (per each channel) contained in the filtered frame |
293 | 293 |
@item rate |
294 | 294 |
sample rate for the audio frame |
295 | 295 |
|
296 |
-@item planar |
|
297 |
-if the packing format is planar, 0 if packed |
|
298 |
- |
|
299 | 296 |
@item checksum |
300 | 297 |
Adler-32 checksum (printed in hexadecimal) of all the planes of the input frame |
301 | 298 |
|
... | ... |
@@ -566,7 +563,7 @@ This source is mainly intended for a programmatic use, in particular |
566 | 566 |
through the interface defined in @file{libavfilter/asrc_abuffer.h}. |
567 | 567 |
|
568 | 568 |
It accepts the following mandatory parameters: |
569 |
-@var{sample_rate}:@var{sample_fmt}:@var{channel_layout}:@var{packing} |
|
569 |
+@var{sample_rate}:@var{sample_fmt}:@var{channel_layout} |
|
570 | 570 |
|
571 | 571 |
@table @option |
572 | 572 |
|
... | ... |
@@ -584,23 +581,19 @@ Either a channel layout name from channel_layout_map in |
584 | 584 |
@file{libavutil/audioconvert.c} or its corresponding integer representation |
585 | 585 |
from the AV_CH_LAYOUT_* macros in @file{libavutil/audioconvert.h} |
586 | 586 |
|
587 |
-@item packing |
|
588 |
-Either "packed" or "planar", or their integer representation: 0 or 1 |
|
589 |
-respectively. |
|
590 |
- |
|
591 | 587 |
@end table |
592 | 588 |
|
593 | 589 |
For example: |
594 | 590 |
@example |
595 |
-abuffer=44100:s16:stereo:planar |
|
591 |
+abuffer=44100:s16p:stereo |
|
596 | 592 |
@end example |
597 | 593 |
|
598 | 594 |
will instruct the source to accept planar 16bit signed stereo at 44100Hz. |
599 |
-Since the sample format with name "s16" corresponds to the number |
|
600 |
-1 and the "stereo" channel layout corresponds to the value 0x3, this is |
|
595 |
+Since the sample format with name "s16p" corresponds to the number |
|
596 |
+6 and the "stereo" channel layout corresponds to the value 0x3, this is |
|
601 | 597 |
equivalent to: |
602 | 598 |
@example |
603 |
-abuffer=44100:1:0x3:1 |
|
599 |
+abuffer=44100:6:0x3 |
|
604 | 600 |
@end example |
605 | 601 |
|
606 | 602 |
@section aevalsrc |
... | ... |
@@ -211,11 +211,9 @@ av_cold static int lavfi_read_header(AVFormatContext *avctx) |
211 | 211 |
AV_SAMPLE_FMT_S32, |
212 | 212 |
AV_SAMPLE_FMT_FLT, |
213 | 213 |
AV_SAMPLE_FMT_DBL, -1 }; |
214 |
- const int packing_fmts[] = { AVFILTER_PACKED, -1 }; |
|
215 | 214 |
const int64_t *chlayouts = avfilter_all_channel_layouts; |
216 | 215 |
AVABufferSinkParams *abuffersink_params = av_abuffersink_params_alloc(); |
217 | 216 |
abuffersink_params->sample_fmts = sample_fmts; |
218 |
- abuffersink_params->packing_fmts = packing_fmts; |
|
219 | 217 |
abuffersink_params->channel_layouts = chlayouts; |
220 | 218 |
|
221 | 219 |
ret = avfilter_graph_create_filter(&sink, abuffersink, |
... | ... |
@@ -73,7 +73,6 @@ static int query_formats(AVFilterContext *ctx) |
73 | 73 |
AConvertContext *aconvert = ctx->priv; |
74 | 74 |
AVFilterLink *inlink = ctx->inputs[0]; |
75 | 75 |
AVFilterLink *outlink = ctx->outputs[0]; |
76 |
- int out_packing = av_sample_fmt_is_planar(aconvert->out_sample_fmt); |
|
77 | 76 |
AVFilterChannelLayouts *layouts; |
78 | 77 |
|
79 | 78 |
avfilter_formats_ref(avfilter_make_all_formats(AVMEDIA_TYPE_AUDIO), |
... | ... |
@@ -96,12 +95,6 @@ static int query_formats(AVFilterContext *ctx) |
96 | 96 |
ff_channel_layouts_ref(ff_all_channel_layouts(), |
97 | 97 |
&outlink->in_channel_layouts); |
98 | 98 |
|
99 |
- avfilter_formats_ref(avfilter_make_all_packing_formats(), |
|
100 |
- &inlink->out_packing); |
|
101 |
- formats = NULL; |
|
102 |
- avfilter_add_format(&formats, out_packing); |
|
103 |
- avfilter_formats_ref(formats, &outlink->in_packing); |
|
104 |
- |
|
105 | 99 |
return 0; |
106 | 100 |
} |
107 | 101 |
|
... | ... |
@@ -134,9 +127,9 @@ static int config_output(AVFilterLink *outlink) |
134 | 134 |
av_get_channel_layout_string(buf2, sizeof(buf2), |
135 | 135 |
-1, outlink->channel_layout); |
136 | 136 |
av_log(ctx, AV_LOG_INFO, |
137 |
- "fmt:%s cl:%s planar:%i -> fmt:%s cl:%s planar:%i\n", |
|
138 |
- av_get_sample_fmt_name(inlink ->format), buf1, inlink ->planar, |
|
139 |
- av_get_sample_fmt_name(outlink->format), buf2, outlink->planar); |
|
137 |
+ "fmt:%s cl:%s -> fmt:%s cl:%s\n", |
|
138 |
+ av_get_sample_fmt_name(inlink ->format), buf1, |
|
139 |
+ av_get_sample_fmt_name(outlink->format), buf2); |
|
140 | 140 |
|
141 | 141 |
return 0; |
142 | 142 |
} |
... | ... |
@@ -153,7 +146,6 @@ static void filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamplesref |
153 | 153 |
|
154 | 154 |
avfilter_copy_buffer_ref_props(outsamplesref, insamplesref); |
155 | 155 |
outsamplesref->audio->channel_layout = outlink->channel_layout; |
156 |
- outsamplesref->audio->planar = outlink->planar; |
|
157 | 156 |
|
158 | 157 |
ff_filter_samples(outlink, outsamplesref); |
159 | 158 |
avfilter_unref_buffer(insamplesref); |
... | ... |
@@ -161,7 +153,7 @@ static void filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamplesref |
161 | 161 |
|
162 | 162 |
AVFilter avfilter_af_aconvert = { |
163 | 163 |
.name = "aconvert", |
164 |
- .description = NULL_IF_CONFIG_SMALL("Convert the input audio to sample_fmt:channel_layout:packed_fmt."), |
|
164 |
+ .description = NULL_IF_CONFIG_SMALL("Convert the input audio to sample_fmt:channel_layout."), |
|
165 | 165 |
.priv_size = sizeof(AConvertContext), |
166 | 166 |
.init = init, |
167 | 167 |
.uninit = uninit, |
... | ... |
@@ -54,7 +54,6 @@ static int query_formats(AVFilterContext *ctx) |
54 | 54 |
{ |
55 | 55 |
AMergeContext *am = ctx->priv; |
56 | 56 |
int64_t inlayout[2], outlayout; |
57 |
- const int packing_fmts[] = { AVFILTER_PACKED, -1 }; |
|
58 | 57 |
AVFilterFormats *formats; |
59 | 58 |
AVFilterChannelLayouts *layouts; |
60 | 59 |
int i; |
... | ... |
@@ -97,10 +96,8 @@ static int query_formats(AVFilterContext *ctx) |
97 | 97 |
if ((inlayout[i] >> c) & 1) |
98 | 98 |
*(route[i]++) = out_ch_number++; |
99 | 99 |
} |
100 |
- formats = avfilter_make_all_formats(AVMEDIA_TYPE_AUDIO); |
|
100 |
+ formats = avfilter_make_format_list(ff_packed_sample_fmts); |
|
101 | 101 |
avfilter_set_common_sample_formats(ctx, formats); |
102 |
- formats = avfilter_make_format_list(packing_fmts); |
|
103 |
- avfilter_set_common_packing_formats(ctx, formats); |
|
104 | 102 |
for (i = 0; i < 2; i++) { |
105 | 103 |
layouts = NULL; |
106 | 104 |
ff_add_channel_layout(&layouts, inlayout[i]); |
... | ... |
@@ -222,7 +219,6 @@ static void filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples) |
222 | 222 |
avfilter_copy_buffer_ref_props(outbuf, *inbuf[0]); |
223 | 223 |
outbuf->audio->nb_samples = nb_samples; |
224 | 224 |
outbuf->audio->channel_layout = outlink->channel_layout; |
225 |
- outbuf->audio->planar = outlink->planar; |
|
226 | 225 |
|
227 | 226 |
while (nb_samples) { |
228 | 227 |
ns = nb_samples; |
... | ... |
@@ -50,7 +50,7 @@ static void filter_samples(AVFilterLink *inlink, AVFilterBufferRef *samplesref) |
50 | 50 |
int linesize = |
51 | 51 |
samplesref->audio->nb_samples * |
52 | 52 |
av_get_bytes_per_sample(samplesref->format); |
53 |
- if (!samplesref->audio->planar) /* packed layout */ |
|
53 |
+ if (!av_sample_fmt_is_planar(samplesref->format)) |
|
54 | 54 |
linesize *= av_get_channel_layout_nb_channels(samplesref->audio->channel_layout); |
55 | 55 |
|
56 | 56 |
for (plane = 0; samplesref->data[plane] && plane < 8; plane++) { |
... | ... |
@@ -66,7 +66,7 @@ static void filter_samples(AVFilterLink *inlink, AVFilterBufferRef *samplesref) |
66 | 66 |
|
67 | 67 |
av_log(ctx, AV_LOG_INFO, |
68 | 68 |
"n:%d pts:%s pts_time:%s pos:%"PRId64" " |
69 |
- "fmt:%s chlayout:%s nb_samples:%d rate:%d planar:%d " |
|
69 |
+ "fmt:%s chlayout:%s nb_samples:%d rate:%d " |
|
70 | 70 |
"checksum:%08X plane_checksum[%08X", |
71 | 71 |
showinfo->frame, |
72 | 72 |
av_ts2str(samplesref->pts), av_ts2timestr(samplesref->pts, &inlink->time_base), |
... | ... |
@@ -75,7 +75,6 @@ static void filter_samples(AVFilterLink *inlink, AVFilterBufferRef *samplesref) |
75 | 75 |
chlayout_str, |
76 | 76 |
samplesref->audio->nb_samples, |
77 | 77 |
samplesref->audio->sample_rate, |
78 |
- samplesref->audio->planar, |
|
79 | 78 |
checksum, |
80 | 79 |
plane_checksum[0]); |
81 | 80 |
|
... | ... |
@@ -87,9 +87,6 @@ static int query_formats(AVFilterContext *ctx) |
87 | 87 |
formats = ctx->inputs[i]->in_formats; |
88 | 88 |
avfilter_formats_ref(formats, &ctx->inputs[i]->out_formats); |
89 | 89 |
avfilter_formats_ref(formats, &ctx->outputs[i]->in_formats); |
90 |
- formats = ctx->inputs[i]->in_packing; |
|
91 |
- avfilter_formats_ref(formats, &ctx->inputs[i]->out_packing); |
|
92 |
- avfilter_formats_ref(formats, &ctx->outputs[i]->in_packing); |
|
93 | 90 |
layouts = ctx->inputs[i]->in_channel_layouts; |
94 | 91 |
ff_channel_layouts_ref(layouts, &ctx->inputs[i]->out_channel_layouts); |
95 | 92 |
ff_channel_layouts_ref(layouts, &ctx->outputs[i]->in_channel_layouts); |
... | ... |
@@ -86,9 +86,6 @@ static int query_formats(AVFilterContext *ctx) |
86 | 86 |
avfilter_set_common_sample_formats(ctx, formats); |
87 | 87 |
ff_add_channel_layout(&layout, AV_CH_LAYOUT_STEREO); |
88 | 88 |
ff_set_common_channel_layouts(ctx, layout); |
89 |
- formats = NULL; |
|
90 |
- avfilter_add_format(&formats, AVFILTER_PACKED); |
|
91 |
- avfilter_set_common_packing_formats(ctx, formats); |
|
92 | 89 |
ff_set_common_samplerates(ctx, avfilter_make_format_list(sample_rates)); |
93 | 90 |
|
94 | 91 |
return 0; |
... | ... |
@@ -218,7 +218,6 @@ static int query_formats(AVFilterContext *ctx) |
218 | 218 |
pan->pure_gains = are_gains_pure(pan); |
219 | 219 |
/* libswr supports any sample and packing formats */ |
220 | 220 |
avfilter_set_common_sample_formats(ctx, avfilter_make_all_formats(AVMEDIA_TYPE_AUDIO)); |
221 |
- avfilter_set_common_packing_formats(ctx, avfilter_make_all_packing_formats()); |
|
222 | 221 |
|
223 | 222 |
// inlink supports any channel layout |
224 | 223 |
layouts = ff_all_channel_layouts(); |
... | ... |
@@ -348,7 +347,6 @@ static void filter_samples(AVFilterLink *inlink, AVFilterBufferRef *insamples) |
348 | 348 |
swr_convert(pan->swr, outsamples->data, n, (void *)insamples->data, n); |
349 | 349 |
avfilter_copy_buffer_ref_props(outsamples, insamples); |
350 | 350 |
outsamples->audio->channel_layout = outlink->channel_layout; |
351 |
- outsamples->audio->planar = outlink->planar; |
|
352 | 351 |
|
353 | 352 |
ff_filter_samples(outlink, outsamples); |
354 | 353 |
avfilter_unref_buffer(insamples); |
... | ... |
@@ -136,7 +136,6 @@ static int query_formats(AVFilterContext *ctx) |
136 | 136 |
AV_SAMPLE_FMT_DBL, |
137 | 137 |
AV_SAMPLE_FMT_NONE |
138 | 138 |
}; |
139 |
- int packing_fmts[] = { AVFILTER_PACKED, -1 }; |
|
140 | 139 |
|
141 | 140 |
layouts = ff_all_channel_layouts(); |
142 | 141 |
if (!layouts) |
... | ... |
@@ -148,11 +147,6 @@ static int query_formats(AVFilterContext *ctx) |
148 | 148 |
return AVERROR(ENOMEM); |
149 | 149 |
avfilter_set_common_sample_formats(ctx, formats); |
150 | 150 |
|
151 |
- formats = avfilter_make_format_list(packing_fmts); |
|
152 |
- if (!formats) |
|
153 |
- return AVERROR(ENOMEM); |
|
154 |
- avfilter_set_common_packing_formats(ctx, formats); |
|
155 |
- |
|
156 | 151 |
formats = ff_all_samplerates(); |
157 | 152 |
if (!formats) |
158 | 153 |
return AVERROR(ENOMEM); |
... | ... |
@@ -91,7 +91,6 @@ static int query_formats(AVFilterContext *ctx) |
91 | 91 |
AV_SAMPLE_FMT_DBL, |
92 | 92 |
AV_SAMPLE_FMT_NONE |
93 | 93 |
}; |
94 |
- int packing_fmts[] = { AVFILTER_PACKED, -1 }; |
|
95 | 94 |
|
96 | 95 |
layouts = ff_all_channel_layouts(); |
97 | 96 |
if (!layouts) |
... | ... |
@@ -103,11 +102,6 @@ static int query_formats(AVFilterContext *ctx) |
103 | 103 |
return AVERROR(ENOMEM); |
104 | 104 |
avfilter_set_common_sample_formats(ctx, formats); |
105 | 105 |
|
106 |
- formats = avfilter_make_format_list(packing_fmts); |
|
107 |
- if (!formats) |
|
108 |
- return AVERROR(ENOMEM); |
|
109 |
- avfilter_set_common_packing_formats(ctx, formats); |
|
110 |
- |
|
111 | 106 |
formats = ff_all_samplerates(); |
112 | 107 |
if (!formats) |
113 | 108 |
return AVERROR(ENOMEM); |
... | ... |
@@ -187,11 +187,9 @@ static int query_formats(AVFilterContext *ctx) |
187 | 187 |
EvalContext *eval = ctx->priv; |
188 | 188 |
enum AVSampleFormat sample_fmts[] = { AV_SAMPLE_FMT_DBL, AV_SAMPLE_FMT_NONE }; |
189 | 189 |
int64_t chlayouts[] = { eval->chlayout, -1 }; |
190 |
- int packing_fmts[] = { AVFILTER_PLANAR, -1 }; |
|
191 | 190 |
|
192 | 191 |
avfilter_set_common_sample_formats (ctx, avfilter_make_format_list(sample_fmts)); |
193 | 192 |
ff_set_common_channel_layouts(ctx, avfilter_make_format64_list(chlayouts)); |
194 |
- avfilter_set_common_packing_formats(ctx, avfilter_make_format_list(packing_fmts)); |
|
195 | 193 |
|
196 | 194 |
return 0; |
197 | 195 |
} |
... | ... |
@@ -100,9 +100,9 @@ AVFilterBufferRef* avfilter_get_audio_buffer_ref_from_arrays(uint8_t **data, |
100 | 100 |
|
101 | 101 |
samplesref->audio->nb_samples = nb_samples; |
102 | 102 |
samplesref->audio->channel_layout = channel_layout; |
103 |
- samplesref->audio->planar = av_sample_fmt_is_planar(sample_fmt); |
|
104 | 103 |
|
105 |
- planes = samplesref->audio->planar ? av_get_channel_layout_nb_channels(channel_layout) : 1; |
|
104 |
+ planes = av_sample_fmt_is_planar(sample_fmt) ? |
|
105 |
+ av_get_channel_layout_nb_channels(channel_layout) : 1; |
|
106 | 106 |
|
107 | 107 |
/* make sure the buffer gets read permission or it's useless for output */ |
108 | 108 |
samplesref->perms = perms | AV_PERM_READ; |
... | ... |
@@ -24,6 +24,23 @@ |
24 | 24 |
|
25 | 25 |
#include "avfilter.h" |
26 | 26 |
|
27 |
+static const enum AVSampleFormat ff_packed_sample_fmts[] = { |
|
28 |
+ AV_SAMPLE_FMT_U8, |
|
29 |
+ AV_SAMPLE_FMT_S16, |
|
30 |
+ AV_SAMPLE_FMT_S32, |
|
31 |
+ AV_SAMPLE_FMT_FLT, |
|
32 |
+ AV_SAMPLE_FMT_DBL, |
|
33 |
+ AV_SAMPLE_FMT_NONE |
|
34 |
+}; |
|
35 |
+ |
|
36 |
+static const enum AVSampleFormat ff_planar_sample_fmts[] = { |
|
37 |
+ AV_SAMPLE_FMT_U8P, |
|
38 |
+ AV_SAMPLE_FMT_S16P, |
|
39 |
+ AV_SAMPLE_FMT_S32P, |
|
40 |
+ AV_SAMPLE_FMT_FLTP, |
|
41 |
+ AV_SAMPLE_FMT_DBLP, |
|
42 |
+ AV_SAMPLE_FMT_NONE |
|
43 |
+}; |
|
27 | 44 |
|
28 | 45 |
/** default handler for get_audio_buffer() for audio inputs */ |
29 | 46 |
AVFilterBufferRef *ff_default_get_audio_buffer(AVFilterLink *link, int perms, |
... | ... |
@@ -148,9 +148,6 @@ int avfilter_insert_filter(AVFilterLink *link, AVFilterContext *filt, |
148 | 148 |
if (link->out_channel_layouts) |
149 | 149 |
ff_channel_layouts_changeref(&link->out_channel_layouts, |
150 | 150 |
&filt->outputs[filt_dstpad_idx]->out_channel_layouts); |
151 |
- if (link->out_packing) |
|
152 |
- avfilter_formats_changeref(&link->out_packing, |
|
153 |
- &filt->outputs[filt_dstpad_idx]->out_packing); |
|
154 | 151 |
if (link->out_samplerates) |
155 | 152 |
avfilter_formats_changeref(&link->out_samplerates, |
156 | 153 |
&filt->outputs[filt_dstpad_idx]->out_samplerates); |
... | ... |
@@ -121,7 +121,9 @@ typedef struct AVFilterBufferRefAudioProps { |
121 | 121 |
uint64_t channel_layout; ///< channel layout of audio buffer |
122 | 122 |
int nb_samples; ///< number of audio samples per channel |
123 | 123 |
int sample_rate; ///< audio buffer sample rate |
124 |
+#if FF_API_PACKING |
|
124 | 125 |
int planar; ///< audio buffer - planar or packed |
126 |
+#endif |
|
125 | 127 |
} AVFilterBufferRefAudioProps; |
126 | 128 |
|
127 | 129 |
/** |
... | ... |
@@ -303,10 +305,12 @@ AVFilterFormats *avfilter_make_all_formats(enum AVMediaType type); |
303 | 303 |
*/ |
304 | 304 |
extern const int64_t avfilter_all_channel_layouts[]; |
305 | 305 |
|
306 |
+#if FF_API_PACKING |
|
306 | 307 |
/** |
307 | 308 |
* Return a list of all audio packing formats. |
308 | 309 |
*/ |
309 | 310 |
AVFilterFormats *avfilter_make_all_packing_formats(void); |
311 |
+#endif |
|
310 | 312 |
|
311 | 313 |
/** |
312 | 314 |
* Return a format list which contains the intersection of the formats of |
... | ... |
@@ -519,7 +523,9 @@ void avfilter_set_common_formats(AVFilterContext *ctx, AVFilterFormats *formats) |
519 | 519 |
void avfilter_set_common_pixel_formats(AVFilterContext *ctx, AVFilterFormats *formats); |
520 | 520 |
void avfilter_set_common_sample_formats(AVFilterContext *ctx, AVFilterFormats *formats); |
521 | 521 |
void avfilter_set_common_channel_layouts(AVFilterContext *ctx, AVFilterFormats *formats); |
522 |
+#if FF_API_PACKING |
|
522 | 523 |
void avfilter_set_common_packing_formats(AVFilterContext *ctx, AVFilterFormats *formats); |
524 |
+#endif |
|
523 | 525 |
|
524 | 526 |
/** Default handler for query_formats() */ |
525 | 527 |
int avfilter_default_query_formats(AVFilterContext *ctx); |
... | ... |
@@ -616,10 +622,12 @@ struct AVFilterContext { |
616 | 616 |
struct AVFilterCommand *command_queue; |
617 | 617 |
}; |
618 | 618 |
|
619 |
+#if FF_API_PACKING |
|
619 | 620 |
enum AVFilterPacking { |
620 | 621 |
AVFILTER_PACKED = 0, |
621 | 622 |
AVFILTER_PLANAR, |
622 | 623 |
}; |
624 |
+#endif |
|
623 | 625 |
|
624 | 626 |
/** |
625 | 627 |
* A link between two filters. This contains pointers to the source and |
... | ... |
@@ -655,7 +663,9 @@ struct AVFilterLink { |
655 | 655 |
#else |
656 | 656 |
int sample_rate; ///< samples per second |
657 | 657 |
#endif |
658 |
+#if FF_API_PACKING |
|
658 | 659 |
int planar; ///< agreed upon packing mode of audio buffers. true if planar. |
660 |
+#endif |
|
659 | 661 |
|
660 | 662 |
int format; ///< agreed upon media format |
661 | 663 |
|
... | ... |
@@ -669,8 +679,10 @@ struct AVFilterLink { |
669 | 669 |
AVFilterFormats *in_formats; |
670 | 670 |
AVFilterFormats *out_formats; |
671 | 671 |
|
672 |
+#if FF_API_PACKING |
|
672 | 673 |
AVFilterFormats *in_packing; |
673 | 674 |
AVFilterFormats *out_packing; |
675 |
+#endif |
|
674 | 676 |
|
675 | 677 |
/** |
676 | 678 |
* The buffer reference currently being sent across the link by the source |
... | ... |
@@ -200,14 +200,12 @@ static int insert_conv_filter(AVFilterGraph *graph, AVFilterLink *link, |
200 | 200 |
|
201 | 201 |
if (link->type == AVMEDIA_TYPE_AUDIO && |
202 | 202 |
(((link = filt_ctx-> inputs[0]) && |
203 |
- (!ff_merge_channel_layouts(link->in_channel_layouts, link->out_channel_layouts) || |
|
204 |
- !avfilter_merge_formats(link->in_packing, link->out_packing))) || |
|
203 |
+ !ff_merge_channel_layouts(link->in_channel_layouts, link->out_channel_layouts)) || |
|
205 | 204 |
((link = filt_ctx->outputs[0]) && |
206 |
- (!ff_merge_channel_layouts(link->in_channel_layouts, link->out_channel_layouts) || |
|
207 |
- !avfilter_merge_formats(link->in_packing, link->out_packing)))) |
|
205 |
+ !ff_merge_channel_layouts(link->in_channel_layouts, link->out_channel_layouts))) |
|
208 | 206 |
) { |
209 | 207 |
av_log(NULL, AV_LOG_ERROR, |
210 |
- "Impossible to convert between the channel layouts/packing formats supported by the filter " |
|
208 |
+ "Impossible to convert between the channel layouts formats supported by the filter " |
|
211 | 209 |
"'%s' and the filter '%s'\n", link->src->name, link->dst->name); |
212 | 210 |
return AVERROR(EINVAL); |
213 | 211 |
} |
... | ... |
@@ -219,7 +217,7 @@ static int query_formats(AVFilterGraph *graph, AVClass *log_ctx) |
219 | 219 |
{ |
220 | 220 |
int i, j, ret; |
221 | 221 |
char filt_args[128]; |
222 |
- AVFilterFormats *formats, *packing; |
|
222 |
+ AVFilterFormats *formats; |
|
223 | 223 |
AVFilterChannelLayouts *chlayouts; |
224 | 224 |
AVFilterFormats *samplerates; |
225 | 225 |
int scaler_count = 0, resampler_count = 0; |
... | ... |
@@ -254,8 +252,7 @@ static int query_formats(AVFilterGraph *graph, AVClass *log_ctx) |
254 | 254 |
return ret; |
255 | 255 |
} |
256 | 256 |
else if (link->type == AVMEDIA_TYPE_AUDIO) { |
257 |
- if (!link->in_channel_layouts || !link->out_channel_layouts || |
|
258 |
- !link->in_packing || !link->out_packing) |
|
257 |
+ if (!link->in_channel_layouts || !link->out_channel_layouts) |
|
259 | 258 |
return AVERROR(EINVAL); |
260 | 259 |
|
261 | 260 |
/* Merge all three list before checking: that way, in all |
... | ... |
@@ -264,9 +261,8 @@ static int query_formats(AVFilterGraph *graph, AVClass *log_ctx) |
264 | 264 |
formats = avfilter_merge_formats(link->in_formats, link->out_formats); |
265 | 265 |
chlayouts = ff_merge_channel_layouts(link->in_channel_layouts , link->out_channel_layouts); |
266 | 266 |
samplerates = ff_merge_samplerates (link->in_samplerates, link->out_samplerates); |
267 |
- packing = avfilter_merge_formats(link->in_packing, link->out_packing); |
|
268 | 267 |
|
269 |
- if (!formats || !chlayouts || !packing || !samplerates) |
|
268 |
+ if (!formats || !chlayouts || !samplerates) |
|
270 | 269 |
if (ret = insert_conv_filter(graph, link, "aconvert", NULL)) |
271 | 270 |
return ret; |
272 | 271 |
#else |
... | ... |
@@ -46,7 +46,9 @@ AVBufferSinkParams *av_buffersink_params_alloc(void); |
46 | 46 |
typedef struct { |
47 | 47 |
const enum AVSampleFormat *sample_fmts; ///< list of allowed sample formats, terminated by AV_SAMPLE_FMT_NONE |
48 | 48 |
const int64_t *channel_layouts; ///< list of allowed channel layouts, terminated by -1 |
49 |
+#if FF_API_PACKING |
|
49 | 50 |
const int *packing_fmts; ///< list of allowed packing formats |
51 |
+#endif |
|
50 | 52 |
} AVABufferSinkParams; |
51 | 53 |
|
52 | 54 |
/** |
... | ... |
@@ -70,9 +70,11 @@ void avfilter_set_common_channel_layouts(AVFilterContext *ctx, AVFilterFormats * |
70 | 70 |
offsetof(AVFilterLink, out_channel_layouts)); |
71 | 71 |
} |
72 | 72 |
|
73 |
+#if FF_API_PACKING |
|
73 | 74 |
void avfilter_set_common_packing_formats(AVFilterContext *ctx, AVFilterFormats *formats) |
74 | 75 |
{ |
75 | 76 |
set_common_formats(ctx, formats, AVMEDIA_TYPE_AUDIO, |
76 | 77 |
offsetof(AVFilterLink, in_packing), |
77 | 78 |
offsetof(AVFilterLink, out_packing)); |
78 | 79 |
} |
80 |
+#endif |
... | ... |
@@ -289,6 +289,7 @@ const int64_t avfilter_all_channel_layouts[] = { |
289 | 289 |
// return avfilter_make_format64_list(avfilter_all_channel_layouts); |
290 | 290 |
// } |
291 | 291 |
|
292 |
+#if FF_API_PACKING |
|
292 | 293 |
AVFilterFormats *avfilter_make_all_packing_formats(void) |
293 | 294 |
{ |
294 | 295 |
static const int packing[] = { |
... | ... |
@@ -299,6 +300,7 @@ AVFilterFormats *avfilter_make_all_packing_formats(void) |
299 | 299 |
|
300 | 300 |
return avfilter_make_format_list(packing); |
301 | 301 |
} |
302 |
+#endif |
|
302 | 303 |
|
303 | 304 |
AVFilterFormats *ff_all_samplerates(void) |
304 | 305 |
{ |
... | ... |
@@ -518,23 +520,6 @@ int ff_parse_channel_layout(int64_t *ret, const char *arg, void *log_ctx) |
518 | 518 |
return 0; |
519 | 519 |
} |
520 | 520 |
|
521 |
-int ff_parse_packing_format(int *ret, const char *arg, void *log_ctx) |
|
522 |
-{ |
|
523 |
- char *tail; |
|
524 |
- int planar = strtol(arg, &tail, 10); |
|
525 |
- if (*tail) { |
|
526 |
- planar = !strcmp(arg, "packed") ? 0: |
|
527 |
- !strcmp(arg, "planar") ? 1: -1; |
|
528 |
- } |
|
529 |
- |
|
530 |
- if (planar != 0 && planar != 1) { |
|
531 |
- av_log(log_ctx, AV_LOG_ERROR, "Invalid packing format '%s'\n", arg); |
|
532 |
- return AVERROR(EINVAL); |
|
533 |
- } |
|
534 |
- *ret = planar; |
|
535 |
- return 0; |
|
536 |
-} |
|
537 |
- |
|
538 | 521 |
#ifdef TEST |
539 | 522 |
|
540 | 523 |
#undef printf |
... | ... |
@@ -46,9 +46,8 @@ static int print_link_prop(AVBPrint *buf, AVFilterLink *link) |
46 | 46 |
av_get_channel_layout_string(layout, sizeof(layout), |
47 | 47 |
-1, link->channel_layout); |
48 | 48 |
format = av_x_if_null(av_get_sample_fmt_name(link->format), "?"); |
49 |
- av_bprintf(buf, "[%dHz %s:%s:%s]", |
|
50 |
- (int)link->sample_rate, format, layout, |
|
51 |
- link->planar ? "planar" : "packed"); |
|
49 |
+ av_bprintf(buf, "[%dHz %s:%s]", |
|
50 |
+ (int)link->sample_rate, format, layout); |
|
52 | 51 |
break; |
53 | 52 |
|
54 | 53 |
default: |
... | ... |
@@ -132,16 +132,6 @@ int ff_parse_sample_format(int *ret, const char *arg, void *log_ctx); |
132 | 132 |
int ff_parse_channel_layout(int64_t *ret, const char *arg, void *log_ctx); |
133 | 133 |
|
134 | 134 |
/** |
135 |
- * Parse a packing format or a corresponding integer representation. |
|
136 |
- * |
|
137 |
- * @param ret integer pointer to where the value should be written |
|
138 |
- * @param arg string to parse |
|
139 |
- * @param log_ctx log context |
|
140 |
- * @return 0 in case of success, a negative AVERROR code on error |
|
141 |
- */ |
|
142 |
-int ff_parse_packing_format(int *ret, const char *arg, void *log_ctx); |
|
143 |
- |
|
144 |
-/** |
|
145 | 135 |
* Pass video frame along and keep an internal reference for later use. |
146 | 136 |
*/ |
147 | 137 |
static inline void ff_null_start_frame_keep_ref(AVFilterLink *inlink, |
... | ... |
@@ -42,7 +42,6 @@ AVBufferSinkParams *av_buffersink_params_alloc(void) |
42 | 42 |
AVABufferSinkParams *av_abuffersink_params_alloc(void) |
43 | 43 |
{ |
44 | 44 |
static const int sample_fmts[] = { -1 }; |
45 |
- static const int packing_fmts[] = { -1 }; |
|
46 | 45 |
static const int64_t channel_layouts[] = { -1 }; |
47 | 46 |
AVABufferSinkParams *params = av_malloc(sizeof(AVABufferSinkParams)); |
48 | 47 |
|
... | ... |
@@ -51,7 +50,6 @@ AVABufferSinkParams *av_abuffersink_params_alloc(void) |
51 | 51 |
|
52 | 52 |
params->sample_fmts = sample_fmts; |
53 | 53 |
params->channel_layouts = channel_layouts; |
54 |
- params->packing_fmts = packing_fmts; |
|
55 | 54 |
return params; |
56 | 55 |
} |
57 | 56 |
|
... | ... |
@@ -64,7 +62,6 @@ typedef struct { |
64 | 64 |
/* only used for audio */ |
65 | 65 |
enum AVSampleFormat *sample_fmts; ///< list of accepted sample formats, terminated by AV_SAMPLE_FMT_NONE |
66 | 66 |
int64_t *channel_layouts; ///< list of accepted channel layouts, terminated by -1 |
67 |
- int *packing_fmts; ///< list of accepted packing formats, terminated by -1 |
|
68 | 67 |
} BufferSinkContext; |
69 | 68 |
|
70 | 69 |
#define FIFO_INIT_SIZE 8 |
... | ... |
@@ -244,11 +241,9 @@ static av_cold int asink_init(AVFilterContext *ctx, const char *args, void *opaq |
244 | 244 |
|
245 | 245 |
buf->sample_fmts = ff_copy_int_list (params->sample_fmts); |
246 | 246 |
buf->channel_layouts = ff_copy_int64_list(params->channel_layouts); |
247 |
- buf->packing_fmts = ff_copy_int_list (params->packing_fmts); |
|
248 |
- if (!buf->sample_fmts || !buf->channel_layouts || !buf->sample_fmts) { |
|
247 |
+ if (!buf->sample_fmts || !buf->channel_layouts) { |
|
249 | 248 |
av_freep(&buf->sample_fmts); |
250 | 249 |
av_freep(&buf->channel_layouts); |
251 |
- av_freep(&buf->packing_fmts); |
|
252 | 250 |
return AVERROR(ENOMEM); |
253 | 251 |
} |
254 | 252 |
|
... | ... |
@@ -261,7 +256,6 @@ static av_cold void asink_uninit(AVFilterContext *ctx) |
261 | 261 |
|
262 | 262 |
av_freep(&buf->sample_fmts); |
263 | 263 |
av_freep(&buf->channel_layouts); |
264 |
- av_freep(&buf->packing_fmts); |
|
265 | 264 |
return common_uninit(ctx); |
266 | 265 |
} |
267 | 266 |
|
... | ... |
@@ -278,11 +272,6 @@ static int asink_query_formats(AVFilterContext *ctx) |
278 | 278 |
if (!(layouts = avfilter_make_format64_list(buf->channel_layouts))) |
279 | 279 |
return AVERROR(ENOMEM); |
280 | 280 |
ff_set_common_channel_layouts(ctx, layouts); |
281 |
- |
|
282 |
- if (!(formats = avfilter_make_format_list(buf->packing_fmts))) |
|
283 |
- return AVERROR(ENOMEM); |
|
284 |
- avfilter_set_common_packing_formats(ctx, formats); |
|
285 |
- |
|
286 | 281 |
ff_set_common_samplerates (ctx, ff_all_samplerates()); |
287 | 282 |
|
288 | 283 |
return 0; |
... | ... |
@@ -55,7 +55,6 @@ typedef struct { |
55 | 55 |
int sample_rate; |
56 | 56 |
unsigned int sample_format; |
57 | 57 |
int64_t channel_layout; |
58 |
- int packing_format; |
|
59 | 58 |
|
60 | 59 |
// Normalization filters |
61 | 60 |
AVFilterContext *aconvert; |
... | ... |
@@ -91,7 +90,6 @@ static int reconfigure_filter(BufferSourceContext *abuffer, AVFilterContext *fil |
91 | 91 |
|
92 | 92 |
inlink->format = abuffer->sample_format; |
93 | 93 |
inlink->channel_layout = abuffer->channel_layout; |
94 |
- inlink->planar = abuffer->packing_format; |
|
95 | 94 |
inlink->sample_rate = abuffer->sample_rate; |
96 | 95 |
|
97 | 96 |
filt_ctx->filter->uninit(filt_ctx); |
... | ... |
@@ -239,14 +237,12 @@ static int check_format_change_audio(AVFilterContext *ctx, |
239 | 239 |
|
240 | 240 |
link = ctx->outputs[0]; |
241 | 241 |
if (samplesref->format != link->format || |
242 |
- samplesref->audio->channel_layout != link->channel_layout || |
|
243 |
- samplesref->audio->planar != link->planar) { |
|
242 |
+ samplesref->audio->channel_layout != link->channel_layout) { |
|
244 | 243 |
|
245 | 244 |
if (!logged) log_input_change(ctx, link, samplesref); |
246 | 245 |
|
247 | 246 |
abuffer->sample_format = samplesref->format; |
248 | 247 |
abuffer->channel_layout = samplesref->audio->channel_layout; |
249 |
- abuffer->packing_format = samplesref->audio->planar; |
|
250 | 248 |
|
251 | 249 |
if (!abuffer->aconvert) { |
252 | 250 |
ret = insert_filter(abuffer, link, &abuffer->aconvert, "aconvert"); |
... | ... |
@@ -254,9 +250,7 @@ static int check_format_change_audio(AVFilterContext *ctx, |
254 | 254 |
} else { |
255 | 255 |
link = abuffer->aconvert->outputs[0]; |
256 | 256 |
if (samplesref->format == link->format && |
257 |
- samplesref->audio->channel_layout == link->channel_layout && |
|
258 |
- samplesref->audio->planar == link->planar |
|
259 |
- ) |
|
257 |
+ samplesref->audio->channel_layout == link->channel_layout) |
|
260 | 258 |
remove_filter(&abuffer->aconvert); |
261 | 259 |
else |
262 | 260 |
if ((ret = reconfigure_filter(abuffer, abuffer->aconvert)) < 0) |
... | ... |
@@ -456,7 +450,6 @@ static av_cold int init_audio(AVFilterContext *ctx, const char *args0, void *opa |
456 | 456 |
ADD_FORMAT(sample_rate); |
457 | 457 |
ADD_FORMAT(sample_format); |
458 | 458 |
ADD_FORMAT(channel_layout); |
459 |
- ADD_FORMAT(packing_format); |
|
460 | 459 |
|
461 | 460 |
abuffer->fifo = av_fifo_alloc(FIFO_SIZE*sizeof(AVFilterBufferRef*)); |
462 | 461 |
if (!abuffer->fifo) { |
... | ... |
@@ -475,7 +468,7 @@ static av_cold int init_audio(AVFilterContext *ctx, const char *args0, void *opa |
475 | 475 |
|
476 | 476 |
arg_fail: |
477 | 477 |
av_log(ctx, AV_LOG_ERROR, "Invalid arguments, must be of the form " |
478 |
- "sample_rate:sample_fmt:channel_layout:packing\n"); |
|
478 |
+ "sample_rate:sample_fmt:channel_layout\n"); |
|
479 | 479 |
av_freep(&args); |
480 | 480 |
return AVERROR(EINVAL); |
481 | 481 |
} |
... | ... |
@@ -517,10 +510,6 @@ static int query_formats_audio(AVFilterContext *ctx) |
517 | 517 |
ff_add_channel_layout(&layouts, abuffer->channel_layout); |
518 | 518 |
ff_set_common_channel_layouts(ctx, layouts); |
519 | 519 |
|
520 |
- formats = NULL; |
|
521 |
- avfilter_add_format(&formats, abuffer->packing_format); |
|
522 |
- avfilter_set_common_packing_formats(ctx, formats); |
|
523 |
- |
|
524 | 520 |
return 0; |
525 | 521 |
} |
526 | 522 |
|
... | ... |
@@ -370,13 +370,11 @@ static int amovie_query_formats(AVFilterContext *ctx) |
370 | 370 |
AVCodecContext *c = movie->codec_ctx; |
371 | 371 |
|
372 | 372 |
enum AVSampleFormat sample_fmts[] = { c->sample_fmt, -1 }; |
373 |
- int packing_fmts[] = { AVFILTER_PACKED, -1 }; |
|
374 | 373 |
int sample_rates[] = { c->sample_rate, -1 }; |
375 | 374 |
int64_t chlayouts[] = { c->channel_layout ? c->channel_layout : |
376 | 375 |
av_get_default_channel_layout(c->channels), -1 }; |
377 | 376 |
|
378 | 377 |
avfilter_set_common_sample_formats (ctx, avfilter_make_format_list(sample_fmts)); |
379 |
- avfilter_set_common_packing_formats(ctx, avfilter_make_format_list(packing_fmts)); |
|
380 | 378 |
ff_set_common_samplerates (ctx, avfilter_make_format_list(sample_rates)); |
381 | 379 |
ff_set_common_channel_layouts(ctx, avfilter_make_format64_list(chlayouts)); |
382 | 380 |
|
... | ... |
@@ -54,14 +54,6 @@ static void print_formats(AVFilterContext *filter_ctx) |
54 | 54 |
printf(#INOUT "PUT[%d] %s: chlayout:%s\n", \ |
55 | 55 |
i, filter_ctx->filter->inout##puts[i].name, buf); \ |
56 | 56 |
} \ |
57 |
- \ |
|
58 |
- fmts = filter_ctx->inout##puts[i]->outin##_packing; \ |
|
59 |
- for (j = 0; j < fmts->format_count; j++) { \ |
|
60 |
- printf(#INOUT "PUT[%d] %s: packing:%s\n", \ |
|
61 |
- i, filter_ctx->filter->inout##puts[i].name, \ |
|
62 |
- fmts->formats[j] == AVFILTER_PACKED ? \ |
|
63 |
- "packed" : "planar"); \ |
|
64 |
- } \ |
|
65 | 57 |
} \ |
66 | 58 |
} \ |
67 | 59 |
|