Skip to content

Commit

Permalink
Merge pull request #342 from theori-io/remove-mp11-workaround
Browse files Browse the repository at this point in the history
Remove non-standard MP11 interleaving
  • Loading branch information
argilo authored Apr 2, 2024
2 parents 0737263 + 4d9e50d commit e3b30c3
Show file tree
Hide file tree
Showing 2 changed files with 4 additions and 18 deletions.
4 changes: 1 addition & 3 deletions src/decode.c
Original file line number Diff line number Diff line change
Expand Up @@ -268,7 +268,7 @@ void decode_process_p3_p4(decode_t *st, interleaver_iv_t *interleaver, int8_t *v
if ((out % 6) == 1 || (out % 6) == 4) // depuncture, [1, 0, 1, 1, 0, 1]
viterbi[out++] = 0;

interleaver->internal[interleaver->i] = interleaver->buffer[interleaver->buffer_number][i];
interleaver->internal[interleaver->i] = interleaver->buffer[i];
interleaver->i++;
}
if (interleaver->ready)
Expand Down Expand Up @@ -346,8 +346,6 @@ void decode_process_p1_p3_am(decode_t *st)

static void interleaver_iv_reset(interleaver_iv_t *interleaver)
{
interleaver->buffer_number = 0;
interleaver->buffer_ready = 0;
interleaver->idx = 0;
interleaver->i = 0;
memset(interleaver->pt, 0, sizeof(unsigned int) * 4);
Expand Down
18 changes: 3 additions & 15 deletions src/decode.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,7 @@

typedef struct
{
int8_t buffer[8][144 * BLKSZ * 2];
int buffer_number;
int buffer_ready;
int8_t buffer[144 * BLKSZ * 2];
unsigned int idx;
int8_t internal[P3_FRAME_LEN_FM * 32];
unsigned int i;
Expand Down Expand Up @@ -84,20 +82,10 @@ static inline void decode_push_pm(decode_t *st, int8_t sbit)
}
static inline void decode_push_px1_px2(decode_t *st, interleaver_iv_t *interleaver, int8_t *viterbi, uint8_t *scrambler, int8_t sbit, unsigned int frame_len)
{
unsigned int delay = ((interleaver == &st->interleaver_px2) && (interleaver->idx < frame_len)) ? 7 : 0;
interleaver->buffer[(interleaver->buffer_number + delay) % 8][interleaver->idx++] = sbit;
interleaver->buffer[interleaver->idx++] = sbit;
if (interleaver->idx % (frame_len * 2) == 0)
{
if (interleaver->buffer_ready)
{
decode_process_p3_p4(st, interleaver, viterbi, scrambler, frame_len, (interleaver == &st->interleaver_px1) ? P3_LOGICAL_CHANNEL : P4_LOGICAL_CHANNEL);
}
interleaver->buffer_number++;
if (interleaver->buffer_number == 8)
{
interleaver->buffer_number = 0;
interleaver->buffer_ready = 1;
}
decode_process_p3_p4(st, interleaver, viterbi, scrambler, frame_len, (interleaver == &st->interleaver_px1) ? P3_LOGICAL_CHANNEL : P4_LOGICAL_CHANNEL);
interleaver->idx = 0;
}
}
Expand Down

0 comments on commit e3b30c3

Please sign in to comment.