1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-23 12:43:46 +02:00

avcodec/internal: add FFCodec.color_ranges

I went through all codecs and put them into five basic categories:

1. JPEG range only
2. MPEG range only
3. Explicitly tagged
4. Broken (codec supports both but encoder ignores tags)
5. N/A (headerless or pseudo-formats)

Filters in category 5 remain untouched. The rest gain an explicit
assignment of their supported color ranges, with codecs in category
4 being set to MPEG-only for safety.

It might be considered redundant to distinguish between 0 (category 5)
and MPEG+JPEG (category 3), but in doing so we effectively communicate
that we can guarantee that these tags will be encoded, which is distinct
from the situation where there are some codecs that simply don't have
tagging or implied semantics (e.g. rawvideo).

A full list of codecs follows:

JPEG range only:
 - amv
 - roqvideo

MPEG range only:
 - asv1, asv2
 - avui
 - cfhd
 - cljr
 - dnxhd
 - dvvideo
 - ffv1
 - flv
 - h261, h263, h263p
 - {h263,vp8}_v4l2m2m
 - huffyuv, ffvhuff
 - jpeg2000
 - libopenjpeg
 - libtheora
 - libwebp, libwebp_anim
 - libx262
 - libxavs, libxavs2
 - libxvid
 - mpeg1video, mpeg2video
 - mpeg2_qsv
 - mpeg2_vaapi
 - mpeg4, msmpeg4, msmpeg4v2, wmv1, wmv2
 - mpeg4_omx
 - prores, prores_aw, prores_ks
 - rv10, rv20
 - snow
 - speedhq
 - svq1
 - tiff
 - utvideo

Explicitly tagged (MPEG/JPEG):
 - {av1,h264,hevc}_nvenc
 - {av1,h264,hevc}_vaapi
 - {av1,h264,hevc,vp8,vp9,mpeg4}_mediacodec
 - {av1,h264,hevc,vp9}_qsv
 - h264_amf
 - {h264,hevc,prores}_videotoolbox
 - libaom-av1
 - libkvazaar
 - libopenh264
 - librav1e
 - libsvtav1
 - libvpx, libvpx-vp9
 - libx264
 - libx265
 - ljpeg
 - mjpeg
 - vc2

Broken (encoder ignores tags):
 - {av1,hevc}_amf
 - {h264,hevc,mpeg4}_v4l2m2m
 - h264_omx
 - libxeve
 - magicyuv
 - {vp8,vp9,mjpeg}_vaapi

N/A:
 - ayuv, yuv4, y41p, v308, v210, v410, v408 (headerless)
 - pgmyuv (headerless)
 - rawvideo, bitpacked (headerless)
 - vnull, wrapped_avframe (pseudocodecs)
This commit is contained in:
Niklas Haas 2023-10-11 16:09:33 +02:00
parent 8a314e3f11
commit 703288cec6
70 changed files with 89 additions and 2 deletions

View File

@ -629,6 +629,7 @@ const FFCodec ff_av1_amf_encoder = {
AV_CODEC_CAP_DR1,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
.p.pix_fmts = ff_amf_pix_fmts,
.color_ranges = AVCOL_RANGE_MPEG, /* FIXME: implement tagging */
.p.wrapper_name = "amf",
.hw_configs = ff_amfenc_hw_configs,
};

View File

@ -602,6 +602,7 @@ const FFCodec ff_h264_amf_encoder = {
.caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE |
FF_CODEC_CAP_INIT_CLEANUP,
.p.pix_fmts = ff_amf_pix_fmts,
.color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG,
.p.wrapper_name = "amf",
.hw_configs = ff_amfenc_hw_configs,
};

View File

@ -536,6 +536,7 @@ const FFCodec ff_hevc_amf_encoder = {
.caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE |
FF_CODEC_CAP_INIT_CLEANUP,
.p.pix_fmts = ff_amf_pix_fmts,
.color_ranges = AVCOL_RANGE_MPEG, /* FIXME: implement tagging */
.p.wrapper_name = "amf",
.hw_configs = ff_amfenc_hw_configs,
};

View File

@ -367,6 +367,7 @@ const FFCodec ff_asv1_encoder = {
FF_CODEC_ENCODE_CB(encode_frame),
.p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P,
AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG,
};
#endif
@ -382,5 +383,6 @@ const FFCodec ff_asv2_encoder = {
FF_CODEC_ENCODE_CB(encode_frame),
.p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P,
AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG,
};
#endif

View File

@ -100,6 +100,7 @@ const FFCodec ff_avui_encoder = {
.p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_EXPERIMENTAL |
AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_UYVY422, AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG,
.init = avui_encode_init,
FF_CODEC_ENCODE_CB(avui_encode_frame),
};

View File

@ -870,5 +870,6 @@ const FFCodec ff_cfhd_encoder = {
AV_PIX_FMT_GBRAP12,
AV_PIX_FMT_NONE
},
.color_ranges = AVCOL_RANGE_MPEG,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
};

View File

@ -118,5 +118,6 @@ const FFCodec ff_cljr_encoder = {
FF_CODEC_ENCODE_CB(encode_frame),
.p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV411P,
AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG,
.p.priv_class = &cljr_class,
};

View File

@ -132,7 +132,13 @@ typedef struct FFCodec {
/**
* Internal codec capabilities FF_CODEC_CAP_*.
*/
unsigned caps_internal:29;
unsigned caps_internal:27;
/**
* This field determines the video color ranges supported by an encoder.
* Should be set to a bitmask of AVCOL_RANGE_MPEG and AVCOL_RANGE_JPEG.
*/
unsigned color_ranges:2;
/**
* This field determines the type of the codec (decoder/encoder)

View File

@ -1367,6 +1367,7 @@ const FFCodec ff_dnxhd_encoder = {
AV_PIX_FMT_GBRP10,
AV_PIX_FMT_NONE
},
.color_ranges = AVCOL_RANGE_MPEG,
.p.priv_class = &dnxhd_class,
.defaults = dnxhd_defaults,
.p.profiles = NULL_IF_CONFIG_SMALL(ff_dnxhd_profiles),

View File

@ -1251,5 +1251,6 @@ const FFCodec ff_dvvideo_encoder = {
AV_PIX_FMT_YUV411P, AV_PIX_FMT_YUV422P,
AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE
},
.color_ranges = AVCOL_RANGE_MPEG,
.p.priv_class = &dvvideo_encode_class,
};

View File

@ -1309,6 +1309,7 @@ const FFCodec ff_ffv1_encoder = {
AV_PIX_FMT_NONE
},
.color_ranges = AVCOL_RANGE_MPEG,
.p.priv_class = &ffv1_class,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_EOF_FLUSH,
};

View File

@ -105,5 +105,6 @@ const FFCodec ff_flv_encoder = {
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
.p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P,
AV_PIX_FMT_NONE},
.color_ranges = AVCOL_RANGE_MPEG,
.p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
};

View File

@ -385,5 +385,6 @@ const FFCodec ff_h261_encoder = {
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
.p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P,
AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG,
.p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
};

View File

@ -1026,6 +1026,7 @@ const FFCodec ff_huffyuv_encoder = {
AV_PIX_FMT_YUV422P, AV_PIX_FMT_RGB24,
AV_PIX_FMT_RGB32, AV_PIX_FMT_NONE
},
.color_ranges = AVCOL_RANGE_MPEG,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
};
@ -1066,6 +1067,7 @@ const FFCodec ff_ffvhuff_encoder = {
AV_PIX_FMT_RGB24,
AV_PIX_FMT_RGB32, AV_PIX_FMT_NONE
},
.color_ranges = AVCOL_RANGE_MPEG,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
};
#endif

View File

@ -920,6 +920,7 @@ const FFCodec ff_h263_encoder = {
.p.type = AVMEDIA_TYPE_VIDEO,
.p.id = AV_CODEC_ID_H263,
.p.pix_fmts = (const enum AVPixelFormat[]){AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE},
.color_ranges = AVCOL_RANGE_MPEG,
.p.priv_class = &h263_class,
.p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
@ -951,6 +952,7 @@ const FFCodec ff_h263p_encoder = {
.p.type = AVMEDIA_TYPE_VIDEO,
.p.id = AV_CODEC_ID_H263P,
.p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG,
.p.priv_class = &h263p_class,
.p.capabilities = AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,

View File

@ -1865,6 +1865,7 @@ const FFCodec ff_jpeg2000_encoder = {
AV_PIX_FMT_PAL8,
AV_PIX_FMT_NONE
},
.color_ranges = AVCOL_RANGE_MPEG,
.p.priv_class = &j2k_class,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
};

View File

@ -1548,6 +1548,7 @@ FFCodec ff_libaom_av1_encoder = {
.p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY |
AV_CODEC_CAP_ENCODER_RECON_FRAME |
AV_CODEC_CAP_OTHER_THREADS,
.color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG,
.p.profiles = NULL_IF_CONFIG_SMALL(ff_av1_profiles),
.p.priv_class = &class_aom,
.p.wrapper_name = "libaom",

View File

@ -334,6 +334,7 @@ const FFCodec ff_libkvazaar_encoder = {
.p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY |
AV_CODEC_CAP_OTHER_THREADS,
.p.pix_fmts = pix_fmts,
.color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG,
.p.priv_class = &class,
.priv_data_size = sizeof(LibkvazaarContext),

View File

@ -445,6 +445,7 @@ const FFCodec ff_libopenh264_encoder = {
.p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P,
AV_PIX_FMT_YUVJ420P,
AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG,
.defaults = svc_enc_defaults,
.p.priv_class = &class,
.p.wrapper_name = "libopenh264",

View File

@ -785,6 +785,7 @@ const FFCodec ff_libopenjpeg_encoder = {
AV_PIX_FMT_XYZ12,
AV_PIX_FMT_NONE
},
.color_ranges = AVCOL_RANGE_MPEG,
.p.priv_class = &openjpeg_class,
.p.wrapper_name = "libopenjpeg",
};

View File

@ -668,6 +668,7 @@ const FFCodec ff_librav1e_encoder = {
.p.priv_class = &class,
.defaults = librav1e_defaults,
.p.pix_fmts = librav1e_pix_fmts,
.color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG,
.p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_OTHER_THREADS |
AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_RECON_FRAME |
AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,

View File

@ -769,6 +769,7 @@ const FFCodec ff_libsvtav1_encoder = {
.p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P,
AV_PIX_FMT_YUV420P10,
AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG,
.p.priv_class = &class,
.defaults = eb_enc_defaults,
.p.wrapper_name = "libsvtav1",

View File

@ -391,5 +391,6 @@ const FFCodec ff_libtheora_encoder = {
.p.pix_fmts = (const enum AVPixelFormat[]){
AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_NONE
},
.color_ranges = AVCOL_RANGE_MPEG,
.p.wrapper_name = "libtheora",
};

View File

@ -2045,6 +2045,7 @@ const FFCodec ff_libvpx_vp8_encoder = {
FF_CODEC_CAP_INIT_CLEANUP |
FF_CODEC_CAP_AUTO_THREADS,
.p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUVA420P, AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG,
.p.priv_class = &class_vp8,
.defaults = defaults,
.p.wrapper_name = "libvpx",
@ -2116,6 +2117,7 @@ FFCodec ff_libvpx_vp9_encoder = {
.p.wrapper_name = "libvpx",
.priv_data_size = sizeof(VPxContext),
.init = vp9_init,
.color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG,
FF_CODEC_ENCODE_CB(vpx_encode),
.close = vpx_free,
.caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE |

View File

@ -95,6 +95,7 @@ const FFCodec ff_libwebp_encoder = {
.p.id = AV_CODEC_ID_WEBP,
.p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.p.pix_fmts = ff_libwebpenc_pix_fmts,
.color_ranges = AVCOL_RANGE_MPEG,
.p.priv_class = &ff_libwebpenc_class,
.p.wrapper_name = "libwebp",
.caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE,

View File

@ -168,6 +168,7 @@ const FFCodec ff_libwebp_anim_encoder = {
.p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY |
AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.p.pix_fmts = ff_libwebpenc_pix_fmts,
.color_ranges = AVCOL_RANGE_MPEG,
.p.priv_class = &ff_libwebpenc_class,
.p.wrapper_name = "libwebp",
.caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE,

View File

@ -1634,6 +1634,7 @@ const FFCodec ff_libx264_encoder = {
.close = X264_close,
.defaults = x264_defaults,
.p.pix_fmts = pix_fmts_all,
.color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_AUTO_THREADS
#if X264_BUILD < 158
| FF_CODEC_CAP_NOT_INIT_THREADSAFE
@ -1691,6 +1692,7 @@ const FFCodec ff_libx262_encoder = {
AV_CODEC_CAP_OTHER_THREADS |
AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.p.pix_fmts = pix_fmts_8bit,
.color_ranges = AVCOL_RANGE_MPEG,
.p.priv_class = &X262_class,
.p.wrapper_name = "libx264",
.priv_data_size = sizeof(X264Context),

View File

@ -1009,6 +1009,7 @@ FFCodec ff_libx265_encoder = {
.p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY |
AV_CODEC_CAP_OTHER_THREADS |
AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG,
.p.priv_class = &class,
.p.wrapper_name = "libx265",
.init = libx265_encode_init,

View File

@ -435,6 +435,7 @@ const FFCodec ff_libxavs_encoder = {
.caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE |
FF_CODEC_CAP_AUTO_THREADS,
.p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG,
.p.priv_class = &xavs_class,
.defaults = xavs_defaults,
.p.wrapper_name = "libxavs",

View File

@ -301,6 +301,7 @@ const FFCodec ff_libxavs2_encoder = {
FF_CODEC_CAP_AUTO_THREADS,
.p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P,
AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG,
.p.priv_class = &libxavs2,
.defaults = xavs2_defaults,
.p.wrapper_name = "libxavs2",

View File

@ -614,5 +614,6 @@ const FFCodec ff_libxeve_encoder = {
.p.profiles = NULL_IF_CONFIG_SMALL(ff_evc_profiles),
.p.wrapper_name = "libxeve",
.p.pix_fmts = supported_pixel_formats,
.color_ranges = AVCOL_RANGE_MPEG, /* FIXME: implement tagging */
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_NOT_INIT_THREADSAFE,
};

View File

@ -908,6 +908,7 @@ const FFCodec ff_libxvid_encoder = {
FF_CODEC_ENCODE_CB(xvid_encode_frame),
.close = xvid_encode_close,
.p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG,
.p.priv_class = &xvid_class,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
.p.wrapper_name = "libxvid",

View File

@ -328,4 +328,5 @@ const FFCodec ff_ljpeg_encoder = {
AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_YUVJ444P, AV_PIX_FMT_YUVJ422P,
AV_PIX_FMT_YUV420P , AV_PIX_FMT_YUV444P , AV_PIX_FMT_YUV422P,
AV_PIX_FMT_NONE},
.color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG,
};

View File

@ -696,5 +696,6 @@ const FFCodec ff_magicyuv_encoder = {
AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_YUVA444P, AV_PIX_FMT_GRAY8,
AV_PIX_FMT_NONE
},
.color_ranges = AVCOL_RANGE_MPEG, /* FIXME: implement tagging */
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
};

View File

@ -776,6 +776,7 @@ const FFCodec ff_ ## short_name ## _mediacodec_encoder = { \
AV_CODEC_CAP_ENCODER_FLUSH, \
.priv_data_size = sizeof(MediaCodecEncContext), \
.p.pix_fmts = avc_pix_fmts, \
.color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG, \
.init = mediacodec_init, \
FF_CODEC_RECEIVE_PACKET_CB(mediacodec_encode), \
.close = mediacodec_close, \

