1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2025-08-04 22:03:09 +02:00

avcodec/mpegvideo_enc: Add AV_CODEC_CAP_DR1

The mpegvideo-based encoders do one uncommon thing with
the packet's data given by ff_alloc_packet(): They potentially
reallocate it. But this only affects the internal buffer
and is not user-facing at all, so one can nevertheless
use the AV_CODEC_CAP_DR1 for them.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
This commit is contained in:
Andreas Rheinhardt
2024-06-30 17:44:46 +02:00
parent ab768b88e0
commit b3ba961df6
11 changed files with 21 additions and 16 deletions

View File

@ -98,6 +98,7 @@ const FFCodec ff_flv_encoder = {
.p.type = AVMEDIA_TYPE_VIDEO, .p.type = AVMEDIA_TYPE_VIDEO,
.p.id = AV_CODEC_ID_FLV1, .p.id = AV_CODEC_ID_FLV1,
.p.priv_class = &ff_mpv_enc_class, .p.priv_class = &ff_mpv_enc_class,
.p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.priv_data_size = sizeof(MpegEncContext), .priv_data_size = sizeof(MpegEncContext),
.init = ff_mpv_encode_init, .init = ff_mpv_encode_init,
FF_CODEC_ENCODE_CB(ff_mpv_encode_picture), FF_CODEC_ENCODE_CB(ff_mpv_encode_picture),
@ -106,5 +107,4 @@ const FFCodec ff_flv_encoder = {
.p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P,
AV_PIX_FMT_NONE}, AV_PIX_FMT_NONE},
.color_ranges = AVCOL_RANGE_MPEG, .color_ranges = AVCOL_RANGE_MPEG,
.p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
}; };

View File

@ -383,6 +383,7 @@ const FFCodec ff_h261_encoder = {
.p.type = AVMEDIA_TYPE_VIDEO, .p.type = AVMEDIA_TYPE_VIDEO,
.p.id = AV_CODEC_ID_H261, .p.id = AV_CODEC_ID_H261,
.p.priv_class = &ff_mpv_enc_class, .p.priv_class = &ff_mpv_enc_class,
.p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.priv_data_size = sizeof(H261EncContext), .priv_data_size = sizeof(H261EncContext),
.init = ff_mpv_encode_init, .init = ff_mpv_encode_init,
FF_CODEC_ENCODE_CB(ff_mpv_encode_picture), FF_CODEC_ENCODE_CB(ff_mpv_encode_picture),
@ -391,5 +392,4 @@ const FFCodec ff_h261_encoder = {
.p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P,
AV_PIX_FMT_NONE }, AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG, .color_ranges = AVCOL_RANGE_MPEG,
.p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
}; };

View File

