AVPKit
ICodec.h
1 /*******************************************************************************
2  * Copyright (c) 2024, 2026, Olivier Ayache. All rights reserved.
3  *
4  * This file is part of AVPKit.
5  *
6  * AVPKit is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU Lesser General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * AVPKit is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with AVPKit. If not, see <http://www.gnu.org/licenses/>.
18  *******************************************************************************/
19 
20 #ifndef ICODEC_H_
21 #define ICODEC_H_
22 
23 #include <com/avpkit/ferry/RefCounted.h>
24 #include <com/avpkit/core/AVPKit.h>
25 #include <com/avpkit/core/IRational.h>
26 #include <com/avpkit/core/IPixelFormat.h>
27 #include <com/avpkit/core/IAudioSamples.h>
28 
29 extern "C"{
30  #include <libavutil/version.h>
31  #include <libavcodec/version.h>
32 }
33 
34 //#ifndef LIBAVCODEC_VERSION_MAJOR
35 //#define LIBAVCODEC_VERSION_MAJOR 57
36 //#endif // ! LIBAVCODEC_VERSION_MAJOR
37 
38 namespace com
39 {
40 namespace avpkit
41 {
42 namespace core
43 {
44 
45 class IContainerFormat;
52 class VS_API_AVPKIT ICodec : public com::avpkit::ferry::RefCounted
53 {
54 public:
60  typedef enum ID
61  {
62  AV_CODEC_ID_NONE,
63 
64  /* video codecs */
65  AV_CODEC_ID_MPEG1VIDEO,
67  AV_CODEC_ID_H261,
68  AV_CODEC_ID_H263,
69  AV_CODEC_ID_RV10,
70  AV_CODEC_ID_RV20,
71  AV_CODEC_ID_MJPEG,
72  AV_CODEC_ID_MJPEGB,
73  AV_CODEC_ID_LJPEG,
74  AV_CODEC_ID_SP5X,
75  AV_CODEC_ID_JPEGLS,
76  AV_CODEC_ID_MPEG4,
77  AV_CODEC_ID_RAWVIDEO,
78  AV_CODEC_ID_MSMPEG4V1,
79  AV_CODEC_ID_MSMPEG4V2,
80  AV_CODEC_ID_MSMPEG4V3,
81  AV_CODEC_ID_WMV1,
82  AV_CODEC_ID_WMV2,
83  AV_CODEC_ID_H263P,
84  AV_CODEC_ID_H263I,
85  AV_CODEC_ID_FLV1,
86  AV_CODEC_ID_SVQ1,
87  AV_CODEC_ID_SVQ3,
88  AV_CODEC_ID_DVVIDEO,
89  AV_CODEC_ID_HUFFYUV,
90  AV_CODEC_ID_CYUV,
91  AV_CODEC_ID_H264,
92  AV_CODEC_ID_INDEO3,
93  AV_CODEC_ID_VP3,
94  AV_CODEC_ID_THEORA,
95  AV_CODEC_ID_ASV1,
96  AV_CODEC_ID_ASV2,
97  AV_CODEC_ID_FFV1,
98  AV_CODEC_ID_4XM,
99  AV_CODEC_ID_VCR1,
100  AV_CODEC_ID_CLJR,
101  AV_CODEC_ID_MDEC,
102  AV_CODEC_ID_ROQ,
103  AV_CODEC_ID_INTERPLAY_VIDEO,
104  AV_CODEC_ID_XAN_WC3,
105  AV_CODEC_ID_XAN_WC4,
106  AV_CODEC_ID_RPZA,
107  AV_CODEC_ID_CINEPAK,
108  AV_CODEC_ID_WS_VQA,
109  AV_CODEC_ID_MSRLE,
110  AV_CODEC_ID_MSVIDEO1,
111  AV_CODEC_ID_IDCIN,
112  AV_CODEC_ID_8BPS,
113  AV_CODEC_ID_SMC,
114  AV_CODEC_ID_FLIC,
115  AV_CODEC_ID_TRUEMOTION1,
116  AV_CODEC_ID_VMDVIDEO,
117  AV_CODEC_ID_MSZH,
118  AV_CODEC_ID_ZLIB,
119  AV_CODEC_ID_QTRLE,
120  AV_CODEC_ID_TSCC,
121  AV_CODEC_ID_ULTI,
122  AV_CODEC_ID_QDRAW,
123  AV_CODEC_ID_VIXL,
124  AV_CODEC_ID_QPEG,
125  AV_CODEC_ID_PNG,
126  AV_CODEC_ID_PPM,
127  AV_CODEC_ID_PBM,
128  AV_CODEC_ID_PGM,
129  AV_CODEC_ID_PGMYUV,
130  AV_CODEC_ID_PAM,
131  AV_CODEC_ID_FFVHUFF,
132  AV_CODEC_ID_RV30,
133  AV_CODEC_ID_RV40,
134  AV_CODEC_ID_VC1,
135  AV_CODEC_ID_WMV3,
136  AV_CODEC_ID_LOCO,
137  AV_CODEC_ID_WNV1,
138  AV_CODEC_ID_AASC,
139  AV_CODEC_ID_INDEO2,
140  AV_CODEC_ID_FRAPS,
141  AV_CODEC_ID_TRUEMOTION2,
142  AV_CODEC_ID_BMP,
143  AV_CODEC_ID_CSCD,
144  AV_CODEC_ID_MMVIDEO,
145  AV_CODEC_ID_ZMBV,
146  AV_CODEC_ID_AVS,
147  AV_CODEC_ID_SMACKVIDEO,
148  AV_CODEC_ID_NUV,
149  AV_CODEC_ID_KMVC,
150  AV_CODEC_ID_FLASHSV,
151  AV_CODEC_ID_CAVS,
152  AV_CODEC_ID_JPEG2000,
153  AV_CODEC_ID_VMNC,
154  AV_CODEC_ID_VP5,
155  AV_CODEC_ID_VP6,
156  AV_CODEC_ID_VP6F,
157  AV_CODEC_ID_TARGA,
158  AV_CODEC_ID_DSICINVIDEO,
159  AV_CODEC_ID_TIERTEXSEQVIDEO,
160  AV_CODEC_ID_TIFF,
161  AV_CODEC_ID_GIF,
162  AV_CODEC_ID_DXA,
163  AV_CODEC_ID_DNXHD,
164  AV_CODEC_ID_THP,
165  AV_CODEC_ID_SGI,
166  AV_CODEC_ID_C93,
167  AV_CODEC_ID_BETHSOFTVID,
168  AV_CODEC_ID_PTX,
169  AV_CODEC_ID_TXD,
170  AV_CODEC_ID_VP6A,
171  AV_CODEC_ID_AMV,
172  AV_CODEC_ID_VB,
173  AV_CODEC_ID_PCX,
174  AV_CODEC_ID_SUNRAST,
175  AV_CODEC_ID_INDEO4,
176  AV_CODEC_ID_INDEO5,
177  AV_CODEC_ID_MIMIC,
178  AV_CODEC_ID_RL2,
179  AV_CODEC_ID_ESCAPE124,
180  AV_CODEC_ID_DIRAC,
181  AV_CODEC_ID_BFI,
182  AV_CODEC_ID_CMV,
183  AV_CODEC_ID_MOTIONPIXELS,
184  AV_CODEC_ID_TGV,
185  AV_CODEC_ID_TGQ,
186  AV_CODEC_ID_TQI,
187  AV_CODEC_ID_AURA,
188  AV_CODEC_ID_AURA2,
189  AV_CODEC_ID_V210X,
190  AV_CODEC_ID_TMV,
191  AV_CODEC_ID_V210,
192  AV_CODEC_ID_DPX,
193  AV_CODEC_ID_MAD,
194  AV_CODEC_ID_FRWU,
195  AV_CODEC_ID_FLASHSV2,
196  AV_CODEC_ID_CDGRAPHICS,
197  AV_CODEC_ID_R210,
198  AV_CODEC_ID_ANM,
199  AV_CODEC_ID_BINKVIDEO,
200  AV_CODEC_ID_IFF_ILBM,
201 #define AV_CODEC_ID_IFF_BYTERUN1 AV_CODEC_ID_IFF_ILBM
202  AV_CODEC_ID_KGV1,
203  AV_CODEC_ID_YOP,
204  AV_CODEC_ID_VP8,
205  AV_CODEC_ID_PICTOR,
206  AV_CODEC_ID_ANSI,
207  AV_CODEC_ID_A64_MULTI,
208  AV_CODEC_ID_A64_MULTI5,
209  AV_CODEC_ID_R10K,
210  AV_CODEC_ID_MXPEG,
211  AV_CODEC_ID_LAGARITH,
212  AV_CODEC_ID_PRORES,
213  AV_CODEC_ID_JV,
214  AV_CODEC_ID_DFA,
215  AV_CODEC_ID_WMV3IMAGE,
216  AV_CODEC_ID_VC1IMAGE,
217  AV_CODEC_ID_UTVIDEO,
218  AV_CODEC_ID_BMV_VIDEO,
219  AV_CODEC_ID_VBLE,
220  AV_CODEC_ID_DXTORY,
221  AV_CODEC_ID_V410,
222  AV_CODEC_ID_XWD,
223  AV_CODEC_ID_CDXL,
224  AV_CODEC_ID_XBM,
225  AV_CODEC_ID_ZEROCODEC,
226  AV_CODEC_ID_MSS1,
227  AV_CODEC_ID_MSA1,
228  AV_CODEC_ID_TSCC2,
229  AV_CODEC_ID_MTS2,
230  AV_CODEC_ID_CLLC,
231  AV_CODEC_ID_MSS2,
232  AV_CODEC_ID_VP9,
233  AV_CODEC_ID_AIC,
234  AV_CODEC_ID_ESCAPE130,
235  AV_CODEC_ID_G2M,
236  AV_CODEC_ID_WEBP,
237  AV_CODEC_ID_HNM4_VIDEO,
238  AV_CODEC_ID_HEVC,
239 #define AV_CODEC_ID_H265 AV_CODEC_ID_HEVC
240  AV_CODEC_ID_FIC,
241  AV_CODEC_ID_ALIAS_PIX,
242  AV_CODEC_ID_BRENDER_PIX,
243  AV_CODEC_ID_PAF_VIDEO,
244  AV_CODEC_ID_EXR,
245  AV_CODEC_ID_VP7,
246  AV_CODEC_ID_SANM,
247  AV_CODEC_ID_SGIRLE,
248  AV_CODEC_ID_MVC1,
249  AV_CODEC_ID_MVC2,
250  AV_CODEC_ID_HQX,
251  AV_CODEC_ID_TDSC,
252  AV_CODEC_ID_HQ_HQA,
253  AV_CODEC_ID_HAP,
254  AV_CODEC_ID_DDS,
255  AV_CODEC_ID_DXV,
256  AV_CODEC_ID_SCREENPRESSO,
257  AV_CODEC_ID_RSCC,
258  AV_CODEC_ID_AVS2,
259 
260  AV_CODEC_ID_Y41P = 0x8000,
261  AV_CODEC_ID_AVRP,
262  AV_CODEC_ID_012V,
263  AV_CODEC_ID_AVUI,
264  AV_CODEC_ID_AYUV,
265  AV_CODEC_ID_TARGA_Y216,
266  AV_CODEC_ID_V308,
267  AV_CODEC_ID_V408,
268  AV_CODEC_ID_YUV4,
269  AV_CODEC_ID_AVRN,
270  AV_CODEC_ID_CPIA,
271  AV_CODEC_ID_XFACE,
272  AV_CODEC_ID_SNOW,
273  AV_CODEC_ID_SMVJPEG,
274  AV_CODEC_ID_APNG,
275  AV_CODEC_ID_DAALA,
276  AV_CODEC_ID_CFHD,
277  AV_CODEC_ID_TRUEMOTION2RT,
278  AV_CODEC_ID_M101,
279  AV_CODEC_ID_MAGICYUV,
280  AV_CODEC_ID_SHEERVIDEO,
281  AV_CODEC_ID_YLC,
282  AV_CODEC_ID_PSD,
283  AV_CODEC_ID_PIXLET,
284  AV_CODEC_ID_SPEEDHQ,
285  AV_CODEC_ID_FMVC,
286  AV_CODEC_ID_SCPR,
287  AV_CODEC_ID_CLEARVIDEO,
288  AV_CODEC_ID_XPM,
289  AV_CODEC_ID_AV1,
290  AV_CODEC_ID_BITPACKED,
291  AV_CODEC_ID_MSCC,
292  AV_CODEC_ID_SRGC,
293  AV_CODEC_ID_SVG,
294  AV_CODEC_ID_GDV,
295  AV_CODEC_ID_FITS,
296  AV_CODEC_ID_IMM4,
297  AV_CODEC_ID_PROSUMER,
298  AV_CODEC_ID_MWSC,
299  AV_CODEC_ID_WCMV,
300  AV_CODEC_ID_RASC,
301  AV_CODEC_ID_HYMT,
302  AV_CODEC_ID_ARBC,
303  AV_CODEC_ID_AGM,
304  AV_CODEC_ID_LSCR,
305  AV_CODEC_ID_VP4,
306  AV_CODEC_ID_IMM5,
307  AV_CODEC_ID_MVDV,
308  AV_CODEC_ID_MVHA,
309  AV_CODEC_ID_CDTOONS,
310  AV_CODEC_ID_MV30,
311  AV_CODEC_ID_NOTCHLC,
312  AV_CODEC_ID_PFM,
313 
314  /* various PCM "codecs" */
315  AV_CODEC_ID_FIRST_AUDIO = 0x10000,
316  AV_CODEC_ID_PCM_S16LE = 0x10000,
317  AV_CODEC_ID_PCM_S16BE,
318  AV_CODEC_ID_PCM_U16LE,
319  AV_CODEC_ID_PCM_U16BE,
320  AV_CODEC_ID_PCM_S8,
321  AV_CODEC_ID_PCM_U8,
322  AV_CODEC_ID_PCM_MULAW,
323  AV_CODEC_ID_PCM_ALAW,
324  AV_CODEC_ID_PCM_S32LE,
325  AV_CODEC_ID_PCM_S32BE,
326  AV_CODEC_ID_PCM_U32LE,
327  AV_CODEC_ID_PCM_U32BE,
328  AV_CODEC_ID_PCM_S24LE,
329  AV_CODEC_ID_PCM_S24BE,
330  AV_CODEC_ID_PCM_U24LE,
331  AV_CODEC_ID_PCM_U24BE,
332  AV_CODEC_ID_PCM_S24DAUD,
333  AV_CODEC_ID_PCM_ZORK,
334  AV_CODEC_ID_PCM_S16LE_PLANAR,
335  AV_CODEC_ID_PCM_DVD,
336  AV_CODEC_ID_PCM_F32BE,
337  AV_CODEC_ID_PCM_F32LE,
338  AV_CODEC_ID_PCM_F64BE,
339  AV_CODEC_ID_PCM_F64LE,
340  AV_CODEC_ID_PCM_BLURAY,
341  AV_CODEC_ID_PCM_LXF,
342  AV_CODEC_ID_S302M,
343  AV_CODEC_ID_PCM_S8_PLANAR,
344  AV_CODEC_ID_PCM_S24LE_PLANAR,
345  AV_CODEC_ID_PCM_S32LE_PLANAR,
346  AV_CODEC_ID_PCM_S16BE_PLANAR,
347 
348  AV_CODEC_ID_PCM_S64LE = 0x10800,
349  AV_CODEC_ID_PCM_S64BE,
350  AV_CODEC_ID_PCM_F16LE,
351  AV_CODEC_ID_PCM_F24LE,
352  AV_CODEC_ID_PCM_VIDC,
353 
354  /* various ADPCM codecs */
355  AV_CODEC_ID_ADPCM_IMA_QT = 0x11000,
356  AV_CODEC_ID_ADPCM_IMA_WAV,
357  AV_CODEC_ID_ADPCM_IMA_DK3,
358  AV_CODEC_ID_ADPCM_IMA_DK4,
359  AV_CODEC_ID_ADPCM_IMA_WS,
360  AV_CODEC_ID_ADPCM_IMA_SMJPEG,
361  AV_CODEC_ID_ADPCM_MS,
362  AV_CODEC_ID_ADPCM_4XM,
363  AV_CODEC_ID_ADPCM_XA,
364  AV_CODEC_ID_ADPCM_ADX,
365  AV_CODEC_ID_ADPCM_EA,
366  AV_CODEC_ID_ADPCM_G726,
367  AV_CODEC_ID_ADPCM_CT,
368  AV_CODEC_ID_ADPCM_SWF,
369  AV_CODEC_ID_ADPCM_YAMAHA,
370  AV_CODEC_ID_ADPCM_SBPRO_4,
371  AV_CODEC_ID_ADPCM_SBPRO_3,
372  AV_CODEC_ID_ADPCM_SBPRO_2,
373  AV_CODEC_ID_ADPCM_THP,
374  AV_CODEC_ID_ADPCM_IMA_AMV,
375  AV_CODEC_ID_ADPCM_EA_R1,
376  AV_CODEC_ID_ADPCM_EA_R3,
377  AV_CODEC_ID_ADPCM_EA_R2,
378  AV_CODEC_ID_ADPCM_IMA_EA_SEAD,
379  AV_CODEC_ID_ADPCM_IMA_EA_EACS,
380  AV_CODEC_ID_ADPCM_EA_XAS,
381  AV_CODEC_ID_ADPCM_EA_MAXIS_XA,
382  AV_CODEC_ID_ADPCM_IMA_ISS,
383  AV_CODEC_ID_ADPCM_G722,
384  AV_CODEC_ID_ADPCM_IMA_APC,
385  AV_CODEC_ID_ADPCM_VIMA,
386 
387  AV_CODEC_ID_ADPCM_AFC = 0x11800,
388  AV_CODEC_ID_ADPCM_IMA_OKI,
389  AV_CODEC_ID_ADPCM_DTK,
390  AV_CODEC_ID_ADPCM_IMA_RAD,
391  AV_CODEC_ID_ADPCM_G726LE,
392  AV_CODEC_ID_ADPCM_THP_LE,
393  AV_CODEC_ID_ADPCM_PSX,
394  AV_CODEC_ID_ADPCM_AICA,
395  AV_CODEC_ID_ADPCM_IMA_DAT4,
396  AV_CODEC_ID_ADPCM_MTAF,
397  AV_CODEC_ID_ADPCM_AGM,
398  AV_CODEC_ID_ADPCM_ARGO,
399  AV_CODEC_ID_ADPCM_IMA_SSI,
400  AV_CODEC_ID_ADPCM_ZORK,
401  AV_CODEC_ID_ADPCM_IMA_APM,
402  AV_CODEC_ID_ADPCM_IMA_ALP,
403  AV_CODEC_ID_ADPCM_IMA_MTF,
404  AV_CODEC_ID_ADPCM_IMA_CUNNING,
405 
406  /* AMR */
407  AV_CODEC_ID_AMR_NB = 0x12000,
408  AV_CODEC_ID_AMR_WB,
409 
410  /* RealAudio codecs*/
411  AV_CODEC_ID_RA_144 = 0x13000,
412  AV_CODEC_ID_RA_288,
413 
414  /* various DPCM codecs */
415  AV_CODEC_ID_ROQ_DPCM = 0x14000,
416  AV_CODEC_ID_INTERPLAY_DPCM,
417  AV_CODEC_ID_XAN_DPCM,
418  AV_CODEC_ID_SOL_DPCM,
419 
420  AV_CODEC_ID_SDX2_DPCM = 0x14800,
421  AV_CODEC_ID_GREMLIN_DPCM,
422  AV_CODEC_ID_DERF_DPCM,
423 
424  /* audio codecs */
425  AV_CODEC_ID_MP2 = 0x15000,
427  AV_CODEC_ID_AAC,
428  AV_CODEC_ID_AC3,
429  AV_CODEC_ID_DTS,
430  AV_CODEC_ID_VORBIS,
431  AV_CODEC_ID_DVAUDIO,
432  AV_CODEC_ID_WMAV1,
433  AV_CODEC_ID_WMAV2,
434  AV_CODEC_ID_MACE3,
435  AV_CODEC_ID_MACE6,
436  AV_CODEC_ID_VMDAUDIO,
437  AV_CODEC_ID_FLAC,
438  AV_CODEC_ID_MP3ADU,
439  AV_CODEC_ID_MP3ON4,
440  AV_CODEC_ID_SHORTEN,
441  AV_CODEC_ID_ALAC,
442  AV_CODEC_ID_WESTWOOD_SND1,
444  AV_CODEC_ID_QDM2,
445  AV_CODEC_ID_COOK,
446  AV_CODEC_ID_TRUESPEECH,
447  AV_CODEC_ID_TTA,
448  AV_CODEC_ID_SMACKAUDIO,
449  AV_CODEC_ID_QCELP,
450  AV_CODEC_ID_WAVPACK,
451  AV_CODEC_ID_DSICINAUDIO,
452  AV_CODEC_ID_IMC,
453  AV_CODEC_ID_MUSEPACK7,
454  AV_CODEC_ID_MLP,
455  AV_CODEC_ID_GSM_MS, /* as found in WAV */
456  AV_CODEC_ID_ATRAC3,
457  AV_CODEC_ID_APE,
458  AV_CODEC_ID_NELLYMOSER,
459  AV_CODEC_ID_MUSEPACK8,
460  AV_CODEC_ID_SPEEX,
461  AV_CODEC_ID_WMAVOICE,
462  AV_CODEC_ID_WMAPRO,
463  AV_CODEC_ID_WMALOSSLESS,
464  AV_CODEC_ID_ATRAC3P,
465  AV_CODEC_ID_EAC3,
466  AV_CODEC_ID_SIPR,
467  AV_CODEC_ID_MP1,
468  AV_CODEC_ID_TWINVQ,
469  AV_CODEC_ID_TRUEHD,
470  AV_CODEC_ID_MP4ALS,
471  AV_CODEC_ID_ATRAC1,
472  AV_CODEC_ID_BINKAUDIO_RDFT,
473  AV_CODEC_ID_BINKAUDIO_DCT,
474  AV_CODEC_ID_AAC_LATM,
475  AV_CODEC_ID_QDMC,
476  AV_CODEC_ID_CELT,
477  AV_CODEC_ID_G723_1,
478  AV_CODEC_ID_G729,
479  AV_CODEC_ID_8SVX_EXP,
480  AV_CODEC_ID_8SVX_FIB,
481  AV_CODEC_ID_BMV_AUDIO,
482  AV_CODEC_ID_RALF,
483  AV_CODEC_ID_IAC,
484  AV_CODEC_ID_ILBC,
485  AV_CODEC_ID_OPUS,
486  AV_CODEC_ID_COMFORT_NOISE,
487  AV_CODEC_ID_TAK,
488  AV_CODEC_ID_METASOUND,
489  AV_CODEC_ID_PAF_AUDIO,
490  AV_CODEC_ID_ON2AVC,
491  AV_CODEC_ID_DSS_SP,
492  AV_CODEC_ID_CODEC2,
493 
494  AV_CODEC_ID_FFWAVESYNTH = 0x15800,
495  AV_CODEC_ID_SONIC,
496  AV_CODEC_ID_SONIC_LS,
497  AV_CODEC_ID_EVRC,
498  AV_CODEC_ID_SMV,
499  AV_CODEC_ID_DSD_LSBF,
500  AV_CODEC_ID_DSD_MSBF,
501  AV_CODEC_ID_DSD_LSBF_PLANAR,
502  AV_CODEC_ID_DSD_MSBF_PLANAR,
503  AV_CODEC_ID_4GV,
504  AV_CODEC_ID_INTERPLAY_ACM,
505  AV_CODEC_ID_XMA1,
506  AV_CODEC_ID_XMA2,
507  AV_CODEC_ID_DST,
508  AV_CODEC_ID_ATRAC3AL,
509  AV_CODEC_ID_ATRAC3PAL,
510  AV_CODEC_ID_DOLBY_E,
511  AV_CODEC_ID_APTX,
512  AV_CODEC_ID_APTX_HD,
513  AV_CODEC_ID_SBC,
514  AV_CODEC_ID_ATRAC9,
515  AV_CODEC_ID_HCOM,
516  AV_CODEC_ID_ACELP_KELVIN,
517  AV_CODEC_ID_MPEGH_3D_AUDIO,
518  AV_CODEC_ID_SIREN,
519  AV_CODEC_ID_HCA,
520 
521  /* subtitle codecs */
522  AV_CODEC_ID_FIRST_SUBTITLE = 0x17000,
523  AV_CODEC_ID_DVD_SUBTITLE = 0x17000,
524  AV_CODEC_ID_DVB_SUBTITLE,
526  AV_CODEC_ID_XSUB,
527  AV_CODEC_ID_SSA,
528  AV_CODEC_ID_MOV_TEXT,
529  AV_CODEC_ID_HDMV_PGS_SUBTITLE,
530  AV_CODEC_ID_DVB_TELETEXT,
531  AV_CODEC_ID_SRT,
532 
533  AV_CODEC_ID_MICRODVD = 0x17800,
534  AV_CODEC_ID_EIA_608,
535  AV_CODEC_ID_JACOSUB,
536  AV_CODEC_ID_SAMI,
537  AV_CODEC_ID_REALTEXT,
538  AV_CODEC_ID_STL,
539  AV_CODEC_ID_SUBVIEWER1,
540  AV_CODEC_ID_SUBVIEWER,
541  AV_CODEC_ID_SUBRIP,
542  AV_CODEC_ID_WEBVTT,
543  AV_CODEC_ID_MPL2,
544  AV_CODEC_ID_VPLAYER,
545  AV_CODEC_ID_PJS,
546  AV_CODEC_ID_ASS,
547  AV_CODEC_ID_HDMV_TEXT_SUBTITLE,
548  AV_CODEC_ID_TTML,
549  AV_CODEC_ID_ARIB_CAPTION,
550 
551  /* other specific kind of codecs (generally used for attachments) */
552  AV_CODEC_ID_FIRST_UNKNOWN = 0x18000,
553  AV_CODEC_ID_TTF = 0x18000,
554 
556  AV_CODEC_ID_EPG,
557  AV_CODEC_ID_BINTEXT = 0x18800,
558  AV_CODEC_ID_XBIN,
559  AV_CODEC_ID_IDF,
560  AV_CODEC_ID_OTF,
561  AV_CODEC_ID_SMPTE_KLV,
562  AV_CODEC_ID_DVD_NAV,
563  AV_CODEC_ID_TIMED_ID3,
564  AV_CODEC_ID_BIN_DATA,
565 
566 
567  AV_CODEC_ID_PROBE = 0x19000,
568 
569  AV_CODEC_ID_MPEG2TS = 0x20000,
571  AV_CODEC_ID_MPEG4SYSTEMS = 0x20001,
573  AV_CODEC_ID_FFMETADATA = 0x21000,
574  AV_CODEC_ID_WRAPPED_AVFRAME = 0x21001,
575 
576  } ID;
577 
581  typedef enum Type
582  {
583  CODEC_TYPE_UNKNOWN = -1,
584  CODEC_TYPE_VIDEO,
585  CODEC_TYPE_AUDIO,
586  CODEC_TYPE_DATA,
587  CODEC_TYPE_SUBTITLE,
588  CODEC_TYPE_ATTACHMENT
589  } Type;
590 
595  virtual const char *
596  getName()=0;
597 
602  virtual int
604 
609  virtual ID
610  getID()=0;
611 
616  virtual Type
617  getType()=0;
618 
623  virtual bool
625 
630  virtual bool
632 
641  static ICodec *
642  findEncodingCodec(ICodec::ID id, const IPixelFormat::Type=IPixelFormat::NONE);
643 
649  static ICodec *
650  findEncodingCodecByIntID(int id);
657  static ICodec *
658  findEncodingCodecByName(const char*id);
659 
667  static ICodec *
668  findDecodingCodec(ICodec::ID id, const IPixelFormat::Type=IPixelFormat::NONE);
669 
675  static ICodec *
676  findDecodingCodecByIntID(int id);
683  static ICodec *
684  findDecodingCodecByName(const char*id);
685 
700  static ICodec *
701  guessEncodingCodec(IContainerFormat* fmt, const char *shortName,
702  const char*url, const char*mimeType, ICodec::Type type);
703 
704 protected:
705  ICodec();
706  virtual
707  ~ICodec();
708 
712 public:
718  virtual const char *
720 
721  /*
722  * Added for 2.1
723  */
724 
728  typedef enum Capabilities
729  {
730  CAP_DRAW_HORIZ_BAND = 0x0001,
731  CAP_DR1 = 0x0002,
732  CAP_PARSE_ONLY = 0x0004,
733  CAP_TRUNCATED = 0x0008,
734  CAP_HWACCEL = 0x0010,
735  CAP_DELAY = 0x0020,
736  CAP_SMALL_LAST_FRAME = 0x0040,
737  CAP_HWACCEL_VDPAU = 0x0080,
738  CAP_SUBFRAMES =0x0100,
739 
740  } Capabilities;
741 
747  virtual int32_t getCapabilities()=0;
748 
756  virtual bool hasCapability(Capabilities capability)=0;
757 
762  static int32_t getNumInstalledCodecs();
763 
772  static ICodec* getInstalledCodec(int32_t index);
773 
779  virtual int32_t getNumSupportedVideoFrameRates()=0;
780 
789  virtual IRational* getSupportedVideoFrameRate(int32_t index)=0;
790 
797  virtual int32_t getNumSupportedVideoPixelFormats()=0;
798 
809 
816  virtual int32_t getNumSupportedAudioSampleRates()=0;
817 
826  virtual int32_t getSupportedAudioSampleRate(int32_t index)=0;
827 
836 
847 
857 
871  virtual int64_t getSupportedAudioChannelLayout(int32_t index)=0;
872 
873 };
874 
875 }
876 }
877 }
878 
879 #endif /*IH_*/
Format
The format we use to represent audio.
Definition: IAudioSamples.h:46
A "key" to an IStreamCoder that tells it how to encode or decode data.
Definition: ICodec.h:53
Capabilities
Capability flags.
Definition: ICodec.h:729
virtual bool canEncode()=0
Can this codec be used for encoding?
virtual ID getID()=0
Get the ID of this codec as an enumeration.
virtual bool hasCapability(Capabilities capability)=0
Convenience method to check individual capability flags.
virtual int getIDAsInt()=0
Get the ID of this codec, as an integer.
virtual IAudioSamples::Format getSupportedAudioSampleFormat(int32_t index)=0
Get the supported sample format at this index.
virtual IPixelFormat::Type getSupportedVideoPixelFormat(int32_t index)=0
Return the supported video pixel format at the given index.
virtual int32_t getNumSupportedVideoFrameRates()=0
Get the number of frame rates this codec supports for encoding.
virtual bool canDecode()=0
Can this codec be used for decoding?
virtual int32_t getCapabilities()=0
Get the capabilites flag from the codec.
virtual int32_t getNumSupportedVideoPixelFormats()=0
Get the number of supported video pixel formats this codec supports for encoding.
virtual int32_t getNumSupportedAudioChannelLayouts()=0
Get the number of different audio channel layouts this codec supports for encoding.
virtual int32_t getNumSupportedAudioSampleFormats()=0
Get the number of different audio sample formats this codec supports for encoding.
virtual const char * getName()=0
Get the name of the codec.
virtual const char * getLongName()=0
Added for 1.17.
virtual Type getType()=0
Get the type of this codec.
virtual IRational * getSupportedVideoFrameRate(int32_t index)=0
Return the supported frame rate at the given index.
virtual int32_t getNumSupportedAudioSampleRates()=0
Get the number of different audio sample rates this codec supports for encoding.
ID
These are the codecs this library currently supports.
Definition: ICodec.h:61
@ AV_CODEC_ID_MPEG2VIDEO
preferred ID for MPEG-1/2 video decoding
Definition: ICodec.h:66
@ AV_CODEC_ID_MP3
preferred ID for decoding MPEG audio layer 1, 2 or 3
Definition: ICodec.h:426
@ AV_CODEC_ID_GSM
as in Berlin toast format
Definition: ICodec.h:443
@ AV_CODEC_ID_SCTE_35
Contain timestamp estimated through PCR of program stream.
Definition: ICodec.h:555
@ AV_CODEC_ID_TEXT
raw UTF-8 text
Definition: ICodec.h:525
virtual int64_t getSupportedAudioChannelLayout(int32_t index)=0
Get the supported audio channel layout at this index.
virtual int32_t getSupportedAudioSampleRate(int32_t index)=0
Return the support audio sample rate at the given index.
Type
The different types of Codecs that can exist in the system.
Definition: ICodec.h:582
Specifies format information than can be used to configure an IContainer for input or output.
This class wraps represents a Rational number for the AVPKit.
Definition: IRational.h:43
Parent of all Ferry objects – it mains reference counts in native code.
Definition: RefCounted.h:85
WARNING: Do not use logging in this class, and do not set any static file variables to values other t...