[FFmpeg-cvslog] qdm2: Conceal broken samples
Luca Barbato
git at videolan.org
Tue Aug 27 18:02:14 CEST 2013
ffmpeg | branch: release/1.1 | Luca Barbato <lu_zero at gentoo.org> | Tue Jul 9 14:59:33 2013 +0200| [9f1c3cd5ad07812a70c7a21c4b5f2d6367e02a35] | committer: Luca Barbato
qdm2: Conceal broken samples
Reported-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
CC: libav-stable at libav.org
(cherry picked from commit 4ecdb5ed44591aba8a0ddb7d443cace836f761f6)
Signed-off-by: Luca Barbato <lu_zero at gentoo.org>
> http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=9f1c3cd5ad07812a70c7a21c4b5f2d6367e02a35
---
libavcodec/qdm2.c | 13 ++++++++++---
1 file changed, 10 insertions(+), 3 deletions(-)
diff --git a/libavcodec/qdm2.c b/libavcodec/qdm2.c
index 4906684..99775d2 100644
--- a/libavcodec/qdm2.c
+++ b/libavcodec/qdm2.c
@@ -528,8 +528,8 @@ static void build_sb_samples_from_noise(QDM2Context *q, int sb)
* @param channels number of channels
* @param coding_method q->coding_method[0][0][0]
*/
-static void fix_coding_method_array(int sb, int channels,
- sb_int8_array coding_method)
+static int fix_coding_method_array(int sb, int channels,
+ sb_int8_array coding_method)
{
int j, k;
int ch;
@@ -537,6 +537,8 @@ static void fix_coding_method_array(int sb, int channels,
for (ch = 0; ch < channels; ch++) {
for (j = 0; j < 64; ) {
+ if (coding_method[ch][sb][j] < 8)
+ return -1;
if ((coding_method[ch][sb][j] - 8) > 22) {
run = 1;
case_val = 8;
@@ -582,6 +584,7 @@ static void fix_coding_method_array(int sb, int channels,
j += run;
}
}
+ return 0;
}
/**
@@ -843,7 +846,11 @@ static void synthfilt_build_sb_samples(QDM2Context *q, GetBitContext *gb,
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];
- fix_coding_method_array(sb, q->nb_channels, q->coding_method);
+ if (fix_coding_method_array(sb, q->nb_channels,
+ q->coding_method)) {
+ build_sb_samples_from_noise(q, sb);
+ continue;
+ }
channels = 1;
}
More information about the ffmpeg-cvslog
mailing list