1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-11-26 19:01:44 +02:00

avcodec/wavarc: fix 8bit decoding

This commit is contained in:
Paul B Mahol 2023-02-06 18:07:35 +01:00
parent d7c2da1f8d
commit 64b242d030
2 changed files with 5 additions and 10 deletions

View File

@ -68,9 +68,9 @@ static av_cold int wavarc_init(AVCodecContext *avctx)
av_channel_layout_default(&avctx->ch_layout, AV_RL16(avctx->extradata + 38)); av_channel_layout_default(&avctx->ch_layout, AV_RL16(avctx->extradata + 38));
avctx->sample_rate = AV_RL32(avctx->extradata + 40); avctx->sample_rate = AV_RL32(avctx->extradata + 40);
switch (avctx->extradata[36]) { switch (AV_RL16(avctx->extradata + 38)) {
case 0: avctx->sample_fmt = AV_SAMPLE_FMT_U8P; break; case 1: avctx->sample_fmt = AV_SAMPLE_FMT_U8P; break;
case 1: avctx->sample_fmt = AV_SAMPLE_FMT_S16P; break; case 2: avctx->sample_fmt = AV_SAMPLE_FMT_S16P; break;
} }
s->shift = 0; s->shift = 0;
@ -411,7 +411,7 @@ fail:
const int *src = s->samples[ch] + s->offset; const int *src = s->samples[ch] + s->offset;
for (int n = 0; n < frame->nb_samples; n++) for (int n = 0; n < frame->nb_samples; n++)
dst[n] = src[n] * (1 << s->shift); dst[n] = src[n] * (1 << s->shift) + 0x80U;
} }
break; break;
case AV_SAMPLE_FMT_S16P: case AV_SAMPLE_FMT_S16P:

View File

@ -89,7 +89,7 @@ static int wavarc_read_header(AVFormatContext *s)
id = avio_rl32(pb); id = avio_rl32(pb);
if (id != MKTAG('d','a','t','a')) if (id != MKTAG('d','a','t','a'))
avio_skip(pb, avio_rl32(pb)); avio_skip(pb, avio_rl32(pb));
} while (id != MKTAG('d','a','t','a')); } while (id != MKTAG('d','a','t','a') && !avio_feof(pb));
avio_skip(pb, 4); avio_skip(pb, 4);
if (AV_RL32(par->extradata + 16) != MKTAG('R','I','F','F')) if (AV_RL32(par->extradata + 16) != MKTAG('R','I','F','F'))
@ -104,11 +104,6 @@ static int wavarc_read_header(AVFormatContext *s)
avpriv_set_pts_info(st, 64, 1, par->sample_rate); avpriv_set_pts_info(st, 64, 1, par->sample_rate);
st->start_time = 0; st->start_time = 0;
switch (par->extradata[36]) {
case 0: par->format = AV_SAMPLE_FMT_U8P; break;
case 1: par->format = AV_SAMPLE_FMT_S16P; break;
}
return 0; return 0;
} }