Commit 2e6338b4 authored by Michael Niedermayer's avatar Michael Niedermayer

Merge remote-tracking branch 'qatar/master'

* qatar/master:
  qdm2: Conceal broken samples

See: 5ee008e0Merged-by: 's avatarMichael Niedermayer <michaelni@gmx.at>
parents bc95b942 4ecdb5ed
...@@ -532,8 +532,8 @@ static void build_sb_samples_from_noise(QDM2Context *q, int sb) ...@@ -532,8 +532,8 @@ static void build_sb_samples_from_noise(QDM2Context *q, int sb)
* @param channels number of channels * @param channels number of channels
* @param coding_method q->coding_method[0][0][0] * @param coding_method q->coding_method[0][0][0]
*/ */
static void fix_coding_method_array(int sb, int channels, static int fix_coding_method_array(int sb, int channels,
sb_int8_array coding_method) sb_int8_array coding_method)
{ {
int j, k; int j, k;
int ch; int ch;
...@@ -541,6 +541,8 @@ static void fix_coding_method_array(int sb, int channels, ...@@ -541,6 +541,8 @@ static void fix_coding_method_array(int sb, int channels,
for (ch = 0; ch < channels; ch++) { for (ch = 0; ch < channels; ch++) {
for (j = 0; j < 64; ) { for (j = 0; j < 64; ) {
if (coding_method[ch][sb][j] < 8)
return -1;
if ((coding_method[ch][sb][j] - 8) > 22) { if ((coding_method[ch][sb][j] - 8) > 22) {
run = 1; run = 1;
case_val = 8; case_val = 8;
...@@ -586,6 +588,7 @@ static void fix_coding_method_array(int sb, int channels, ...@@ -586,6 +588,7 @@ static void fix_coding_method_array(int sb, int channels,
j += run; j += run;
} }
} }
return 0;
} }
/** /**
...@@ -844,16 +847,16 @@ static int synthfilt_build_sb_samples(QDM2Context *q, GetBitContext *gb, ...@@ -844,16 +847,16 @@ static int synthfilt_build_sb_samples(QDM2Context *q, GetBitContext *gb,
for (j = 0; j < 16; j++) for (j = 0; j < 16; j++)
sign_bits[j] = get_bits1 (gb); sign_bits[j] = get_bits1 (gb);
if (q->coding_method[0][sb][0] <= 0) {
av_log(NULL, AV_LOG_ERROR, "coding method invalid\n");
return AVERROR_INVALIDDATA;
}
for (j = 0; j < 64; j++) for (j = 0; j < 64; j++)
if (q->coding_method[1][sb][j] > q->coding_method[0][sb][j]) if (q->coding_method[1][sb][j] > q->coding_method[0][sb][j])
q->coding_method[0][sb][j] = q->coding_method[1][sb][j]; q->coding_method[0][sb][j] = q->coding_method[1][sb][j];
fix_coding_method_array(sb, q->nb_channels, q->coding_method); if (fix_coding_method_array(sb, q->nb_channels,
q->coding_method)) {
av_log(NULL, AV_LOG_ERROR, "coding method invalid\n");
build_sb_samples_from_noise(q, sb);
continue;
}
channels = 1; channels = 1;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment