diff mbox

[FFmpeg-devel,2/5] af_hdcd: support s16p (WavPack) directly

Message ID 1475394393-10173-3-git-send-email-pburt0@gmail.com
State Accepted
Commit 80d89c19601fc1bee06e845e11e0115c01c15bb9
Headers show

Commit Message

Burt P Oct. 2, 2016, 7:46 a.m. UTC
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>
---
 libavfilter/af_hdcd.c | 15 ++++++++++++---
 1 file changed, 12 insertions(+), 3 deletions(-)

Comments

Burt P Oct. 5, 2016, 6:02 p.m. UTC | #1
applied

--
Burt
diff mbox

Patch

diff --git a/libavfilter/af_hdcd.c b/libavfilter/af_hdcd.c
index a9f2f93..90b6b64 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[] = {