@ -922,7 +922,7 @@ const FFCodec ff_h263_encoder = {
.p.pix_fmts = (const enum AVPixelFormat[]){AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE}, .p.pix_fmts = (const enum AVPixelFormat[]){AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE},
.color_ranges = AVCOL_RANGE_MPEG, .color_ranges = AVCOL_RANGE_MPEG,
.p.priv_class = &h263_class, .p.priv_class = &h263_class,
.p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
.priv_data_size = sizeof(MpegEncContext), .priv_data_size = sizeof(MpegEncContext),
.init = ff_mpv_encode_init, .init = ff_mpv_encode_init,
@ -954,7 +954,8 @@ const FFCodec ff_h263p_encoder = {
.p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG, .color_ranges = AVCOL_RANGE_MPEG,
.p.priv_class = &h263p_class, .p.priv_class = &h263p_class,
.p.capabilities = AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_SLICE_THREADS |
AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
.priv_data_size = sizeof(MpegEncContext), .priv_data_size = sizeof(MpegEncContext),
.init = ff_mpv_encode_init, .init = ff_mpv_encode_init,

View File

@ -669,7 +669,8 @@ FFCodec ff_mjpeg_encoder = {
.init = ff_mpv_encode_init, .init = ff_mpv_encode_init,
FF_CODEC_ENCODE_CB(ff_mpv_encode_picture), FF_CODEC_ENCODE_CB(ff_mpv_encode_picture),
.close = mjpeg_encode_close, .close = mjpeg_encode_close,
.p.capabilities = AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_FRAME_THREADS | .p.capabilities = AV_CODEC_CAP_DR1 |
AV_CODEC_CAP_SLICE_THREADS | AV_CODEC_CAP_FRAME_THREADS |
AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_ICC_PROFILES, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_ICC_PROFILES,
.p.pix_fmts = (const enum AVPixelFormat[]) { .p.pix_fmts = (const enum AVPixelFormat[]) {
@ -696,6 +697,7 @@ const FFCodec ff_amv_encoder = {
CODEC_LONG_NAME("AMV Video"), CODEC_LONG_NAME("AMV Video"),
.p.type = AVMEDIA_TYPE_VIDEO, .p.type = AVMEDIA_TYPE_VIDEO,
.p.id = AV_CODEC_ID_AMV, .p.id = AV_CODEC_ID_AMV,
.p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.priv_data_size = sizeof(MJPEGEncContext), .priv_data_size = sizeof(MJPEGEncContext),
.init = ff_mpv_encode_init, .init = ff_mpv_encode_init,
FF_CODEC_ENCODE_CB(amv_encode_picture), FF_CODEC_ENCODE_CB(amv_encode_picture),
@ -706,6 +708,5 @@ const FFCodec ff_amv_encoder = {
}, },
.color_ranges = AVCOL_RANGE_JPEG, .color_ranges = AVCOL_RANGE_JPEG,
.p.priv_class = &amv_class, .p.priv_class = &amv_class,
.p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
}; };
#endif #endif

View File

@ -1244,7 +1244,8 @@ const FFCodec ff_mpeg1video_encoder = {
.p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P,
AV_PIX_FMT_NONE }, AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG, .color_ranges = AVCOL_RANGE_MPEG,
.p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SLICE_THREADS | .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY |
AV_CODEC_CAP_SLICE_THREADS |
AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
.p.priv_class = &mpeg1_class, .p.priv_class = &mpeg1_class,
@ -1264,7 +1265,8 @@ const FFCodec ff_mpeg2video_encoder = {
AV_PIX_FMT_YUV422P, AV_PIX_FMT_YUV422P,
AV_PIX_FMT_NONE }, AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG, .color_ranges = AVCOL_RANGE_MPEG,
.p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SLICE_THREADS | .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY |
AV_CODEC_CAP_SLICE_THREADS |
AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
.p.priv_class = &mpeg2_class, .p.priv_class = &mpeg2_class,

View File

@ -1394,7 +1394,8 @@ const FFCodec ff_mpeg4_encoder = {
.close = ff_mpv_encode_end, .close = ff_mpv_encode_end,
.p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG, .color_ranges = AVCOL_RANGE_MPEG,
.p.capabilities = AV_CODEC_CAP_DELAY | AV_CODEC_CAP_SLICE_THREADS | .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY |
AV_CODEC_CAP_SLICE_THREADS |
AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
.p.priv_class = &mpeg4enc_class, .p.priv_class = &mpeg4enc_class,

View File

@ -683,7 +683,7 @@ const FFCodec ff_msmpeg4v2_encoder = {
.p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG, .color_ranges = AVCOL_RANGE_MPEG,
.p.priv_class = &ff_mpv_enc_class, .p.priv_class = &ff_mpv_enc_class,
.p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
.priv_data_size = sizeof(MSMPEG4EncContext), .priv_data_size = sizeof(MSMPEG4EncContext),
.init = ff_mpv_encode_init, .init = ff_mpv_encode_init,
@ -699,7 +699,7 @@ const FFCodec ff_msmpeg4v3_encoder = {
.p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG, .color_ranges = AVCOL_RANGE_MPEG,
.p.priv_class = &ff_mpv_enc_class, .p.priv_class = &ff_mpv_enc_class,
.p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
.priv_data_size = sizeof(MSMPEG4EncContext), .priv_data_size = sizeof(MSMPEG4EncContext),
.init = ff_mpv_encode_init, .init = ff_mpv_encode_init,
@ -715,7 +715,7 @@ const FFCodec ff_wmv1_encoder = {
.p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE }, .p.pix_fmts = (const enum AVPixelFormat[]){ AV_PIX_FMT_YUV420P, AV_PIX_FMT_NONE },
.color_ranges = AVCOL_RANGE_MPEG, .color_ranges = AVCOL_RANGE_MPEG,
.p.priv_class = &ff_mpv_enc_class, .p.priv_class = &ff_mpv_enc_class,
.p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
.priv_data_size = sizeof(MSMPEG4EncContext), .priv_data_size = sizeof(MSMPEG4EncContext),
.init = ff_mpv_encode_init, .init = ff_mpv_encode_init,

View File

@ -71,7 +71,7 @@ const FFCodec ff_rv10_encoder = {
.p.type = AVMEDIA_TYPE_VIDEO, .p.type = AVMEDIA_TYPE_VIDEO,
.p.id = AV_CODEC_ID_RV10, .p.id = AV_CODEC_ID_RV10,
.p.priv_class = &ff_mpv_enc_class, .p.priv_class = &ff_mpv_enc_class,
.p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.priv_data_size = sizeof(MpegEncContext), .priv_data_size = sizeof(MpegEncContext),
.init = ff_mpv_encode_init, .init = ff_mpv_encode_init,
FF_CODEC_ENCODE_CB(ff_mpv_encode_picture), FF_CODEC_ENCODE_CB(ff_mpv_encode_picture),

View File

@ -68,7 +68,7 @@ const FFCodec ff_rv20_encoder = {
.p.type = AVMEDIA_TYPE_VIDEO, .p.type = AVMEDIA_TYPE_VIDEO,
.p.id = AV_CODEC_ID_RV20, .p.id = AV_CODEC_ID_RV20,
.p.priv_class = &ff_mpv_enc_class, .p.priv_class = &ff_mpv_enc_class,
.p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.priv_data_size = sizeof(MpegEncContext), .priv_data_size = sizeof(MpegEncContext),
.init = ff_mpv_encode_init, .init = ff_mpv_encode_init,
FF_CODEC_ENCODE_CB(ff_mpv_encode_picture), FF_CODEC_ENCODE_CB(ff_mpv_encode_picture),

View File

@ -294,7 +294,7 @@ const FFCodec ff_speedhq_encoder = {
.p.type = AVMEDIA_TYPE_VIDEO, .p.type = AVMEDIA_TYPE_VIDEO,
.p.id = AV_CODEC_ID_SPEEDHQ, .p.id = AV_CODEC_ID_SPEEDHQ,
.p.priv_class = &ff_mpv_enc_class, .p.priv_class = &ff_mpv_enc_class,
.p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.priv_data_size = sizeof(SpeedHQEncContext), .priv_data_size = sizeof(SpeedHQEncContext),
.init = ff_mpv_encode_init, .init = ff_mpv_encode_init,
FF_CODEC_ENCODE_CB(ff_mpv_encode_picture), FF_CODEC_ENCODE_CB(ff_mpv_encode_picture),

View File

@ -243,7 +243,7 @@ const FFCodec ff_wmv2_encoder = {
.p.type = AVMEDIA_TYPE_VIDEO, .p.type = AVMEDIA_TYPE_VIDEO,
.p.id = AV_CODEC_ID_WMV2, .p.id = AV_CODEC_ID_WMV2,
.p.priv_class = &ff_mpv_enc_class, .p.priv_class = &ff_mpv_enc_class,
.p.capabilities = AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE, .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_ENCODER_REORDERED_OPAQUE,
.priv_data_size = sizeof(WMV2EncContext), .priv_data_size = sizeof(WMV2EncContext),
.init = wmv2_encode_init, .init = wmv2_encode_init,
FF_CODEC_ENCODE_CB(ff_mpv_encode_picture), FF_CODEC_ENCODE_CB(ff_mpv_encode_picture),