1
+ #include "audio_codec_string.h"
2
+ #include "libavformat/internal.h"
3
+ #include "libavutil/avstring.h"
4
+ #include "libavutil/intreadwrite.h"
5
+
6
+ // sync with ff_mp4_obj_type in isom.c
7
+ const AVCodecTag _ff_mp4_obj_type [] = {
8
+ { AV_CODEC_ID_MOV_TEXT , 0x08 },
9
+ { AV_CODEC_ID_MPEG4 , 0x20 },
10
+ { AV_CODEC_ID_H264 , 0x21 },
11
+ { AV_CODEC_ID_HEVC , 0x23 },
12
+ { AV_CODEC_ID_AAC , 0x40 },
13
+ { AV_CODEC_ID_MP4ALS , 0x40 }, /* 14496-3 ALS */
14
+ { AV_CODEC_ID_MPEG2VIDEO , 0x61 }, /* MPEG-2 Main */
15
+ { AV_CODEC_ID_MPEG2VIDEO , 0x60 }, /* MPEG-2 Simple */
16
+ { AV_CODEC_ID_MPEG2VIDEO , 0x62 }, /* MPEG-2 SNR */
17
+ { AV_CODEC_ID_MPEG2VIDEO , 0x63 }, /* MPEG-2 Spatial */
18
+ { AV_CODEC_ID_MPEG2VIDEO , 0x64 }, /* MPEG-2 High */
19
+ { AV_CODEC_ID_MPEG2VIDEO , 0x65 }, /* MPEG-2 422 */
20
+ { AV_CODEC_ID_AAC , 0x66 }, /* MPEG-2 AAC Main */
21
+ { AV_CODEC_ID_AAC , 0x67 }, /* MPEG-2 AAC Low */
22
+ { AV_CODEC_ID_AAC , 0x68 }, /* MPEG-2 AAC SSR */
23
+ { AV_CODEC_ID_MP3 , 0x69 }, /* 13818-3 */
24
+ { AV_CODEC_ID_MP2 , 0x69 }, /* 11172-3 */
25
+ { AV_CODEC_ID_MPEG1VIDEO , 0x6A }, /* 11172-2 */
26
+ { AV_CODEC_ID_MP3 , 0x6B }, /* 11172-3 */
27
+ { AV_CODEC_ID_MJPEG , 0x6C }, /* 10918-1 */
28
+ { AV_CODEC_ID_PNG , 0x6D },
29
+ { AV_CODEC_ID_JPEG2000 , 0x6E }, /* 15444-1 */
30
+ { AV_CODEC_ID_VC1 , 0xA3 },
31
+ { AV_CODEC_ID_DIRAC , 0xA4 },
32
+ { AV_CODEC_ID_AC3 , 0xA5 },
33
+ { AV_CODEC_ID_EAC3 , 0xA6 },
34
+ { AV_CODEC_ID_DTS , 0xA9 }, /* mp4ra.org */
35
+ { AV_CODEC_ID_OPUS , 0xAD }, /* mp4ra.org */
36
+ { AV_CODEC_ID_VP9 , 0xB1 }, /* mp4ra.org */
37
+ { AV_CODEC_ID_TSCC2 , 0xD0 }, /* nonstandard, camtasia uses it */
38
+ { AV_CODEC_ID_EVRC , 0xD1 }, /* nonstandard, pvAuthor uses it */
39
+ { AV_CODEC_ID_VORBIS , 0xDD }, /* nonstandard, gpac uses it */
40
+ { AV_CODEC_ID_DVD_SUBTITLE , 0xE0 }, /* nonstandard, see unsupported-embedded-subs-2.mp4 */
41
+ { AV_CODEC_ID_QCELP , 0xE1 },
42
+ { AV_CODEC_ID_MPEG4SYSTEMS , 0x01 },
43
+ { AV_CODEC_ID_MPEG4SYSTEMS , 0x02 },
44
+ { AV_CODEC_ID_NONE , 0 },
45
+ };
46
+
47
+ void set_aac_codec_string (char * str , size_t str_size , AVCodecParameters * par )
48
+ {
49
+
50
+ av_strlcpy (str , "mp4a" , str_size );
51
+
52
+ const AVCodecTag * tags [1 ] = { NULL };
53
+ uint32_t oti ;
54
+
55
+ tags [0 ] = _ff_mp4_obj_type ;
56
+ oti = av_codec_get_tag (tags , par -> codec_id );
57
+
58
+ if (oti )
59
+ av_strlcatf (str , str_size , ".%02" PRIx32 , oti );
60
+ else
61
+ return ;
62
+
63
+ if (par -> extradata_size >= 2 )
64
+ {
65
+ int aot = par -> extradata [0 ] >> 3 ;
66
+ if (aot == 31 )
67
+ aot = ((AV_RB16 (par -> extradata ) >> 5 ) & 0x3f ) + 32 ;
68
+ av_strlcatf (str , str_size , ".%d" , aot );
69
+ }
70
+ }
71
+
72
+ void set_audio_codec_string (char * str , size_t str_size , AVCodecParameters * par )
73
+ {
74
+ switch (par -> codec_id )
75
+ {
76
+ case AV_CODEC_ID_FLAC :
77
+ av_strlcpy (str , "flac" , str_size );
78
+ break ;
79
+ case AV_CODEC_ID_MP3 :
80
+ av_strlcpy (str , "mp3" , str_size );
81
+ break ;
82
+ case AV_CODEC_ID_AAC :
83
+ set_aac_codec_string (str , str_size , par );
84
+ break ;
85
+ case AV_CODEC_ID_OPUS :
86
+ av_strlcpy (str , "opus" , str_size );
87
+ break ;
88
+ case AV_CODEC_ID_VORBIS :
89
+ av_strlcpy (str , "vorbis" , str_size );
90
+ break ;
91
+ case AV_CODEC_ID_PCM_MULAW :
92
+ av_strlcpy (str , "ulaw" , str_size );
93
+ break ;
94
+ case AV_CODEC_ID_PCM_ALAW :
95
+ av_strlcpy (str , "alaw" , str_size );
96
+ break ;
97
+ case AV_CODEC_ID_PCM_U8 :
98
+ av_strlcpy (str , "pcm-u8" , str_size );
99
+ break ;
100
+ case AV_CODEC_ID_PCM_S16LE :
101
+ case AV_CODEC_ID_PCM_S16BE :
102
+ av_strlcpy (str , "pcm-s16" , str_size );
103
+ break ;
104
+ case AV_CODEC_ID_PCM_S24LE :
105
+ case AV_CODEC_ID_PCM_S24BE :
106
+ av_strlcpy (str , "pcm-s24" , str_size );
107
+ break ;
108
+ case AV_CODEC_ID_PCM_S32LE :
109
+ case AV_CODEC_ID_PCM_S32BE :
110
+ av_strlcpy (str , "pcm-s32" , str_size );
111
+ break ;
112
+ case AV_CODEC_ID_PCM_F32LE :
113
+ case AV_CODEC_ID_PCM_F32BE :
114
+ av_strlcpy (str , "pcm-f32" , str_size );
115
+ break ;
116
+ default :
117
+ av_strlcpy (str , "undf" , str_size );
118
+ break ;
119
+ }
120
+ }
0 commit comments