[FFmpeg-devel] [PATCH] WMA Voice decoder

Ronald S. Bultje rsbultje
Thu Feb 11 04:28:17 CET 2010


Hi,

On Thu, Feb 4, 2010 at 12:06 AM, Vitor Sessak <vitor1001 at gmail.com> wrote:
> Ronald S. Bultje wrote:
>> + ? ?offset = start_offset[bits];
>> + ? ?for (n = 0; n < 11 && offset < MAX_FRAMESIZE; n++) {
>> + ? ? ? ?off_table[n] = offset;
>> + ? ? ? ?offset += pitch[offset >= MAX_FRAMESIZE / 2];
>> + ? ?}
>
> nmax = x;
>
>> + ? ?if (n < 11)
>> + ? ? ? ?memset(&off_table[n], -1, (11 - n) * sizeof(int));
>> +
>> + ? ?s->aw_n_pulses[0] ? ? ? ?= s->aw_n_pulses[1] ? ? ? ?= 0;
>> + ? ?s->aw_first_pulse_off[0] = s->aw_first_pulse_off[1] = NO_OFFSET;
>> + ? ?first_idx[0] ? ? ? ? ? ? = first_idx[1] ? ? ? ? ? ? = 0;
>> + ? ?for (n = 0; n < 11; n++) {
>
> It looks like the memset can go away if you do "for(n=0; n < nmax; n++)"
>
>> +        if (off_table[n] >= 0) {
>
> Maybe you can get rid of this loop by starting the loop on n with the right
> value

I use both nmin and nmax as suggested now.

>> + ? ?if (pulse_off != NO_OFFSET)
>> + ? ? ? ?for (idx = pulse_off; idx < MAX_FRAMESIZE / 2; idx +=
>> fcb->pitch_lag) {
>> + ? ? ? ? ? ?int range ? ? ? ? ? ? = s->aw_pitch_range; // always 16 or 24
>> + ? ? ? ? ? ?int idx_sh ? ? ? ? ? ?= idx >> 4;
>> + ? ? ? ? ? ?int idx_mask ? ? ? ? ?= idx & 15;
>> + ? ? ? ? ? ?use_mask[idx_sh++] ? &= ~(0xFFFF >> idx_mask);
>> + ? ? ? ? ? ?range ? ? ? ? ? ? ? ?-= 16 - idx_mask;
>> + ? ? ? ? ? ?use_mask[idx_sh++] ? &= ? 0xFFFF >> range;
>> + ? ? ? ? ? ?range ? ? ? ? ? ? ? ?-= 16;
>> + ? ? ? ? ? ?if (range > 0)
>> + ? ? ? ? ? ? ? ?use_mask[idx_sh] &= ? 0xFFFF >> range;
>> + ? ? ? ?}
>
> Does those excluded indexes correspond to some other pulses set (i.e. those
> set in aw_pulse_set1() or those set by aw_pulse_set2() in the last frame)?

Documented as suggested.

New patch coming in a bit.

Ronald



More information about the ffmpeg-devel mailing list