nut: support pcm codecs not mapped in avi
The native tags will be used when available.
This commit is contained in:
@@ -50,7 +50,7 @@ to be read big-endian.
|
|||||||
@end multitable
|
@end multitable
|
||||||
|
|
||||||
<type> is S for signed integer, U for unsigned integer, F for IEEE float
|
<type> is S for signed integer, U for unsigned integer, F for IEEE float
|
||||||
<interleaving> is D for default, as a historical artefact.
|
<interleaving> is D for default, P is for planar.
|
||||||
<bits> is 8/16/24/32
|
<bits> is 8/16/24/32
|
||||||
|
|
||||||
@example
|
@example
|
||||||
|
|||||||
@@ -90,8 +90,33 @@ const AVCodecTag ff_nut_video_tags[] = {
|
|||||||
{ AV_CODEC_ID_NONE , 0 }
|
{ AV_CODEC_ID_NONE , 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const AVCodecTag ff_nut_audio_tags[] = {
|
||||||
|
{ AV_CODEC_ID_PCM_ALAW, MKTAG('A', 'L', 'A', 'W') },
|
||||||
|
{ AV_CODEC_ID_PCM_MULAW, MKTAG('U', 'L', 'A', 'W') },
|
||||||
|
{ AV_CODEC_ID_PCM_F32BE, MKTAG(32 , 'D', 'F', 'P') },
|
||||||
|
{ AV_CODEC_ID_PCM_F32LE, MKTAG('P', 'F', 'D', 32 ) },
|
||||||
|
{ AV_CODEC_ID_PCM_F64BE, MKTAG(64 , 'D', 'F', 'P') },
|
||||||
|
{ AV_CODEC_ID_PCM_F64LE, MKTAG('P', 'F', 'D', 64 ) },
|
||||||
|
{ AV_CODEC_ID_PCM_S16BE, MKTAG(16 , 'D', 'S', 'P') },
|
||||||
|
{ AV_CODEC_ID_PCM_S16LE, MKTAG('P', 'S', 'D', 16 ) },
|
||||||
|
{ AV_CODEC_ID_PCM_S24BE, MKTAG(24 , 'D', 'S', 'P') },
|
||||||
|
{ AV_CODEC_ID_PCM_S24LE, MKTAG('P', 'S', 'D', 24 ) },
|
||||||
|
{ AV_CODEC_ID_PCM_S32BE, MKTAG(32 , 'D', 'S', 'P') },
|
||||||
|
{ AV_CODEC_ID_PCM_S32LE, MKTAG('P', 'S', 'D', 32 ) },
|
||||||
|
{ AV_CODEC_ID_PCM_S8, MKTAG('P', 'S', 'D', 8 ) },
|
||||||
|
{ AV_CODEC_ID_PCM_U16BE, MKTAG(16 , 'D', 'U', 'P') },
|
||||||
|
{ AV_CODEC_ID_PCM_U16LE, MKTAG('P', 'U', 'D', 16 ) },
|
||||||
|
{ AV_CODEC_ID_PCM_U24BE, MKTAG(24 , 'D', 'U', 'P') },
|
||||||
|
{ AV_CODEC_ID_PCM_U24LE, MKTAG('P', 'U', 'D', 24 ) },
|
||||||
|
{ AV_CODEC_ID_PCM_U32BE, MKTAG(32 , 'D', 'U', 'P') },
|
||||||
|
{ AV_CODEC_ID_PCM_U32LE, MKTAG('P', 'U', 'D', 32 ) },
|
||||||
|
{ AV_CODEC_ID_PCM_U8, MKTAG('P', 'U', 'D', 8 ) },
|
||||||
|
{ AV_CODEC_ID_PCM_S16LE_PLANAR, MKTAG('P', 'S', 'P', 16 ) },
|
||||||
|
{ AV_CODEC_ID_NONE, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
const AVCodecTag * const ff_nut_codec_tags[] = {
|
const AVCodecTag * const ff_nut_codec_tags[] = {
|
||||||
ff_nut_video_tags, ff_nut_subtitle_tags,
|
ff_nut_video_tags, ff_nut_audio_tags, ff_nut_subtitle_tags,
|
||||||
ff_codec_bmp_tags, ff_codec_wav_tags, 0
|
ff_codec_bmp_tags, ff_codec_wav_tags, 0
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -105,6 +105,7 @@ typedef struct NUTContext {
|
|||||||
|
|
||||||
extern const AVCodecTag ff_nut_subtitle_tags[];
|
extern const AVCodecTag ff_nut_subtitle_tags[];
|
||||||
extern const AVCodecTag ff_nut_video_tags[];
|
extern const AVCodecTag ff_nut_video_tags[];
|
||||||
|
extern const AVCodecTag ff_nut_audio_tags[];
|
||||||
|
|
||||||
extern const AVCodecTag * const ff_nut_codec_tags[];
|
extern const AVCodecTag * const ff_nut_codec_tags[];
|
||||||
|
|
||||||
|
|||||||
@@ -358,7 +358,12 @@ static int decode_stream_header(NUTContext *nut)
|
|||||||
break;
|
break;
|
||||||
case 1:
|
case 1:
|
||||||
st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
|
st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
|
||||||
st->codec->codec_id = ff_codec_get_id(ff_codec_wav_tags, tmp);
|
st->codec->codec_id = av_codec_get_id((const AVCodecTag * const []) {
|
||||||
|
ff_nut_audio_tags,
|
||||||
|
ff_codec_wav_tags,
|
||||||
|
0
|
||||||
|
},
|
||||||
|
tmp);
|
||||||
break;
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
st->codec->codec_type = AVMEDIA_TYPE_SUBTITLE;
|
st->codec->codec_type = AVMEDIA_TYPE_SUBTITLE;
|
||||||
|
|||||||
Reference in New Issue
Block a user