]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/ps.c
Support DTS-ES extension (XCh) in dca: Cosmetic cleanup
[ffmpeg] / libavcodec / ps.c
index 3f30cef3cb4c8bb0db4fedbda5fec92f5c42f0c2..76d772b420f57c1966ba916729534fde7c09f5de 100644 (file)
@@ -20,6 +20,7 @@
  */
 
 #include <stdint.h>
+#include "libavutil/common.h"
 #include "libavutil/mathematics.h"
 #include "avcodec.h"
 #include "get_bits.h"
@@ -81,7 +82,7 @@ static VLC vlc_ps[10];
  * @param dt    1: time delta-coded, 0: frequency delta-coded
  */
 #define READ_PAR_DATA(PAR, OFFSET, MASK, ERR_CONDITION) \
-static int PAR ## _data(AVCodecContext *avctx, GetBitContext *gb, PSContext *ps, \
+static int read_ ## PAR ## _data(AVCodecContext *avctx, GetBitContext *gb, PSContext *ps, \
                         int8_t (*PAR)[PS_MAX_NR_IIDICC], int table_idx, int e, int dt) \
 { \
     int b, num = ps->nr_ ## PAR ## _par; \
@@ -116,7 +117,7 @@ READ_PAR_DATA(iid,    huff_offset[table_idx],    0, FFABS(ps->iid_par[e][b]) > 7
 READ_PAR_DATA(icc,    huff_offset[table_idx],    0, ps->icc_par[e][b] > 7U)
 READ_PAR_DATA(ipdopd,                      0, 0x07, 0)
 
-static int ps_extension(GetBitContext *gb, PSContext *ps, int ps_extension_id)
+static int ps_read_extension_data(GetBitContext *gb, PSContext *ps, int ps_extension_id)
 {
     int e;
     int count = get_bits_count(gb);
@@ -128,9 +129,9 @@ static int ps_extension(GetBitContext *gb, PSContext *ps, int ps_extension_id)
     if (ps->enable_ipdopd) {
         for (e = 0; e < ps->num_env; e++) {
             int dt = get_bits1(gb);
-            ipdopd_data(NULL, gb, ps, ps->ipd_par, dt ? huff_ipd_dt : huff_ipd_df, e, dt);
+            read_ipdopd_data(NULL, gb, ps, ps->ipd_par, dt ? huff_ipd_dt : huff_ipd_df, e, dt);
             dt = get_bits1(gb);
-            ipdopd_data(NULL, gb, ps, ps->opd_par, dt ? huff_opd_dt : huff_opd_df, e, dt);
+            read_ipdopd_data(NULL, gb, ps, ps->opd_par, dt ? huff_opd_dt : huff_opd_df, e, dt);
         }
     }
     skip_bits1(gb);      //reserved_ps
@@ -191,12 +192,12 @@ int ff_ps_read_data(AVCodecContext *avctx, GetBitContext *gb_host, PSContext *ps
             ps->border_position[e] = get_bits(gb, 5);
     } else
         for (e = 1; e <= ps->num_env; e++)
-            ps->border_position[e] = e * numQMFSlots / ps->num_env - 1;
+            ps->border_position[e] = (e * numQMFSlots >> ff_log2_tab[ps->num_env]) - 1;
 
     if (ps->enable_iid) {
         for (e = 0; e < ps->num_env; e++) {
             int dt = get_bits1(gb);
-            if (iid_data(avctx, gb, ps, ps->iid_par, huff_iid[2*dt+ps->iid_quant], e, dt))
+            if (read_iid_data(avctx, gb, ps, ps->iid_par, huff_iid[2*dt+ps->iid_quant], e, dt))
                 goto err;
         }
     } else
@@ -205,7 +206,7 @@ int ff_ps_read_data(AVCodecContext *avctx, GetBitContext *gb_host, PSContext *ps
     if (ps->enable_icc)
         for (e = 0; e < ps->num_env; e++) {
             int dt = get_bits1(gb);
-            if (icc_data(avctx, gb, ps, ps->icc_par, dt ? huff_icc_dt : huff_icc_df, e, dt))
+            if (read_icc_data(avctx, gb, ps, ps->icc_par, dt ? huff_icc_dt : huff_icc_df, e, dt))
                 goto err;
         }
     else
@@ -219,7 +220,7 @@ int ff_ps_read_data(AVCodecContext *avctx, GetBitContext *gb_host, PSContext *ps
         cnt *= 8;
         while (cnt > 7) {
             int ps_extension_id = get_bits(gb, 2);
-            cnt -= 2 + ps_extension(gb, ps, ps_extension_id);
+            cnt -= 2 + ps_read_extension_data(gb, ps, ps_extension_id);
         }
         if (cnt < 0) {
             av_log(avctx, AV_LOG_ERROR, "ps extension overflow %d", cnt);
@@ -282,14 +283,14 @@ err:
 static void hybrid2_re(float (*in)[2], float (*out)[32][2], const float filter[7], int len, int reverse)
 {
     int i, j;
-    for (i = 0; i < len; i++) {
-        float re_in = filter[6] * in[6+i][0];        //real inphase
+    for (i = 0; i < len; i++, in++) {
+        float re_in = filter[6] * in[6][0];          //real inphase
         float re_op = 0.0f;                          //real out of phase
-        float im_in = filter[6] * in[6+i][1];        //imag inphase
+        float im_in = filter[6] * in[6][1];          //imag inphase
         float im_op = 0.0f;                          //imag out of phase
         for (j = 0; j < 6; j += 2) {
-            re_op += filter[j+1] * (in[i+j+1][0] + in[12-j-1+i][0]);
-            im_op += filter[j+1] * (in[i+j+1][1] + in[12-j-1+i][1]);
+            re_op += filter[j+1] * (in[j+1][0] + in[12-j-1][0]);
+            im_op += filter[j+1] * (in[j+1][1] + in[12-j-1][1]);
         }
         out[ reverse][i][0] = re_in + re_op;
         out[ reverse][i][1] = im_in + im_op;
@@ -305,14 +306,14 @@ static void hybrid6_cx(float (*in)[2], float (*out)[32][2], const float (*filter
     int N = 8;
     float temp[8][2];
 
-    for (i = 0; i < len; i++) {
+    for (i = 0; i < len; i++, in++) {
         for (ssb = 0; ssb < N; ssb++) {
-            float sum_re = filter[ssb][6][0] * in[i+6][0], sum_im = filter[ssb][6][0] * in[i+6][1];
+            float sum_re = filter[ssb][6][0] * in[6][0], sum_im = filter[ssb][6][0] * in[6][1];
             for (j = 0; j < 6; j++) {
-                float in0_re = in[i+j][0];
-                float in0_im = in[i+j][1];
-                float in1_re = in[i+12-j][0];
-                float in1_im = in[i+12-j][1];
+                float in0_re = in[j][0];
+                float in0_im = in[j][1];
+                float in1_re = in[12-j][0];
+                float in1_im = in[12-j][1];
                 sum_re += filter[ssb][j][0] * (in0_re + in1_re) - filter[ssb][j][1] * (in0_im - in1_im);
                 sum_im += filter[ssb][j][0] * (in0_im + in1_im) + filter[ssb][j][1] * (in0_re - in1_re);
             }
@@ -338,14 +339,14 @@ static void hybrid4_8_12_cx(float (*in)[2], float (*out)[32][2], const float (*f
 {
     int i, j, ssb;
 
-    for (i = 0; i < len; i++) {
+    for (i = 0; i < len; i++, in++) {
         for (ssb = 0; ssb < N; ssb++) {
-            float sum_re = filter[ssb][6][0] * in[i+6][0], sum_im = filter[ssb][6][0] * in[i+6][1];
+            float sum_re = filter[ssb][6][0] * in[6][0], sum_im = filter[ssb][6][0] * in[6][1];
             for (j = 0; j < 6; j++) {
-                float in0_re = in[i+j][0];
-                float in0_im = in[i+j][1];
-                float in1_re = in[i+12-j][0];
-                float in1_im = in[i+12-j][1];
+                float in0_re = in[j][0];
+                float in0_im = in[j][1];
+                float in1_re = in[12-j][0];
+                float in1_im = in[12-j][1];
                 sum_re += filter[ssb][j][0] * (in0_re + in1_re) - filter[ssb][j][1] * (in0_im - in1_im);
                 sum_im += filter[ssb][j][0] * (in0_im + in1_im) + filter[ssb][j][1] * (in0_re - in1_re);
             }
@@ -1033,5 +1034,4 @@ av_cold void ff_ps_init(void) {
 
 av_cold void ff_ps_ctx_init(PSContext *ps)
 {
-    ipdopd_reset(ps->ipd_hist, ps->opd_hist);
 }