forked from FFmpeg/FFmpeg
iff demuxer: 16SV support
Signed-off-by: Paul B Mahol <onemda@gmail.com>
This commit is contained in:
parent
1b43fc127c
commit
01eed8c607
2 changed files with 9 additions and 1 deletions
|
@ -2297,6 +2297,8 @@ void avcodec_default_free_buffers(AVCodecContext *avctx)
|
||||||
int av_get_exact_bits_per_sample(enum AVCodecID codec_id)
|
int av_get_exact_bits_per_sample(enum AVCodecID codec_id)
|
||||||
{
|
{
|
||||||
switch (codec_id) {
|
switch (codec_id) {
|
||||||
|
case AV_CODEC_ID_8SVX_EXP:
|
||||||
|
case AV_CODEC_ID_8SVX_FIB:
|
||||||
case AV_CODEC_ID_ADPCM_CT:
|
case AV_CODEC_ID_ADPCM_CT:
|
||||||
case AV_CODEC_ID_ADPCM_IMA_APC:
|
case AV_CODEC_ID_ADPCM_IMA_APC:
|
||||||
case AV_CODEC_ID_ADPCM_IMA_EA_SEAD:
|
case AV_CODEC_ID_ADPCM_IMA_EA_SEAD:
|
||||||
|
|
|
@ -37,6 +37,7 @@
|
||||||
#include "internal.h"
|
#include "internal.h"
|
||||||
|
|
||||||
#define ID_8SVX MKTAG('8','S','V','X')
|
#define ID_8SVX MKTAG('8','S','V','X')
|
||||||
|
#define ID_16SV MKTAG('1','6','S','V')
|
||||||
#define ID_VHDR MKTAG('V','H','D','R')
|
#define ID_VHDR MKTAG('V','H','D','R')
|
||||||
#define ID_ATAK MKTAG('A','T','A','K')
|
#define ID_ATAK MKTAG('A','T','A','K')
|
||||||
#define ID_RLSE MKTAG('R','L','S','E')
|
#define ID_RLSE MKTAG('R','L','S','E')
|
||||||
|
@ -123,6 +124,7 @@ static int iff_probe(AVProbeData *p)
|
||||||
|
|
||||||
if ( AV_RL32(d) == ID_FORM &&
|
if ( AV_RL32(d) == ID_FORM &&
|
||||||
(AV_RL32(d+8) == ID_8SVX ||
|
(AV_RL32(d+8) == ID_8SVX ||
|
||||||
|
AV_RL32(d+8) == ID_16SV ||
|
||||||
AV_RL32(d+8) == ID_PBM ||
|
AV_RL32(d+8) == ID_PBM ||
|
||||||
AV_RL32(d+8) == ID_ACBM ||
|
AV_RL32(d+8) == ID_ACBM ||
|
||||||
AV_RL32(d+8) == ID_DEEP ||
|
AV_RL32(d+8) == ID_DEEP ||
|
||||||
|
@ -301,6 +303,9 @@ static int iff_read_header(AVFormatContext *s)
|
||||||
case AVMEDIA_TYPE_AUDIO:
|
case AVMEDIA_TYPE_AUDIO:
|
||||||
avpriv_set_pts_info(st, 32, 1, st->codec->sample_rate);
|
avpriv_set_pts_info(st, 32, 1, st->codec->sample_rate);
|
||||||
|
|
||||||
|
if (st->codec->codec_tag == ID_16SV)
|
||||||
|
st->codec->codec_id = AV_CODEC_ID_PCM_S16BE_PLANAR;
|
||||||
|
else {
|
||||||
switch (iff->svx8_compression) {
|
switch (iff->svx8_compression) {
|
||||||
case COMP_NONE:
|
case COMP_NONE:
|
||||||
st->codec->codec_id = AV_CODEC_ID_PCM_S8_PLANAR;
|
st->codec->codec_id = AV_CODEC_ID_PCM_S8_PLANAR;
|
||||||
|
@ -316,8 +321,9 @@ static int iff_read_header(AVFormatContext *s)
|
||||||
"Unknown SVX8 compression method '%d'\n", iff->svx8_compression);
|
"Unknown SVX8 compression method '%d'\n", iff->svx8_compression);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
st->codec->bits_per_coded_sample = iff->svx8_compression == COMP_NONE ? 8 : 4;
|
st->codec->bits_per_coded_sample = av_get_bits_per_sample(st->codec->codec_id);
|
||||||
st->codec->bit_rate = st->codec->channels * st->codec->sample_rate * st->codec->bits_per_coded_sample;
|
st->codec->bit_rate = st->codec->channels * st->codec->sample_rate * st->codec->bits_per_coded_sample;
|
||||||
st->codec->block_align = st->codec->channels * st->codec->bits_per_coded_sample;
|
st->codec->block_align = st->codec->channels * st->codec->bits_per_coded_sample;
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Add table
Reference in a new issue