diff options
author | Burt P <pburt0@gmail.com> | 2016-09-28 14:18:19 +0300 |
---|---|---|
committer | Burt P <pburt0@gmail.com> | 2016-10-05 20:38:26 +0300 |
commit | 80d89c19601fc1bee06e845e11e0115c01c15bb9 (patch) | |
tree | 253b08e63cea7c006131d3ec16cc4eb96586401d /libavfilter/af_hdcd.c | |
parent | 7e46bb80efa4690515e40946f680ec43d67ffd8d (diff) |
af_hdcd: support s16p (WavPack) directly
The buffer is already being copied anyway, so interlace the planar
format during the copy and remove one use of auto-convert.
Signed-off-by: Burt P <pburt0@gmail.com>
Diffstat (limited to 'libavfilter/af_hdcd.c')
-rw-r--r-- | libavfilter/af_hdcd.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/libavfilter/af_hdcd.c b/libavfilter/af_hdcd.c index dd9ecc3796..6f35c097b4 100644 --- a/libavfilter/af_hdcd.c +++ b/libavfilter/af_hdcd.c @@ -1665,10 +1665,18 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *in) } out->format = outlink->format; // is this needed? - in_data = (int16_t*)in->data[0]; out_data = (int32_t*)out->data[0]; - for (c = n = 0; n < in->nb_samples * in->channels; n++) - out_data[n] = in_data[n]; + if (inlink->format == AV_SAMPLE_FMT_S16P) { + for (n = 0; n < in->nb_samples; n++) + for (c = 0; c < in->channels; c++) { + in_data = (int16_t*)in->extended_data[c]; + out_data[(n * in->channels) + c] = in_data[n]; + } + } else { + in_data = (int16_t*)in->data[0]; + for (n = 0; n < in->nb_samples * in->channels; n++) + out_data[n] = in_data[n]; + } if (s->process_stereo) { hdcd_detect_start(&s->detect); @@ -1707,6 +1715,7 @@ static int query_formats(AVFilterContext *ctx) static const enum AVSampleFormat sample_fmts_in[] = { AV_SAMPLE_FMT_S16, + AV_SAMPLE_FMT_S16P, AV_SAMPLE_FMT_NONE }; static const enum AVSampleFormat sample_fmts_out[] = { |