View File

@ -657,6 +657,7 @@ const FFCodec ff_mjpeg_encoder = {
AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV444P,
AV_PIX_FMT_NONE
},
.color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG,
.p.priv_class = &mjpeg_class,
.p.profiles = NULL_IF_CONFIG_SMALL(ff_mjpeg_profiles),
};
@ -683,6 +684,7 @@ const FFCodec ff_amv_encoder = {
.p.pix_fmts = (const enum AVPixelFormat[]) {
AV_PIX_FMT_YUVJ420P, AV_PIX_FMT_NONE
},
.color_ranges = AVCOL_RANGE_JPEG,
.p.priv_class = &amv_class,
.p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
};

View File

@ -1241,6 +1241,7 @@ const FFCodec ff_mpeg1video_encoder = {
.p.supported_framerates = ff_mpeg12_frame_rate_tab + 1,
.p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P,
AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG,
.p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SLICE_THREADS |
AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
@ -1260,6 +1261,7 @@ const FFCodec ff_mpeg2video_encoder = {
.p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P,
AV_PIX_FMT_YUV422P,
AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG,
.p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SLICE_THREADS |
AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,

View File

@ -1393,6 +1393,7 @@ const FFCodec ff_mpeg4_encoder = {
FF_CODEC_ENCODE_CB(ff_mpv_encode_picture),
.close = ff_mpv_encode_end,
.p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG,
.p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SLICE_THREADS |
AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,

View File

@ -681,6 +681,7 @@ const FFCodec ff_msmpeg4v2_encoder = {
.p.type = AVMEDIA_TYPE_VIDEO,
.p.id = AV_CODEC_ID_MSMPEG4V2,
.p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG,
.p.priv_class = &ff_mpv_enc_class,
.p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
@ -696,6 +697,7 @@ const FFCodec ff_msmpeg4v3_encoder = {
.p.type = AVMEDIA_TYPE_VIDEO,
.p.id = AV_CODEC_ID_MSMPEG4V3,
.p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG,
.p.priv_class = &ff_mpv_enc_class,
.p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
@ -711,6 +713,7 @@ const FFCodec ff_wmv1_encoder = {
.p.type = AVMEDIA_TYPE_VIDEO,
.p.id = AV_CODEC_ID_WMV1,
.p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG,
.p.priv_class = &ff_mpv_enc_class,
.p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,

View File

@ -202,6 +202,7 @@ const FFCodec ff_av1_nvenc_encoder = {
.p.priv_class = &av1_nvenc_class,
.defaults = defaults,
.p.pix_fmts = ff_nvenc_pix_fmts,
.color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG,
.p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE |
AV_CODEC_CAP_ENCODER_FLUSH | AV_CODEC_CAP_DR1 |
AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,

View File

@ -265,6 +265,7 @@ const FFCodec ff_h264_nvenc_encoder = {
.caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE |
FF_CODEC_CAP_INIT_CLEANUP,
.p.pix_fmts = ff_nvenc_pix_fmts,
.color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG,
.p.wrapper_name = "nvenc",
.hw_configs = ff_nvenc_hw_configs,
};

View File

@ -264,6 +264,7 @@ const FFCodec ff_hevc_nvenc_encoder = {
.p.priv_class = &hevc_nvenc_class,
.defaults = defaults,
.p.pix_fmts = ff_nvenc_pix_fmts,
.color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG,
.p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_HARDWARE |
AV_CODEC_CAP_ENCODER_FLUSH | AV_CODEC_CAP_DR1 |
AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,

View File

@ -948,6 +948,7 @@ const FFCodec ff_mpeg4_omx_encoder = {
FF_CODEC_ENCODE_CB(omx_encode_frame),
.close = omx_encode_end,
.p.pix_fmts = omx_encoder_pix_fmts,
.color_ranges = AVCOL_RANGE_MPEG,
.p.capabilities = AV_CODEC_CAP_DELAY,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
.p.priv_class = &omx_mpeg4enc_class,
@ -969,6 +970,7 @@ const FFCodec ff_h264_omx_encoder = {
FF_CODEC_ENCODE_CB(omx_encode_frame),
.close = omx_encode_end,
.p.pix_fmts = omx_encoder_pix_fmts,
.color_ranges = AVCOL_RANGE_MPEG, /* FIXME: implement tagging */
.p.capabilities = AV_CODEC_CAP_DELAY,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
.p.priv_class = &omx_h264enc_class,

View File

@ -956,6 +956,7 @@ const FFCodec ff_prores_aw_encoder = {
.p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS |
AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.p.pix_fmts = pix_fmts,
.color_ranges = AVCOL_RANGE_MPEG,
.priv_data_size = sizeof(ProresContext),
.init = prores_encode_init,
.close = prores_encode_close,
@ -973,6 +974,7 @@ const FFCodec ff_prores_encoder = {
.p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS |
AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.p.pix_fmts = pix_fmts,
.color_ranges = AVCOL_RANGE_MPEG,
.priv_data_size = sizeof(ProresContext),
.init = prores_encode_init,
.close = prores_encode_close,

View File

@ -1385,6 +1385,7 @@ const FFCodec ff_prores_ks_encoder = {
AV_PIX_FMT_YUV422P10, AV_PIX_FMT_YUV444P10,
AV_PIX_FMT_YUVA444P10, AV_PIX_FMT_NONE
},
.color_ranges = AVCOL_RANGE_MPEG,
.p.priv_class = &proresenc_class,
.p.profiles = NULL_IF_CONFIG_SMALL(ff_prores_profiles),
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,

View File

@ -221,6 +221,7 @@ FFCodec ff_av1_qsv_encoder = {
AV_PIX_FMT_P010,
AV_PIX_FMT_QSV,
AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG,
.p.priv_class = &class,
.defaults = qsv_enc_defaults,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,

View File

@ -202,6 +202,7 @@ const FFCodec ff_h264_qsv_encoder = {
.p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12,
AV_PIX_FMT_QSV,
AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG,
.p.priv_class = &class,
.defaults = qsv_enc_defaults,
.caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE |

View File

@ -407,6 +407,7 @@ const FFCodec ff_hevc_qsv_encoder = {
AV_PIX_FMT_VUYX,
AV_PIX_FMT_XV30,
AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG,
.p.priv_class = &class,
.defaults = qsv_enc_defaults,
.caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE |

View File

@ -93,6 +93,7 @@ const FFCodec ff_mjpeg_qsv_encoder = {
AV_PIX_FMT_BGRA,
AV_PIX_FMT_QSV,
AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG,
.p.priv_class = &class,
.defaults = qsv_enc_defaults,
.p.wrapper_name = "qsv",

View File

@ -105,6 +105,7 @@ const FFCodec ff_mpeg2_qsv_encoder = {
.p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_NV12,
AV_PIX_FMT_QSV,
AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG,
.p.priv_class = &class,
.defaults = qsv_enc_defaults,
.caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE |

View File

@ -117,6 +117,7 @@ const FFCodec ff_vp9_qsv_encoder = {
AV_PIX_FMT_QSV,
AV_PIX_FMT_XV30,
AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG,
.p.priv_class = &class,
.defaults = qsv_enc_defaults,
.caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE |

View File

@ -1128,6 +1128,7 @@ const FFCodec ff_roq_encoder = {
.close = roq_encode_end,
.p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUVJ444P,
AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_JPEG,
.p.priv_class = &roq_class,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
};

View File

@ -78,4 +78,5 @@ const FFCodec ff_rv10_encoder = {
.close = ff_mpv_encode_end,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
.p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG,
};

View File

@ -75,4 +75,5 @@ const FFCodec ff_rv20_encoder = {
.close = ff_mpv_encode_end,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
.p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG,
};

View File

@ -2146,6 +2146,7 @@ const FFCodec ff_snow_encoder = {
AV_PIX_FMT_GRAY8,
AV_PIX_FMT_NONE
},
.color_ranges = AVCOL_RANGE_MPEG,
.p.priv_class = &snowenc_class,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
};

View File

@ -300,6 +300,7 @@ const FFCodec ff_speedhq_encoder = {
FF_CODEC_ENCODE_CB(ff_mpv_encode_picture),
.close = ff_mpv_encode_end,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
.color_ranges = AVCOL_RANGE_MPEG,
.p.pix_fmts = (const enum AVPixelFormat[]) {
AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV444P,
AV_PIX_FMT_NONE

View File

@ -747,5 +747,6 @@ const FFCodec ff_svq1_encoder = {
.close = svq1_encode_end,
.p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV410P,
AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
};

View File

@ -589,5 +589,6 @@ const FFCodec ff_tiff_encoder = {
AV_PIX_FMT_YUV410P, AV_PIX_FMT_YUV411P,
AV_PIX_FMT_NONE
},
.color_ranges = AVCOL_RANGE_MPEG,
.p.priv_class = &tiffenc_class,
};

View File

@ -675,5 +675,6 @@ const FFCodec ff_utvideo_encoder = {
AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRAP, AV_PIX_FMT_YUV422P,
AV_PIX_FMT_YUV420P, AV_PIX_FMT_YUV444P, AV_PIX_FMT_NONE
},
.color_ranges = AVCOL_RANGE_MPEG,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
};

View File

@ -433,6 +433,7 @@ static const FFCodecDefault v4l2_m2m_defaults[] = {
.close = v4l2_encode_close, \
.defaults = v4l2_m2m_defaults, \
.p.capabilities = AV_CODEC_CAP_HARDWARE | AV_CODEC_CAP_DELAY, \
.color_ranges = AVCOL_RANGE_MPEG, \
.caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | \
FF_CODEC_CAP_INIT_CLEANUP, \
.p.wrapper_name = "v4l2m2m", \

View File

@ -1053,6 +1053,7 @@ const FFCodec ff_av1_vaapi_encoder = {
AV_PIX_FMT_VAAPI,
AV_PIX_FMT_NONE,
},
.color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG,
.hw_configs = ff_vaapi_encode_hw_configs,
.p.wrapper_name = "vaapi",
};

View File

@ -1397,6 +1397,7 @@ const FFCodec ff_h264_vaapi_encoder = {
AV_PIX_FMT_VAAPI,
AV_PIX_FMT_NONE,
},
.color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG,
.hw_configs = ff_vaapi_encode_hw_configs,
.p.wrapper_name = "vaapi",
};

View File

@ -1511,6 +1511,7 @@ const FFCodec ff_hevc_vaapi_encoder = {
AV_PIX_FMT_VAAPI,
AV_PIX_FMT_NONE,
},
.color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG,
.hw_configs = ff_vaapi_encode_hw_configs,
.p.wrapper_name = "vaapi",
};

View File

@ -586,6 +586,7 @@ const FFCodec ff_mjpeg_vaapi_encoder = {
AV_PIX_FMT_VAAPI,
AV_PIX_FMT_NONE,
},
.color_ranges = AVCOL_RANGE_MPEG, /* FIXME: implement tagging */
.hw_configs = ff_vaapi_encode_hw_configs,
.p.wrapper_name = "vaapi",
};

View File

@ -710,6 +710,7 @@ const FFCodec ff_mpeg2_vaapi_encoder = {
AV_PIX_FMT_VAAPI,
AV_PIX_FMT_NONE,
},
.color_ranges = AVCOL_RANGE_MPEG,
.hw_configs = ff_vaapi_encode_hw_configs,
.p.wrapper_name = "vaapi",
};

View File

@ -264,6 +264,7 @@ const FFCodec ff_vp8_vaapi_encoder = {
AV_PIX_FMT_VAAPI,
AV_PIX_FMT_NONE,
},
.color_ranges = AVCOL_RANGE_MPEG, /* FIXME: implement tagging */
.hw_configs = ff_vaapi_encode_hw_configs,
.p.wrapper_name = "vaapi",
};

View File

@ -317,6 +317,7 @@ const FFCodec ff_vp9_vaapi_encoder = {
.caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE |
FF_CODEC_CAP_INIT_CLEANUP,
.defaults = vaapi_encode_vp9_defaults,
.color_ranges = AVCOL_RANGE_MPEG, /* FIXME: implement tagging */
.p.pix_fmts = (const enum AVPixelFormat[]) {
AV_PIX_FMT_VAAPI,
AV_PIX_FMT_NONE,

View File

@ -1244,5 +1244,6 @@ const FFCodec ff_vc2_encoder = {
FF_CODEC_ENCODE_CB(vc2_encode_frame),
.p.priv_class = &vc2enc_class,
.defaults = vc2enc_defaults,
.p.pix_fmts = allowed_pix_fmts
.p.pix_fmts = allowed_pix_fmts,
.color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG,
};

View File

@ -2997,6 +2997,7 @@ const FFCodec ff_hevc_videotoolbox_encoder = {
.priv_data_size = sizeof(VTEncContext),
.p.pix_fmts = hevc_pix_fmts,
.defaults = vt_defaults,
.color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG,
.init = vtenc_init,
FF_CODEC_ENCODE_CB(vtenc_frame),
.close = vtenc_close,
@ -3037,6 +3038,7 @@ const FFCodec ff_prores_videotoolbox_encoder = {
.priv_data_size = sizeof(VTEncContext),
.p.pix_fmts = prores_pix_fmts,
.defaults = vt_defaults,
.color_ranges = AVCOL_RANGE_MPEG | AVCOL_RANGE_JPEG,
.init = vtenc_init,
FF_CODEC_ENCODE_CB(vtenc_frame),
.close = vtenc_close,

View File

@ -249,6 +249,7 @@ const FFCodec ff_wmv2_encoder = {
FF_CODEC_ENCODE_CB(ff_mpv_encode_picture),
.close = ff_mpv_encode_end,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
.color_ranges = AVCOL_RANGE_MPEG,
.p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P,
AV_PIX_FMT_NONE },
};