X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fdnxhdenc.c;h=58fd97e339ccac8e01c4e0d1ea7f1bb082b2b358;hb=7ea5dbcb83a502d8152d5c64d32f9a16e7e907c7;hp=fde98d2ba2fa125eb7b13238af4a19ac7700251a;hpb=9db747b2a300380dd65032818155067054332dae;p=ffmpeg diff --git a/libavcodec/dnxhdenc.c b/libavcodec/dnxhdenc.c index fde98d2ba2f..58fd97e339c 100644 --- a/libavcodec/dnxhdenc.c +++ b/libavcodec/dnxhdenc.c @@ -31,7 +31,6 @@ #include "dsputil.h" #include "internal.h" #include "mpegvideo.h" -#include "mpegvideo_common.h" #include "dnxhdenc.h" #include "internal.h" @@ -39,7 +38,7 @@ #define DNX10BIT_QMAT_SHIFT 18 // The largest value that will not lead to overflow for 10bit samples. static const AVOption options[]={ - {"nitris_compat", "encode with Avid Nitris compatibility", offsetof(DNXHDEncContext, nitris_compat), AV_OPT_TYPE_INT, {.dbl = 0}, 0, 1, VE}, + {"nitris_compat", "encode with Avid Nitris compatibility", offsetof(DNXHDEncContext, nitris_compat), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, VE}, {NULL} }; @@ -52,7 +51,7 @@ static const AVClass class = { #define LAMBDA_FRAC_BITS 10 -static void dnxhd_8bit_get_pixels_8x4_sym(DCTELEM *restrict block, const uint8_t *pixels, int line_size) +static void dnxhd_8bit_get_pixels_8x4_sym(DCTELEM *av_restrict block, const uint8_t *pixels, int line_size) { int i; for (i = 0; i < 4; i++) { @@ -69,16 +68,24 @@ static void dnxhd_8bit_get_pixels_8x4_sym(DCTELEM *restrict block, const uint8_t memcpy(block + 24, block - 32, sizeof(*block) * 8); } -static av_always_inline void dnxhd_10bit_get_pixels_8x4_sym(DCTELEM *restrict block, const uint8_t *pixels, int line_size) +static av_always_inline void dnxhd_10bit_get_pixels_8x4_sym(DCTELEM *av_restrict block, const uint8_t *pixels, int line_size) { int i; - - block += 32; + const uint16_t* pixels16 = (const uint16_t*)pixels; + line_size >>= 1; for (i = 0; i < 4; i++) { - memcpy(block + i * 8, pixels + i * line_size, 8 * sizeof(*block)); - memcpy(block - (i+1) * 8, pixels + i * line_size, 8 * sizeof(*block)); + block[0] = pixels16[0]; block[1] = pixels16[1]; + block[2] = pixels16[2]; block[3] = pixels16[3]; + block[4] = pixels16[4]; block[5] = pixels16[5]; + block[6] = pixels16[6]; block[7] = pixels16[7]; + pixels16 += line_size; + block += 8; } + memcpy(block, block - 8, sizeof(*block) * 8); + memcpy(block + 8, block - 16, sizeof(*block) * 8); + memcpy(block + 16, block - 24, sizeof(*block) * 8); + memcpy(block + 24, block - 32, sizeof(*block) * 8); } static int dnxhd_10bit_dct_quantize(MpegEncContext *ctx, DCTELEM *block, @@ -287,9 +294,8 @@ static int dnxhd_encode_init(AVCodecContext *avctx) ctx->block_width_l2 = 3; } -#if HAVE_MMX - ff_dnxhd_init_mmx(ctx); -#endif + if (ARCH_X86) + ff_dnxhdenc_init_x86(ctx); ctx->m.mb_height = (avctx->height + 15) / 16; ctx->m.mb_width = (avctx->width + 15) / 16; @@ -1008,7 +1014,7 @@ static const AVCodecDefault dnxhd_defaults[] = { AVCodec ff_dnxhd_encoder = { .name = "dnxhd", .type = AVMEDIA_TYPE_VIDEO, - .id = CODEC_ID_DNXHD, + .id = AV_CODEC_ID_DNXHD, .priv_data_size = sizeof(DNXHDEncContext), .init = dnxhd_encode_init, .encode2 = dnxhd_encode_picture,