diff options
author | Ronald S. Bultje <rbultje@google.com> | 2011-04-20 22:14:42 +0400 |
---|---|---|
committer | Ronald S. Bultje <rsbultje@gmail.com> | 2011-04-22 03:42:19 +0400 |
commit | 94f7451a3a5ad61cd49da0aa9f08cefe75482007 (patch) | |
tree | dde7d51bb68563d316ca285e19bd68fa326e925a | |
parent | 3283f274fdbef16d13df06661cec601e1bc01aab (diff) |
Introduce slice threads flag.
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
-rw-r--r-- | doc/APIchanges | 3 | ||||
-rw-r--r-- | libavcodec/avcodec.h | 4 | ||||
-rw-r--r-- | libavcodec/dnxhdenc.c | 1 | ||||
-rw-r--r-- | libavcodec/dv.c | 3 | ||||
-rw-r--r-- | libavcodec/ffv1.c | 3 | ||||
-rw-r--r-- | libavcodec/h264.c | 3 | ||||
-rw-r--r-- | libavcodec/mpeg12.c | 4 | ||||
-rw-r--r-- | libavcodec/mpeg12enc.c | 4 | ||||
-rw-r--r-- | libavcodec/mpeg4videoenc.c | 2 | ||||
-rw-r--r-- | libavcodec/mpegvideo_enc.c | 1 | ||||
-rw-r--r-- | libavcodec/pthread.c | 3 | ||||
-rw-r--r-- | libavcodec/version.h | 2 |
12 files changed, 23 insertions, 10 deletions
diff --git a/doc/APIchanges b/doc/APIchanges index 24ba7b143b..482b3a8c04 100644 --- a/doc/APIchanges +++ b/doc/APIchanges @@ -13,6 +13,9 @@ libavutil: 2011-04-18 API changes, most recent first: +2011-04-21 - XXXXXX - lavc 53.1.0 - avcodec.h + Add CODEC_CAP_SLICE_THREADS for codecs supporting sliced threading. + 2011-04-15 - lavc 52.120.0 - avcodec.h AVPacket structure got additional members for passing side information: 4de339e introduce side information for AVPacket diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h index 7727ad08bf..d1377ca0f8 100644 --- a/libavcodec/avcodec.h +++ b/libavcodec/avcodec.h @@ -676,6 +676,10 @@ typedef struct RcOverride{ * Codec supports frame-level multithreading. */ #define CODEC_CAP_FRAME_THREADS 0x1000 +/** + * Codec supports slice-based (or partition-based) multithreading. + */ +#define CODEC_CAP_SLICE_THREADS 0x2000 //The following defines may change, don't expect compatibility if you use them. #define MB_TYPE_INTRA4x4 0x0001 diff --git a/libavcodec/dnxhdenc.c b/libavcodec/dnxhdenc.c index 958f9d4081..bd5f2282ae 100644 --- a/libavcodec/dnxhdenc.c +++ b/libavcodec/dnxhdenc.c @@ -869,6 +869,7 @@ AVCodec ff_dnxhd_encoder = { dnxhd_encode_init, dnxhd_encode_picture, dnxhd_encode_end, + .capabilities = CODEC_CAP_SLICE_THREADS, .pix_fmts = (const enum PixelFormat[]){PIX_FMT_YUV422P, PIX_FMT_NONE}, .long_name = NULL_IF_CONFIG_SMALL("VC3/DNxHD"), .priv_class = &class, diff --git a/libavcodec/dv.c b/libavcodec/dv.c index 0b87d28e8b..5c5e7fefb1 100644 --- a/libavcodec/dv.c +++ b/libavcodec/dv.c @@ -1297,6 +1297,7 @@ AVCodec ff_dvvideo_encoder = { sizeof(DVVideoContext), dvvideo_init_encoder, dvvideo_encode_frame, + .capabilities = CODEC_CAP_SLICE_THREADS, .pix_fmts = (const enum PixelFormat[]) {PIX_FMT_YUV411P, PIX_FMT_YUV422P, PIX_FMT_YUV420P, PIX_FMT_NONE}, .long_name = NULL_IF_CONFIG_SMALL("DV (Digital Video)"), }; @@ -1312,7 +1313,7 @@ AVCodec ff_dvvideo_decoder = { NULL, dvvideo_close, dvvideo_decode_frame, - CODEC_CAP_DR1, + CODEC_CAP_DR1 | CODEC_CAP_SLICE_THREADS, NULL, .max_lowres = 3, .long_name = NULL_IF_CONFIG_SMALL("DV (Digital Video)"), diff --git a/libavcodec/ffv1.c b/libavcodec/ffv1.c index 8b46091462..bf89fae8c5 100644 --- a/libavcodec/ffv1.c +++ b/libavcodec/ffv1.c @@ -1795,7 +1795,7 @@ AVCodec ff_ffv1_decoder = { NULL, common_end, decode_frame, - CODEC_CAP_DR1 /*| CODEC_CAP_DRAW_HORIZ_BAND*/, + CODEC_CAP_DR1 /*| CODEC_CAP_DRAW_HORIZ_BAND*/ | CODEC_CAP_SLICE_THREADS, NULL, .long_name= NULL_IF_CONFIG_SMALL("FFmpeg video codec #1"), }; @@ -1809,6 +1809,7 @@ AVCodec ff_ffv1_encoder = { encode_init, encode_frame, common_end, + .capabilities = CODEC_CAP_SLICE_THREADS, .pix_fmts= (const enum PixelFormat[]){PIX_FMT_YUV420P, PIX_FMT_YUV444P, PIX_FMT_YUV422P, PIX_FMT_YUV411P, PIX_FMT_YUV410P, PIX_FMT_RGB32, PIX_FMT_YUV420P16, PIX_FMT_YUV422P16, PIX_FMT_YUV444P16, PIX_FMT_NONE}, .long_name= NULL_IF_CONFIG_SMALL("FFmpeg video codec #1"), }; diff --git a/libavcodec/h264.c b/libavcodec/h264.c index dbf71a761e..cd7dccc172 100644 --- a/libavcodec/h264.c +++ b/libavcodec/h264.c @@ -3426,7 +3426,8 @@ AVCodec ff_h264_decoder = { NULL, ff_h264_decode_end, decode_frame, - /*CODEC_CAP_DRAW_HORIZ_BAND |*/ CODEC_CAP_DR1 | CODEC_CAP_DELAY, + /*CODEC_CAP_DRAW_HORIZ_BAND |*/ CODEC_CAP_DR1 | CODEC_CAP_DELAY | + CODEC_CAP_SLICE_THREADS, .flush= flush_dpb, .long_name = NULL_IF_CONFIG_SMALL("H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10"), .profiles = NULL_IF_CONFIG_SMALL(profiles), diff --git a/libavcodec/mpeg12.c b/libavcodec/mpeg12.c index 3e9f74a696..0676f18157 100644 --- a/libavcodec/mpeg12.c +++ b/libavcodec/mpeg12.c @@ -2523,7 +2523,7 @@ AVCodec ff_mpeg2video_decoder = { NULL, mpeg_decode_end, mpeg_decode_frame, - CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY, + CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY | CODEC_CAP_SLICE_THREADS, .flush= flush, .max_lowres= 3, .long_name= NULL_IF_CONFIG_SMALL("MPEG-2 video"), @@ -2540,7 +2540,7 @@ AVCodec ff_mpegvideo_decoder = { NULL, mpeg_decode_end, mpeg_decode_frame, - CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY, + CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_DR1 | CODEC_CAP_TRUNCATED | CODEC_CAP_DELAY | CODEC_CAP_SLICE_THREADS, .flush= flush, .max_lowres= 3, .long_name= NULL_IF_CONFIG_SMALL("MPEG-1 video"), diff --git a/libavcodec/mpeg12enc.c b/libavcodec/mpeg12enc.c index 206e7d6bc4..5e9b2ba3b1 100644 --- a/libavcodec/mpeg12enc.c +++ b/libavcodec/mpeg12enc.c @@ -940,7 +940,7 @@ AVCodec ff_mpeg1video_encoder = { MPV_encode_end, .supported_framerates= ff_frame_rate_tab+1, .pix_fmts= (const enum PixelFormat[]){PIX_FMT_YUV420P, PIX_FMT_NONE}, - .capabilities= CODEC_CAP_DELAY, + .capabilities= CODEC_CAP_DELAY | CODEC_CAP_SLICE_THREADS, .long_name= NULL_IF_CONFIG_SMALL("MPEG-1 video"), }; @@ -954,6 +954,6 @@ AVCodec ff_mpeg2video_encoder = { MPV_encode_end, .supported_framerates= ff_frame_rate_tab+1, .pix_fmts= (const enum PixelFormat[]){PIX_FMT_YUV420P, PIX_FMT_YUV422P, PIX_FMT_NONE}, - .capabilities= CODEC_CAP_DELAY, + .capabilities= CODEC_CAP_DELAY | CODEC_CAP_SLICE_THREADS, .long_name= NULL_IF_CONFIG_SMALL("MPEG-2 video"), }; diff --git a/libavcodec/mpeg4videoenc.c b/libavcodec/mpeg4videoenc.c index 134894c112..33ecc0ae46 100644 --- a/libavcodec/mpeg4videoenc.c +++ b/libavcodec/mpeg4videoenc.c @@ -1347,6 +1347,6 @@ AVCodec ff_mpeg4_encoder = { MPV_encode_picture, MPV_encode_end, .pix_fmts= (const enum PixelFormat[]){PIX_FMT_YUV420P, PIX_FMT_NONE}, - .capabilities= CODEC_CAP_DELAY, + .capabilities= CODEC_CAP_DELAY | CODEC_CAP_SLICE_THREADS, .long_name= NULL_IF_CONFIG_SMALL("MPEG-4 part 2"), }; diff --git a/libavcodec/mpegvideo_enc.c b/libavcodec/mpegvideo_enc.c index 7f9892351b..c08098506a 100644 --- a/libavcodec/mpegvideo_enc.c +++ b/libavcodec/mpegvideo_enc.c @@ -3800,6 +3800,7 @@ AVCodec ff_h263p_encoder = { MPV_encode_init, MPV_encode_picture, MPV_encode_end, + .capabilities = CODEC_CAP_SLICE_THREADS, .pix_fmts= (const enum PixelFormat[]){PIX_FMT_YUV420P, PIX_FMT_NONE}, .long_name= NULL_IF_CONFIG_SMALL("H.263+ / H.263-1998 / H.263 version 2"), }; diff --git a/libavcodec/pthread.c b/libavcodec/pthread.c index ba6e395d75..0311dcd7e9 100644 --- a/libavcodec/pthread.c +++ b/libavcodec/pthread.c @@ -877,7 +877,8 @@ static void validate_thread_parameters(AVCodecContext *avctx) avctx->active_thread_type = 0; } else if (frame_threading_supported && (avctx->thread_type & FF_THREAD_FRAME)) { avctx->active_thread_type = FF_THREAD_FRAME; - } else if (avctx->thread_type & FF_THREAD_SLICE) { + } else if (avctx->codec->capabilities & CODEC_CAP_SLICE_THREADS && + avctx->thread_type & FF_THREAD_SLICE) { avctx->active_thread_type = FF_THREAD_SLICE; } } diff --git a/libavcodec/version.h b/libavcodec/version.h index b9c219d260..487e7a5136 100644 --- a/libavcodec/version.h +++ b/libavcodec/version.h @@ -21,7 +21,7 @@ #define AVCODEC_VERSION_H #define LIBAVCODEC_VERSION_MAJOR 53 -#define LIBAVCODEC_VERSION_MINOR 0 +#define LIBAVCODEC_VERSION_MINOR 1 #define LIBAVCODEC_VERSION_MICRO 0 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ |