History

lavc: add profiles to AVCodecDescriptor

The profiles are a property of the codec, so it makes sense to export them through AVCodecDescriptors, not just the codec implementations.

Anton Khirnov committed 11 years ago

Commit 2c681131 parent cdc9ce015 files · +219 −90Browse files

Unified · Split

15 files
  1. doc/APIchanges +3 −0
  2. libavcodec/Makefile +1 −0
  3. libavcodec/avcodec.h +18 −0
  4. libavcodec/codec_desc.c +10 −0
  5. libavcodec/dcadec.c +2 −10
  6. libavcodec/h264.c +2 −18
  7. libavcodec/hevc.c +2 −8
  8. libavcodec/jpeg2000dec.c +2 −10
  9. libavcodec/mpeg12dec.c +2 −13
  10. libavcodec/mpeg4videodec.c +2 −20
  11. libavcodec/profiles.c +122 −0
  12. libavcodec/profiles.h +34 −0
  13. libavcodec/utils.c +15 −0
  14. libavcodec/vc1dec.c +3 −10
  15. libavcodec/version.h +1 −1
doc/APIchanges+3−0
@@ -13,6 +13,9 @@ libavutil: 2015-08-28 · 12 unmodified lines
13 13
14API changes, most recent first:14API changes, most recent first:
15 15
162015-xx-xx - xxxxxxx - lavc 57.12.0 - avcodec.h
17 Add AVCodecDescriptor.profiles and avcodec_profile_name().
18
162015-xx-xx - xxxxxxx - lavc 57.11.0 - avcodec.h dirac.h192015-xx-xx - xxxxxxx - lavc 57.11.0 - avcodec.h dirac.h
17 xxxxxxx - Add av_packet_add_side_data().20 xxxxxxx - Add av_packet_add_side_data().
18 xxxxxxx - Add AVCodecContext.coded_side_data.21 xxxxxxx - Add AVCodecContext.coded_side_data.
libavcodec/Makefile+1−0
@@ -28,6 +28,7 @@ OBJS = allcodecs.o \ · 27 unmodified lines
28 mathtables.o \28 mathtables.o \
29 options.o \29 options.o \
30 parser.o \30 parser.o \
31 profiles.o \
31 qsv_api.o \32 qsv_api.o \
32 raw.o \33 raw.o \
33 utils.o \34 utils.o \
libavcodec/avcodec.h+18−0
@@ -503,6 +503,11 @@ typedef struct AVCodecDescriptor { · 502 unmodified lines
503 * Codec properties, a combination of AV_CODEC_PROP_* flags.503 * Codec properties, a combination of AV_CODEC_PROP_* flags.
504 */504 */
505 int props;505 int props;
506 /**
507 * If non-NULL, an array of profiles recognized for this codec.
508 * Terminated with FF_PROFILE_UNKNOWN.
509 */
510 const struct AVProfile *profiles;
506} AVCodecDescriptor;511} AVCodecDescriptor;
507 512
508/**513/**
@@ -4454,6 +4459,19 @@ void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode); · 3945 unmodified lines
4454 */4459 */
4455const char *av_get_profile_name(const AVCodec *codec, int profile);4460const char *av_get_profile_name(const AVCodec *codec, int profile);
4456 4461
4462/**
4463 * Return a name for the specified profile, if available.
4464 *
4465 * @param codec_id the ID of the codec to which the requested profile belongs
4466 * @param profile the profile value for which a name is requested
4467 * @return A name for the profile if found, NULL otherwise.
4468 *
4469 * @note unlike av_get_profile_name(), which searches a list of profiles
4470 * supported by a specific decoder or encoder implementation, this
4471 * function searches the list of profiles from the AVCodecDescriptor
4472 */
4473const char *avcodec_profile_name(enum AVCodecID codec_id, int profile);
4474
4457int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size);4475int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2),void *arg, int *ret, int count, int size);
4458int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int, int),void *arg, int *ret, int count);4476int avcodec_default_execute2(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2, int, int),void *arg, int *ret, int count);
4459//FIXME func typedef4477//FIXME func typedef
libavcodec/codec_desc.c+10−0
@@ -21,6 +21,7 @@ · 20 unmodified lines
21#include "libavutil/common.h"21#include "libavutil/common.h"
22#include "libavutil/internal.h"22#include "libavutil/internal.h"
23#include "avcodec.h"23#include "avcodec.h"
24#include "profiles.h"
24#include "version.h"25#include "version.h"
25 26
26static const AVCodecDescriptor codec_descriptors[] = {27static const AVCodecDescriptor codec_descriptors[] = {
@@ -38,6 +39,7 @@ static const AVCodecDescriptor codec_descriptors[] = { · 11 unmodified lines
38 .name = "mpeg2video",39 .name = "mpeg2video",
39 .long_name = NULL_IF_CONFIG_SMALL("MPEG-2 video"),40 .long_name = NULL_IF_CONFIG_SMALL("MPEG-2 video"),
40 .props = AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_REORDER,41 .props = AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_REORDER,
42 .profiles = NULL_IF_CONFIG_SMALL(ff_mpeg2_video_profiles),
41 },43 },
42#if FF_API_XVMC44#if FF_API_XVMC
43 {45 {
@@ -96,6 +98,7 @@ static const AVCodecDescriptor codec_descriptors[] = { · 52 unmodified lines
96 .name = "mpeg4",98 .name = "mpeg4",
97 .long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2"),99 .long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2"),
98 .props = AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_REORDER,100 .props = AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_REORDER,
101 .profiles = NULL_IF_CONFIG_SMALL(ff_mpeg4_video_profiles),
99 },102 },
100 {103 {
101 .id = AV_CODEC_ID_RAWVIDEO,104 .id = AV_CODEC_ID_RAWVIDEO,
@@ -201,6 +204,7 @@ static const AVCodecDescriptor codec_descriptors[] = { · 99 unmodified lines
201 .name = "h264",204 .name = "h264",
202 .long_name = NULL_IF_CONFIG_SMALL("H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"),205 .long_name = NULL_IF_CONFIG_SMALL("H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"),
203 .props = AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_LOSSLESS | AV_CODEC_PROP_REORDER,206 .props = AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_LOSSLESS | AV_CODEC_PROP_REORDER,
207 .profiles = NULL_IF_CONFIG_SMALL(ff_h264_profiles),
204 },208 },
205 {209 {
206 .id = AV_CODEC_ID_INDEO3,210 .id = AV_CODEC_ID_INDEO3,
@@ -460,6 +464,7 @@ static const AVCodecDescriptor codec_descriptors[] = { · 253 unmodified lines
460 .name = "vc1",464 .name = "vc1",
461 .long_name = NULL_IF_CONFIG_SMALL("SMPTE VC-1"),465 .long_name = NULL_IF_CONFIG_SMALL("SMPTE VC-1"),
462 .props = AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_REORDER,466 .props = AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_REORDER,
467 .profiles = NULL_IF_CONFIG_SMALL(ff_vc1_profiles),
463 },468 },
464 {469 {
465 .id = AV_CODEC_ID_WMV3,470 .id = AV_CODEC_ID_WMV3,
@@ -467,6 +472,7 @@ static const AVCodecDescriptor codec_descriptors[] = { · 1 unmodified line
467 .name = "wmv3",472 .name = "wmv3",
468 .long_name = NULL_IF_CONFIG_SMALL("Windows Media Video 9"),473 .long_name = NULL_IF_CONFIG_SMALL("Windows Media Video 9"),
469 .props = AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_REORDER,474 .props = AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_REORDER,
475 .profiles = NULL_IF_CONFIG_SMALL(ff_vc1_profiles),
470 },476 },
471 {477 {
472 .id = AV_CODEC_ID_LOCO,478 .id = AV_CODEC_ID_LOCO,
@@ -587,6 +593,7 @@ static const AVCodecDescriptor codec_descriptors[] = { · 114 unmodified lines
587 .long_name = NULL_IF_CONFIG_SMALL("JPEG 2000"),593 .long_name = NULL_IF_CONFIG_SMALL("JPEG 2000"),
588 .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY |594 .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY |
589 AV_CODEC_PROP_LOSSLESS,595 AV_CODEC_PROP_LOSSLESS,
596 .profiles = NULL_IF_CONFIG_SMALL(ff_jpeg2000_profiles),
590 },597 },
591 {598 {
592 .id = AV_CODEC_ID_VMNC,599 .id = AV_CODEC_ID_VMNC,
@@ -1098,6 +1105,7 @@ static const AVCodecDescriptor codec_descriptors[] = { · 505 unmodified lines
1098 .name = "hevc",1105 .name = "hevc",
1099 .long_name = NULL_IF_CONFIG_SMALL("HEVC (High Efficiency Video Coding)"),1106 .long_name = NULL_IF_CONFIG_SMALL("HEVC (High Efficiency Video Coding)"),
1100 .props = AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_REORDER,1107 .props = AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_REORDER,
1108 .profiles = NULL_IF_CONFIG_SMALL(ff_hevc_profiles),
1101 },1109 },
1102 {1110 {
1103 .id = AV_CODEC_ID_FIC,1111 .id = AV_CODEC_ID_FIC,
@@ -1912,6 +1920,7 @@ static const AVCodecDescriptor codec_descriptors[] = { · 808 unmodified lines
1912 .name = "aac",1920 .name = "aac",
1913 .long_name = NULL_IF_CONFIG_SMALL("AAC (Advanced Audio Coding)"),1921 .long_name = NULL_IF_CONFIG_SMALL("AAC (Advanced Audio Coding)"),
1914 .props = AV_CODEC_PROP_LOSSY,1922 .props = AV_CODEC_PROP_LOSSY,
1923 .profiles = NULL_IF_CONFIG_SMALL(ff_aac_profiles),
1915 },1924 },
1916 {1925 {
1917 .id = AV_CODEC_ID_AC3,1926 .id = AV_CODEC_ID_AC3,
@@ -1926,6 +1935,7 @@ static const AVCodecDescriptor codec_descriptors[] = { · 8 unmodified lines
1926 .name = "dts",1935 .name = "dts",
1927 .long_name = NULL_IF_CONFIG_SMALL("DCA (DTS Coherent Acoustics)"),1936 .long_name = NULL_IF_CONFIG_SMALL("DCA (DTS Coherent Acoustics)"),
1928 .props = AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_LOSSLESS,1937 .props = AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_LOSSLESS,
1938 .profiles = NULL_IF_CONFIG_SMALL(ff_dca_profiles),
1929 },1939 },
1930 {1940 {
1931 .id = AV_CODEC_ID_VORBIS,1941 .id = AV_CODEC_ID_VORBIS,
libavcodec/dcadec.c+2−10
@@ -49,6 +49,7 @@ · 48 unmodified lines
49#include "get_bits.h"49#include "get_bits.h"
50#include "internal.h"50#include "internal.h"
51#include "mathops.h"51#include "mathops.h"
52#include "profiles.h"
52#include "put_bits.h"53#include "put_bits.h"
53#include "synth_filter.h"54#include "synth_filter.h"
54 55
@@ -1566,15 +1567,6 @@ static av_cold int dca_decode_end(AVCodecContext *avctx) · 1511 unmodified lines
1566 return 0;1567 return 0;
1567}1568}
1568 1569
1569static const AVProfile profiles[] = {
1570 { FF_PROFILE_DTS, "DTS" },
1571 { FF_PROFILE_DTS_ES, "DTS-ES" },
1572 { FF_PROFILE_DTS_96_24, "DTS 96/24" },
1573 { FF_PROFILE_DTS_HD_HRA, "DTS-HD HRA" },
1574 { FF_PROFILE_DTS_HD_MA, "DTS-HD MA" },
1575 { FF_PROFILE_UNKNOWN },
1576};
1577
1578static const AVOption options[] = {1570static const AVOption options[] = {
1579 { "disable_xch", "disable decoding of the XCh extension", offsetof(DCAContext, xch_disable), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM },1571 { "disable_xch", "disable decoding of the XCh extension", offsetof(DCAContext, xch_disable), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 1, AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM },
1580 { "disable_xll", "disable decoding of the XLL extension", offsetof(DCAContext, xll_disable), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM },1572 { "disable_xll", "disable decoding of the XLL extension", offsetof(DCAContext, xll_disable), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 1, AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM },
@@ -1600,6 +1592,6 @@ AVCodec ff_dca_decoder = { · 19 unmodified lines
1600 .capabilities = AV_CODEC_CAP_CHANNEL_CONF | AV_CODEC_CAP_DR1,1592 .capabilities = AV_CODEC_CAP_CHANNEL_CONF | AV_CODEC_CAP_DR1,
1601 .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,1593 .sample_fmts = (const enum AVSampleFormat[]) { AV_SAMPLE_FMT_FLTP,
1602 AV_SAMPLE_FMT_NONE },1594 AV_SAMPLE_FMT_NONE },
1603 .profiles = NULL_IF_CONFIG_SMALL(profiles),1595 .profiles = NULL_IF_CONFIG_SMALL(ff_dca_profiles),
1604 .priv_class = &dca_decoder_class,1596 .priv_class = &dca_decoder_class,
1605};1597};
libavcodec/h264.c+2−18
@@ -44,6 +44,7 @@ · 43 unmodified lines
44#include "mathops.h"44#include "mathops.h"
45#include "me_cmp.h"45#include "me_cmp.h"
46#include "mpegutils.h"46#include "mpegutils.h"
47#include "profiles.h"
47#include "rectangle.h"48#include "rectangle.h"
48#include "svq3.h"49#include "svq3.h"
49#include "thread.h"50#include "thread.h"
@@ -1771,23 +1772,6 @@ static const AVClass h264_class = { · 1721 unmodified lines
1771 .version = LIBAVUTIL_VERSION_INT,1772 .version = LIBAVUTIL_VERSION_INT,
1772};1773};
1773 1774
1774static const AVProfile profiles[] = {
1775 { FF_PROFILE_H264_BASELINE, "Baseline" },
1776 { FF_PROFILE_H264_CONSTRAINED_BASELINE, "Constrained Baseline" },
1777 { FF_PROFILE_H264_MAIN, "Main" },
1778 { FF_PROFILE_H264_EXTENDED, "Extended" },
1779 { FF_PROFILE_H264_HIGH, "High" },
1780 { FF_PROFILE_H264_HIGH_10, "High 10" },
1781 { FF_PROFILE_H264_HIGH_10_INTRA, "High 10 Intra" },
1782 { FF_PROFILE_H264_HIGH_422, "High 4:2:2" },
1783 { FF_PROFILE_H264_HIGH_422_INTRA, "High 4:2:2 Intra" },
1784 { FF_PROFILE_H264_HIGH_444, "High 4:4:4" },
1785 { FF_PROFILE_H264_HIGH_444_PREDICTIVE, "High 4:4:4 Predictive" },
1786 { FF_PROFILE_H264_HIGH_444_INTRA, "High 4:4:4 Intra" },
1787 { FF_PROFILE_H264_CAVLC_444, "CAVLC 4:4:4" },
1788 { FF_PROFILE_UNKNOWN },
1789};
1790
1791AVCodec ff_h264_decoder = {1775AVCodec ff_h264_decoder = {
1792 .name = "h264",1776 .name = "h264",
1793 .long_name = NULL_IF_CONFIG_SMALL("H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"),1777 .long_name = NULL_IF_CONFIG_SMALL("H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"),
@@ -1804,6 +1788,6 @@ AVCodec ff_h264_decoder = { · 10 unmodified lines
1804 .flush = flush_dpb,1788 .flush = flush_dpb,
1805 .init_thread_copy = ONLY_IF_THREADS_ENABLED(decode_init_thread_copy),1789 .init_thread_copy = ONLY_IF_THREADS_ENABLED(decode_init_thread_copy),
1806 .update_thread_context = ONLY_IF_THREADS_ENABLED(ff_h264_update_thread_context),1790 .update_thread_context = ONLY_IF_THREADS_ENABLED(ff_h264_update_thread_context),
1807 .profiles = NULL_IF_CONFIG_SMALL(profiles),1791 .profiles = NULL_IF_CONFIG_SMALL(ff_h264_profiles),
1808 .priv_class = &h264_class,1792 .priv_class = &h264_class,
1809};1793};
libavcodec/hevc.c+2−8
@@ -37,6 +37,7 @@ · 36 unmodified lines
37#include "cabac_functions.h"37#include "cabac_functions.h"
38#include "golomb.h"38#include "golomb.h"
39#include "hevc.h"39#include "hevc.h"
40#include "profiles.h"
40 41
41const uint8_t ff_hevc_qpel_extra_before[4] = { 0, 3, 3, 3 };42const uint8_t ff_hevc_qpel_extra_before[4] = { 0, 3, 3, 3 };
42const uint8_t ff_hevc_qpel_extra_after[4] = { 0, 4, 4, 4 };43const uint8_t ff_hevc_qpel_extra_after[4] = { 0, 4, 4, 4 };
@@ -3027,13 +3028,6 @@ static void hevc_decode_flush(AVCodecContext *avctx) · 2984 unmodified lines
3027#define OFFSET(x) offsetof(HEVCContext, x)3028#define OFFSET(x) offsetof(HEVCContext, x)
3028#define PAR (AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_VIDEO_PARAM)3029#define PAR (AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_VIDEO_PARAM)
3029 3030
3030static const AVProfile profiles[] = {
3031 { FF_PROFILE_HEVC_MAIN, "Main" },
3032 { FF_PROFILE_HEVC_MAIN_10, "Main 10" },
3033 { FF_PROFILE_HEVC_MAIN_STILL_PICTURE, "Main Still Picture" },
3034 { FF_PROFILE_UNKNOWN },
3035};
3036
3037static const AVOption options[] = {3031static const AVOption options[] = {
3038 { "apply_defdispwin", "Apply default display window from VUI", OFFSET(apply_defdispwin),3032 { "apply_defdispwin", "Apply default display window from VUI", OFFSET(apply_defdispwin),
3039 AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, PAR },3033 AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, PAR },
@@ -3062,5 +3056,5 @@ AVCodec ff_hevc_decoder = { · 22 unmodified lines
3062 .init_thread_copy = hevc_init_thread_copy,3056 .init_thread_copy = hevc_init_thread_copy,
3063 .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY |3057 .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY |
3064 AV_CODEC_CAP_FRAME_THREADS,3058 AV_CODEC_CAP_FRAME_THREADS,
3065 .profiles = NULL_IF_CONFIG_SMALL(profiles),3059 .profiles = NULL_IF_CONFIG_SMALL(ff_hevc_profiles),
3066};3060};
libavcodec/jpeg2000dec.c+2−10
@@ -36,6 +36,7 @@ · 35 unmodified lines
36#include "thread.h"36#include "thread.h"
37#include "jpeg2000.h"37#include "jpeg2000.h"
38#include "jpeg2000dsp.h"38#include "jpeg2000dsp.h"
39#include "profiles.h"
39 40
40#define JP2_SIG_TYPE 0x6A50202041#define JP2_SIG_TYPE 0x6A502020
41#define JP2_SIG_VALUE 0x0D0A870A42#define JP2_SIG_VALUE 0x0D0A870A
@@ -1457,15 +1458,6 @@ static const AVOption options[] = { · 1415 unmodified lines
1457 { NULL },1458 { NULL },
1458};1459};
1459 1460
1460static const AVProfile profiles[] = {
1461 { FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0, "JPEG 2000 codestream restriction 0" },
1462 { FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1, "JPEG 2000 codestream restriction 1" },
1463 { FF_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION, "JPEG 2000 no codestream restrictions" },
1464 { FF_PROFILE_JPEG2000_DCINEMA_2K, "JPEG 2000 digital cinema 2K" },
1465 { FF_PROFILE_JPEG2000_DCINEMA_4K, "JPEG 2000 digital cinema 4K" },
1466 { FF_PROFILE_UNKNOWN },
1467};
1468
1469static const AVClass class = {1461static const AVClass class = {
1470 .class_name = "jpeg2000",1462 .class_name = "jpeg2000",
1471 .item_name = av_default_item_name,1463 .item_name = av_default_item_name,
@@ -1484,5 +1476,5 @@ AVCodec ff_jpeg2000_decoder = { · 12 unmodified lines
1484 .init = jpeg2000_decode_init,1476 .init = jpeg2000_decode_init,
1485 .decode = jpeg2000_decode_frame,1477 .decode = jpeg2000_decode_frame,
1486 .priv_class = &class,1478 .priv_class = &class,
1487 .profiles = NULL_IF_CONFIG_SMALL(profiles)1479 .profiles = NULL_IF_CONFIG_SMALL(ff_jpeg2000_profiles)
1488};1480};
libavcodec/mpeg12dec.c+2−13
@@ -42,6 +42,7 @@ · 41 unmodified lines
42#include "mpegutils.h"42#include "mpegutils.h"
43#include "mpegvideo.h"43#include "mpegvideo.h"
44#include "mpegvideodata.h"44#include "mpegvideodata.h"
45#include "profiles.h"
45#include "thread.h"46#include "thread.h"
46#include "version.h"47#include "version.h"
47#include "xvmc_internal.h"48#include "xvmc_internal.h"
@@ -2680,18 +2681,6 @@ static av_cold int mpeg_decode_end(AVCodecContext *avctx) · 2632 unmodified lines
2680 return 0;2681 return 0;
2681}2682}
2682 2683
2683static const AVProfile mpeg2_video_profiles[] = {
2684 { FF_PROFILE_MPEG2_422, "4:2:2" },
2685 { FF_PROFILE_MPEG2_HIGH, "High" },
2686 { FF_PROFILE_MPEG2_SS, "Spatially Scalable" },
2687 { FF_PROFILE_MPEG2_SNR_SCALABLE, "SNR Scalable" },
2688 { FF_PROFILE_MPEG2_MAIN, "Main" },
2689 { FF_PROFILE_MPEG2_SIMPLE, "Simple" },
2690 { FF_PROFILE_RESERVED, "Reserved" },
2691 { FF_PROFILE_RESERVED, "Reserved" },
2692 { FF_PROFILE_UNKNOWN },
2693};
2694
2695AVCodec ff_mpeg1video_decoder = {2684AVCodec ff_mpeg1video_decoder = {
2696 .name = "mpeg1video",2685 .name = "mpeg1video",
2697 .long_name = NULL_IF_CONFIG_SMALL("MPEG-1 video"),2686 .long_name = NULL_IF_CONFIG_SMALL("MPEG-1 video"),
@@ -2721,7 +2710,7 @@ AVCodec ff_mpeg2video_decoder = { · 23 unmodified lines
2721 AV_CODEC_CAP_TRUNCATED | AV_CODEC_CAP_DELAY |2710 AV_CODEC_CAP_TRUNCATED | AV_CODEC_CAP_DELAY |
2722 AV_CODEC_CAP_SLICE_THREADS,2711 AV_CODEC_CAP_SLICE_THREADS,
2723 .flush = flush,2712 .flush = flush,
2724 .profiles = NULL_IF_CONFIG_SMALL(mpeg2_video_profiles),2713 .profiles = NULL_IF_CONFIG_SMALL(ff_mpeg2_video_profiles),
2725};2714};
2726 2715
2727#if FF_API_XVMC2716#if FF_API_XVMC
libavcodec/mpeg4videodec.c+2−20
@@ -28,6 +28,7 @@ · 27 unmodified lines
28#include "mpegvideodata.h"28#include "mpegvideodata.h"
29#include "mpeg4video.h"29#include "mpeg4video.h"
30#include "h263.h"30#include "h263.h"
31#include "profiles.h"
31#include "thread.h"32#include "thread.h"
32#include "xvididct.h"33#include "xvididct.h"
33 34
@@ -2599,25 +2600,6 @@ static av_cold int decode_init(AVCodecContext *avctx) · 2565 unmodified lines
2599 return 0;2600 return 0;
2600}2601}
2601 2602
2602static const AVProfile mpeg4_video_profiles[] = {
2603 { FF_PROFILE_MPEG4_SIMPLE, "Simple Profile" },
2604 { FF_PROFILE_MPEG4_SIMPLE_SCALABLE, "Simple Scalable Profile" },
2605 { FF_PROFILE_MPEG4_CORE, "Core Profile" },
2606 { FF_PROFILE_MPEG4_MAIN, "Main Profile" },
2607 { FF_PROFILE_MPEG4_N_BIT, "N-bit Profile" },
2608 { FF_PROFILE_MPEG4_SCALABLE_TEXTURE, "Scalable Texture Profile" },
2609 { FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION, "Simple Face Animation Profile" },
2610 { FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE, "Basic Animated Texture Profile" },
2611 { FF_PROFILE_MPEG4_HYBRID, "Hybrid Profile" },
2612 { FF_PROFILE_MPEG4_ADVANCED_REAL_TIME, "Advanced Real Time Simple Profile" },
2613 { FF_PROFILE_MPEG4_CORE_SCALABLE, "Code Scalable Profile" },
2614 { FF_PROFILE_MPEG4_ADVANCED_CODING, "Advanced Coding Profile" },
2615 { FF_PROFILE_MPEG4_ADVANCED_CORE, "Advanced Core Profile" },
2616 { FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE, "Advanced Scalable Texture Profile" },
2617 { FF_PROFILE_MPEG4_SIMPLE_STUDIO, "Simple Studio Profile" },
2618 { FF_PROFILE_MPEG4_ADVANCED_SIMPLE, "Advanced Simple Profile" },
2619};
2620
2621AVCodec ff_mpeg4_decoder = {2603AVCodec ff_mpeg4_decoder = {
2622 .name = "mpeg4",2604 .name = "mpeg4",
2623 .long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2"),2605 .long_name = NULL_IF_CONFIG_SMALL("MPEG-4 part 2"),
@@ -2632,6 +2614,6 @@ AVCodec ff_mpeg4_decoder = { · 8 unmodified lines
2632 AV_CODEC_CAP_FRAME_THREADS,2614 AV_CODEC_CAP_FRAME_THREADS,
2633 .flush = ff_mpeg_flush,2615 .flush = ff_mpeg_flush,
2634 .pix_fmts = ff_h263_hwaccel_pixfmt_list_420,2616 .pix_fmts = ff_h263_hwaccel_pixfmt_list_420,
2635 .profiles = NULL_IF_CONFIG_SMALL(mpeg4_video_profiles),2617 .profiles = NULL_IF_CONFIG_SMALL(ff_mpeg4_video_profiles),
2636 .update_thread_context = ONLY_IF_THREADS_ENABLED(mpeg4_update_thread_context),2618 .update_thread_context = ONLY_IF_THREADS_ENABLED(mpeg4_update_thread_context),
2637};2619};
libavcodec/profiles.c+122−0
@@ -0,0 +1,122 @@
1/*
2 *
3 * This file is part of Libav.
4 *
5 * Libav is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * Libav is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with Libav; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19
20#include "config.h"
21
22#include "avcodec.h"
23#include "profiles.h"
24
25#if !CONFIG_SMALL
26
27const AVProfile ff_aac_profiles[] = {
28 { FF_PROFILE_AAC_LOW, "LC" },
29 { FF_PROFILE_AAC_HE, "HE-AAC" },
30 { FF_PROFILE_AAC_HE_V2, "HE-AACv2" },
31 { FF_PROFILE_AAC_LD, "LD" },
32 { FF_PROFILE_AAC_ELD, "ELD" },
33 { FF_PROFILE_AAC_MAIN, "Main" },
34 { FF_PROFILE_AAC_LOW, "LC" },
35 { FF_PROFILE_AAC_SSR, "SSR" },
36 { FF_PROFILE_AAC_LTP, "LTP" },
37 { FF_PROFILE_UNKNOWN },
38};
39
40const AVProfile ff_dca_profiles[] = {
41 { FF_PROFILE_DTS, "DTS" },
42 { FF_PROFILE_DTS_ES, "DTS-ES" },
43 { FF_PROFILE_DTS_96_24, "DTS 96/24" },
44 { FF_PROFILE_DTS_HD_HRA, "DTS-HD HRA" },
45 { FF_PROFILE_DTS_HD_MA, "DTS-HD MA" },
46 { FF_PROFILE_UNKNOWN },
47};
48
49const AVProfile ff_h264_profiles[] = {
50 { FF_PROFILE_H264_BASELINE, "Baseline" },
51 { FF_PROFILE_H264_CONSTRAINED_BASELINE, "Constrained Baseline" },
52 { FF_PROFILE_H264_MAIN, "Main" },
53 { FF_PROFILE_H264_EXTENDED, "Extended" },
54 { FF_PROFILE_H264_HIGH, "High" },
55 { FF_PROFILE_H264_HIGH_10, "High 10" },
56 { FF_PROFILE_H264_HIGH_10_INTRA, "High 10 Intra" },
57 { FF_PROFILE_H264_HIGH_422, "High 4:2:2" },
58 { FF_PROFILE_H264_HIGH_422_INTRA, "High 4:2:2 Intra" },
59 { FF_PROFILE_H264_HIGH_444, "High 4:4:4" },
60 { FF_PROFILE_H264_HIGH_444_PREDICTIVE, "High 4:4:4 Predictive" },
61 { FF_PROFILE_H264_HIGH_444_INTRA, "High 4:4:4 Intra" },
62 { FF_PROFILE_H264_CAVLC_444, "CAVLC 4:4:4" },
63 { FF_PROFILE_UNKNOWN },
64};
65
66const AVProfile ff_hevc_profiles[] = {
67 { FF_PROFILE_HEVC_MAIN, "Main" },
68 { FF_PROFILE_HEVC_MAIN_10, "Main 10" },
69 { FF_PROFILE_HEVC_MAIN_STILL_PICTURE, "Main Still Picture" },
70 { FF_PROFILE_UNKNOWN },
71};
72
73const AVProfile ff_jpeg2000_profiles[] = {
74 { FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_0, "JPEG 2000 codestream restriction 0" },
75 { FF_PROFILE_JPEG2000_CSTREAM_RESTRICTION_1, "JPEG 2000 codestream restriction 1" },
76 { FF_PROFILE_JPEG2000_CSTREAM_NO_RESTRICTION, "JPEG 2000 no codestream restrictions" },
77 { FF_PROFILE_JPEG2000_DCINEMA_2K, "JPEG 2000 digital cinema 2K" },
78 { FF_PROFILE_JPEG2000_DCINEMA_4K, "JPEG 2000 digital cinema 4K" },
79 { FF_PROFILE_UNKNOWN },
80};
81
82const AVProfile ff_mpeg2_video_profiles[] = {
83 { FF_PROFILE_MPEG2_422, "4:2:2" },
84 { FF_PROFILE_MPEG2_HIGH, "High" },
85 { FF_PROFILE_MPEG2_SS, "Spatially Scalable" },
86 { FF_PROFILE_MPEG2_SNR_SCALABLE, "SNR Scalable" },
87 { FF_PROFILE_MPEG2_MAIN, "Main" },
88 { FF_PROFILE_MPEG2_SIMPLE, "Simple" },
89 { FF_PROFILE_RESERVED, "Reserved" },
90 { FF_PROFILE_RESERVED, "Reserved" },
91 { FF_PROFILE_UNKNOWN },
92};
93
94const AVProfile ff_mpeg4_video_profiles[] = {
95 { FF_PROFILE_MPEG4_SIMPLE, "Simple Profile" },
96 { FF_PROFILE_MPEG4_SIMPLE_SCALABLE, "Simple Scalable Profile" },
97 { FF_PROFILE_MPEG4_CORE, "Core Profile" },
98 { FF_PROFILE_MPEG4_MAIN, "Main Profile" },
99 { FF_PROFILE_MPEG4_N_BIT, "N-bit Profile" },
100 { FF_PROFILE_MPEG4_SCALABLE_TEXTURE, "Scalable Texture Profile" },
101 { FF_PROFILE_MPEG4_SIMPLE_FACE_ANIMATION, "Simple Face Animation Profile" },
102 { FF_PROFILE_MPEG4_BASIC_ANIMATED_TEXTURE, "Basic Animated Texture Profile" },
103 { FF_PROFILE_MPEG4_HYBRID, "Hybrid Profile" },
104 { FF_PROFILE_MPEG4_ADVANCED_REAL_TIME, "Advanced Real Time Simple Profile" },
105 { FF_PROFILE_MPEG4_CORE_SCALABLE, "Code Scalable Profile" },
106 { FF_PROFILE_MPEG4_ADVANCED_CODING, "Advanced Coding Profile" },
107 { FF_PROFILE_MPEG4_ADVANCED_CORE, "Advanced Core Profile" },
108 { FF_PROFILE_MPEG4_ADVANCED_SCALABLE_TEXTURE, "Advanced Scalable Texture Profile" },
109 { FF_PROFILE_MPEG4_SIMPLE_STUDIO, "Simple Studio Profile" },
110 { FF_PROFILE_MPEG4_ADVANCED_SIMPLE, "Advanced Simple Profile" },
111 { FF_PROFILE_UNKNOWN },
112};
113
114const AVProfile ff_vc1_profiles[] = {
115 { FF_PROFILE_VC1_SIMPLE, "Simple" },
116 { FF_PROFILE_VC1_MAIN, "Main" },
117 { FF_PROFILE_VC1_COMPLEX, "Complex" },
118 { FF_PROFILE_VC1_ADVANCED, "Advanced" },
119 { FF_PROFILE_UNKNOWN },
120};
121
122#endif /* !CONFIG_SMALL */
libavcodec/profiles.h+34−0
@@ -0,0 +1,34 @@
1/*
2 *
3 * This file is part of Libav.
4 *
5 * Libav is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * Libav is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with Libav; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
18 */
19
20#ifndef AVCODEC_PROFILES_H
21#define AVCODEC_PROFILES_H
22
23#include "avcodec.h"
24
25extern const AVProfile ff_aac_profiles[];
26extern const AVProfile ff_dca_profiles[];
27extern const AVProfile ff_h264_profiles[];
28extern const AVProfile ff_hevc_profiles[];
29extern const AVProfile ff_jpeg2000_profiles[];
30extern const AVProfile ff_mpeg2_video_profiles[];
31extern const AVProfile ff_mpeg4_video_profiles[];
32extern const AVProfile ff_vc1_profiles[];
33
34#endif
libavcodec/utils.c+15−0
@@ -1918,6 +1918,21 @@ const char *av_get_profile_name(const AVCodec *codec, int profile) · 1917 unmodified lines
1918 return NULL;1918 return NULL;
1919}1919}
1920 1920
1921const char *avcodec_profile_name(enum AVCodecID codec_id, int profile)
1922{
1923 const AVCodecDescriptor *desc = avcodec_descriptor_get(codec_id);
1924 const AVProfile *p;
1925
1926 if (profile == FF_PROFILE_UNKNOWN || !desc || !desc->profiles)
1927 return NULL;
1928
1929 for (p = desc->profiles; p->profile != FF_PROFILE_UNKNOWN; p++)
1930 if (p->profile == profile)
1931 return p->name;
1932
1933 return NULL;
1934}
1935
1921unsigned avcodec_version(void)1936unsigned avcodec_version(void)
1922{1937{
1923 return LIBAVCODEC_VERSION_INT;1938 return LIBAVCODEC_VERSION_INT;
libavcodec/vc1dec.c+3−10
@@ -34,6 +34,7 @@ · 33 unmodified lines
34#include "mpegvideo.h"34#include "mpegvideo.h"
35#include "msmpeg4.h"35#include "msmpeg4.h"
36#include "msmpeg4data.h"36#include "msmpeg4data.h"
37#include "profiles.h"
37#include "vc1.h"38#include "vc1.h"
38#include "vc1data.h"39#include "vc1data.h"
39 40
@@ -943,14 +944,6 @@ err: · 903 unmodified lines
943}944}
944 945
945 946
946static const AVProfile profiles[] = {
947 { FF_PROFILE_VC1_SIMPLE, "Simple" },
948 { FF_PROFILE_VC1_MAIN, "Main" },
949 { FF_PROFILE_VC1_COMPLEX, "Complex" },
950 { FF_PROFILE_VC1_ADVANCED, "Advanced" },
951 { FF_PROFILE_UNKNOWN },
952};
953
954static const enum AVPixelFormat vc1_hwaccel_pixfmt_list_420[] = {947static const enum AVPixelFormat vc1_hwaccel_pixfmt_list_420[] = {
955#if CONFIG_VC1_DXVA2_HWACCEL948#if CONFIG_VC1_DXVA2_HWACCEL
956 AV_PIX_FMT_DXVA2_VLD,949 AV_PIX_FMT_DXVA2_VLD,
@@ -980,7 +973,7 @@ AVCodec ff_vc1_decoder = { · 23 unmodified lines
980 .flush = ff_mpeg_flush,973 .flush = ff_mpeg_flush,
981 .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY,974 .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY,
982 .pix_fmts = vc1_hwaccel_pixfmt_list_420,975 .pix_fmts = vc1_hwaccel_pixfmt_list_420,
983 .profiles = NULL_IF_CONFIG_SMALL(profiles)976 .profiles = NULL_IF_CONFIG_SMALL(ff_vc1_profiles)
984};977};
985 978
986#if CONFIG_WMV3_DECODER979#if CONFIG_WMV3_DECODER
@@ -996,7 +989,7 @@ AVCodec ff_wmv3_decoder = { · 9 unmodified lines
996 .flush = ff_mpeg_flush,989 .flush = ff_mpeg_flush,
997 .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY,990 .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY,
998 .pix_fmts = vc1_hwaccel_pixfmt_list_420,991 .pix_fmts = vc1_hwaccel_pixfmt_list_420,
999 .profiles = NULL_IF_CONFIG_SMALL(profiles)992 .profiles = NULL_IF_CONFIG_SMALL(ff_vc1_profiles)
1000};993};
1001#endif994#endif
1002 995
libavcodec/version.h+1−1
@@ -29,7 +29,7 @@ · 28 unmodified lines
29#include "libavutil/version.h"29#include "libavutil/version.h"
30 30
31#define LIBAVCODEC_VERSION_MAJOR 5731#define LIBAVCODEC_VERSION_MAJOR 57
32#define LIBAVCODEC_VERSION_MINOR 1132#define LIBAVCODEC_VERSION_MINOR 12
33#define LIBAVCODEC_VERSION_MICRO 033#define LIBAVCODEC_VERSION_MICRO 0
34 34
35#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \35#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t