Hello crews,

I attached two simple patches reenabling a decoder feature been initially
disabled due to lack of real-world samples.

I've recently got a couple of appropriate samples from the PPSSPP emulator
project so I coud test this feature extensively.

The 2nd patch is a cosmetical one that renames the "phase_shift" variable
to "inverse_phase". This seems to give a better description of what's
actually going on (180° phase shift).

Do we need to update FATE tests to include a test for this feature?

Best regards
Maxim
From 9f4931faba250755c7d546596636ad7bdf150566 Mon Sep 17 00:00:00 2001
From: Max Poliakovski <maximumspat...@googlemail.com>
Date: Sat, 6 Jun 2015 23:28:47 +0200
Subject: [PATCH 1/2] atrac3plus: add support for GHA phase inversion.

---
 libavcodec/atrac3plus.c    |  6 +-----
 libavcodec/atrac3plusdsp.c | 10 ++++++++--
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/libavcodec/atrac3plus.c b/libavcodec/atrac3plus.c
index f998a7f..3d75749 100644
--- a/libavcodec/atrac3plus.c
+++ b/libavcodec/atrac3plus.c
@@ -1724,11 +1724,7 @@ static int decode_tones_info(GetBitContext *gb, Atrac3pChanUnitCtx *ctx,
     if (num_channels == 2) {
         get_subband_flags(gb, ctx->waves_info->tone_sharing, ctx->waves_info->num_tone_bands);
         get_subband_flags(gb, ctx->waves_info->tone_master,  ctx->waves_info->num_tone_bands);
-        if (get_subband_flags(gb, ctx->waves_info->phase_shift,
-                              ctx->waves_info->num_tone_bands)) {
-            avpriv_report_missing_feature(avctx, "GHA Phase shifting");
-            return AVERROR_PATCHWELCOME;
-        }
+        get_subband_flags(gb, ctx->waves_info->phase_shift, ctx->waves_info->num_tone_bands);
     }
 
     ctx->waves_info->tones_index = 0;
diff --git a/libavcodec/atrac3plusdsp.c b/libavcodec/atrac3plusdsp.c
index 3c68f74..50ac134 100644
--- a/libavcodec/atrac3plusdsp.c
+++ b/libavcodec/atrac3plusdsp.c
@@ -116,6 +116,7 @@ av_cold void ff_atrac3p_init_wave_synth(void)
  *  @param[in]    synth_param   ptr to common synthesis parameters
  *  @param[in]    waves_info    parameters for each sine wave
  *  @param[in]    envelope      envelope data for all waves in a group
+ *  @param[in]    fdsp          ptr to floating-point DSP context
  *  @param[in]    phase_shift   flag indicates 180° phase shift
  *  @param[in]    reg_offset    region offset for trimming envelope data
  *  @param[out]   out           receives sythesized data
@@ -123,6 +124,7 @@ av_cold void ff_atrac3p_init_wave_synth(void)
 static void waves_synth(Atrac3pWaveSynthParams *synth_param,
                         Atrac3pWavesData *waves_info,
                         Atrac3pWaveEnvelope *envelope,
+                        AVFloatDSPContext *fdsp,
                         int phase_shift, int reg_offset, float *out)
 {
     int i, wn, inc, pos;
@@ -146,6 +148,10 @@ static void waves_synth(Atrac3pWaveSynthParams *synth_param,
         }
     }
 
+    /* 180° phase shift if requested */
+    if (phase_shift)
+        fdsp->vector_fmul_scalar(out, out, -1.0f, 128);
+
     /* fade in with steep Hann window if requested */
     if (envelope->has_start_point) {
         pos = (envelope->start_pos << 2) - reg_offset;
@@ -216,11 +222,11 @@ void ff_atrac3p_generate_tones(Atrac3pChanUnitCtx *ch_unit, AVFloatDSPContext *f
     /* synthesize waves for both overlapping regions */
     if (tones_now->num_wavs && reg1_env_nonzero)
         waves_synth(ch_unit->waves_info_prev, tones_now, &tones_now->curr_env,
-                    ch_unit->waves_info_prev->phase_shift[sb] & ch_num,
+                    fdsp, ch_unit->waves_info_prev->phase_shift[sb] & ch_num,
                     128, wavreg1);
 
     if (tones_next->num_wavs && reg2_env_nonzero)
-        waves_synth(ch_unit->waves_info, tones_next, &tones_next->curr_env,
+        waves_synth(ch_unit->waves_info, tones_next, &tones_next->curr_env, fdsp,
                     ch_unit->waves_info->phase_shift[sb] & ch_num, 0, wavreg2);
 
     /* Hann windowing for non-faded wave signals */
-- 
1.9.1

From 3e0a8c23c5752db78950b0c868fce9f955e789ae Mon Sep 17 00:00:00 2001
From: Max Poliakovski <maximumspat...@googlemail.com>
Date: Sun, 7 Jun 2015 12:52:06 +0200
Subject: [PATCH 2/2] atrac3plus: give the phase_shift flag a better name.

---
 libavcodec/atrac3plus.c    |  2 +-
 libavcodec/atrac3plus.h    |  2 +-
 libavcodec/atrac3plusdsp.c | 12 ++++++------
 3 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/libavcodec/atrac3plus.c b/libavcodec/atrac3plus.c
index 3d75749..b16a139 100644
--- a/libavcodec/atrac3plus.c
+++ b/libavcodec/atrac3plus.c
@@ -1724,7 +1724,7 @@ static int decode_tones_info(GetBitContext *gb, Atrac3pChanUnitCtx *ctx,
     if (num_channels == 2) {
         get_subband_flags(gb, ctx->waves_info->tone_sharing, ctx->waves_info->num_tone_bands);
         get_subband_flags(gb, ctx->waves_info->tone_master,  ctx->waves_info->num_tone_bands);
-        get_subband_flags(gb, ctx->waves_info->phase_shift, ctx->waves_info->num_tone_bands);
+        get_subband_flags(gb, ctx->waves_info->invert_phase, ctx->waves_info->num_tone_bands);
     }
 
     ctx->waves_info->tones_index = 0;
diff --git a/libavcodec/atrac3plus.h b/libavcodec/atrac3plus.h
index 1b001fa..a33c38a 100644
--- a/libavcodec/atrac3plus.h
+++ b/libavcodec/atrac3plus.h
@@ -122,7 +122,7 @@ typedef struct Atrac3pWaveSynthParams {
     int num_tone_bands;                     ///< number of PQF bands with tones
     uint8_t tone_sharing[ATRAC3P_SUBBANDS]; ///< 1 - subband-wise tone sharing flags
     uint8_t tone_master[ATRAC3P_SUBBANDS];  ///< 1 - subband-wise tone channel swapping
-    uint8_t phase_shift[ATRAC3P_SUBBANDS];  ///< 1 - subband-wise 180° phase shifting
+    uint8_t invert_phase[ATRAC3P_SUBBANDS]; ///< 1 - subband-wise phase inversion
     int tones_index;                        ///< total sum of tones in this unit
     Atrac3pWaveParam waves[48];
 } Atrac3pWaveSynthParams;
diff --git a/libavcodec/atrac3plusdsp.c b/libavcodec/atrac3plusdsp.c
index 50ac134..17c6437 100644
--- a/libavcodec/atrac3plusdsp.c
+++ b/libavcodec/atrac3plusdsp.c
@@ -117,7 +117,7 @@ av_cold void ff_atrac3p_init_wave_synth(void)
  *  @param[in]    waves_info    parameters for each sine wave
  *  @param[in]    envelope      envelope data for all waves in a group
  *  @param[in]    fdsp          ptr to floating-point DSP context
- *  @param[in]    phase_shift   flag indicates 180° phase shift
+ *  @param[in]    invert_phase  flag indicating 180° phase shift
  *  @param[in]    reg_offset    region offset for trimming envelope data
  *  @param[out]   out           receives sythesized data
  */
@@ -125,7 +125,7 @@ static void waves_synth(Atrac3pWaveSynthParams *synth_param,
                         Atrac3pWavesData *waves_info,
                         Atrac3pWaveEnvelope *envelope,
                         AVFloatDSPContext *fdsp,
-                        int phase_shift, int reg_offset, float *out)
+                        int invert_phase, int reg_offset, float *out)
 {
     int i, wn, inc, pos;
     double amp;
@@ -148,8 +148,8 @@ static void waves_synth(Atrac3pWaveSynthParams *synth_param,
         }
     }
 
-    /* 180° phase shift if requested */
-    if (phase_shift)
+    /* invert phase if requested */
+    if (invert_phase)
         fdsp->vector_fmul_scalar(out, out, -1.0f, 128);
 
     /* fade in with steep Hann window if requested */
@@ -222,12 +222,12 @@ void ff_atrac3p_generate_tones(Atrac3pChanUnitCtx *ch_unit, AVFloatDSPContext *f
     /* synthesize waves for both overlapping regions */
     if (tones_now->num_wavs && reg1_env_nonzero)
         waves_synth(ch_unit->waves_info_prev, tones_now, &tones_now->curr_env,
-                    fdsp, ch_unit->waves_info_prev->phase_shift[sb] & ch_num,
+                    fdsp, ch_unit->waves_info_prev->invert_phase[sb] & ch_num,
                     128, wavreg1);
 
     if (tones_next->num_wavs && reg2_env_nonzero)
         waves_synth(ch_unit->waves_info, tones_next, &tones_next->curr_env, fdsp,
-                    ch_unit->waves_info->phase_shift[sb] & ch_num, 0, wavreg2);
+                    ch_unit->waves_info->invert_phase[sb] & ch_num, 0, wavreg2);
 
     /* Hann windowing for non-faded wave signals */
     if (tones_now->num_wavs && tones_next->num_wavs &&
-- 
1.9.1

_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to