mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-07-03 06:27:44 +08:00
Merge remote-tracking branch 'qatar/master'
* qatar/master: mpegvideo: increase edge_emu_buffer size for VC1 lavc: merge latest x86inc.asm fixes with x264 Conflicts: libavcodec/mpegvideo.c Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
@ -238,8 +238,10 @@ int ff_mpv_frame_size_alloc(MpegEncContext *s, int linesize)
|
|||||||
|
|
||||||
// edge emu needs blocksize + filter length - 1
|
// edge emu needs blocksize + filter length - 1
|
||||||
// (= 17x17 for halfpel / 21x21 for h264)
|
// (= 17x17 for halfpel / 21x21 for h264)
|
||||||
|
// VC1 computes luma and chroma simultaneously and needs 19X19 + 9x9
|
||||||
|
// at uvlinesize. It supports only YUV420 so 24x24 is enough
|
||||||
// linesize * interlaced * MBsize
|
// linesize * interlaced * MBsize
|
||||||
FF_ALLOCZ_OR_GOTO(s->avctx, s->edge_emu_buffer, alloc_size * 4 * 21,
|
FF_ALLOCZ_OR_GOTO(s->avctx, s->edge_emu_buffer, alloc_size * 4 * 24,
|
||||||
fail);
|
fail);
|
||||||
|
|
||||||
FF_ALLOCZ_OR_GOTO(s->avctx, s->me.scratchpad, alloc_size * 2 * 16 * 2,
|
FF_ALLOCZ_OR_GOTO(s->avctx, s->me.scratchpad, alloc_size * 2 * 16 * 2,
|
||||||
|
@ -350,7 +350,9 @@ DECLARE_REG_TMP_SIZE 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14
|
|||||||
%if stack_size < 0
|
%if stack_size < 0
|
||||||
%assign stack_size -stack_size
|
%assign stack_size -stack_size
|
||||||
%endif
|
%endif
|
||||||
|
%if mmsize != 8
|
||||||
%assign xmm_regs_used %2
|
%assign xmm_regs_used %2
|
||||||
|
%endif
|
||||||
%if mmsize <= 16 && HAVE_ALIGNED_STACK
|
%if mmsize <= 16 && HAVE_ALIGNED_STACK
|
||||||
%assign stack_size_padded stack_size + %%stack_alignment - gprsize - (stack_offset & (%%stack_alignment - 1))
|
%assign stack_size_padded stack_size + %%stack_alignment - gprsize - (stack_offset & (%%stack_alignment - 1))
|
||||||
%if xmm_regs_used > 6
|
%if xmm_regs_used > 6
|
||||||
@ -358,8 +360,8 @@ DECLARE_REG_TMP_SIZE 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14
|
|||||||
%endif
|
%endif
|
||||||
SUB rsp, stack_size_padded
|
SUB rsp, stack_size_padded
|
||||||
%else
|
%else
|
||||||
%assign reg_num (regs_used - 1)
|
%assign %%reg_num (regs_used - 1)
|
||||||
%xdefine rstk r %+ reg_num
|
%xdefine rstk r %+ %%reg_num
|
||||||
; align stack, and save original stack location directly above
|
; align stack, and save original stack location directly above
|
||||||
; it, i.e. in [rsp+stack_size_padded], so we can restore the
|
; it, i.e. in [rsp+stack_size_padded], so we can restore the
|
||||||
; stack in a single instruction (i.e. mov rsp, rstk or mov
|
; stack in a single instruction (i.e. mov rsp, rstk or mov
|
||||||
@ -368,6 +370,10 @@ DECLARE_REG_TMP_SIZE 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14
|
|||||||
%assign stack_size_padded stack_size
|
%assign stack_size_padded stack_size
|
||||||
%if xmm_regs_used > 6
|
%if xmm_regs_used > 6
|
||||||
%assign stack_size_padded stack_size_padded + (xmm_regs_used - 6) * 16
|
%assign stack_size_padded stack_size_padded + (xmm_regs_used - 6) * 16
|
||||||
|
%if mmsize == 32 && xmm_regs_used & 1
|
||||||
|
; re-align to 32 bytes
|
||||||
|
%assign stack_size_padded (stack_size_padded + 16)
|
||||||
|
%endif
|
||||||
%endif
|
%endif
|
||||||
%if %1 < 0 ; need to store rsp on stack
|
%if %1 < 0 ; need to store rsp on stack
|
||||||
sub rsp, gprsize+stack_size_padded
|
sub rsp, gprsize+stack_size_padded
|
||||||
@ -430,11 +436,10 @@ DECLARE_REG 14, R15, 120
|
|||||||
%macro PROLOGUE 2-5+ 0 ; #args, #regs, #xmm_regs, [stack_size,] arg_names...
|
%macro PROLOGUE 2-5+ 0 ; #args, #regs, #xmm_regs, [stack_size,] arg_names...
|
||||||
%assign num_args %1
|
%assign num_args %1
|
||||||
%assign regs_used %2
|
%assign regs_used %2
|
||||||
SETUP_STACK_POINTER %4
|
|
||||||
ASSERT regs_used >= num_args
|
ASSERT regs_used >= num_args
|
||||||
|
SETUP_STACK_POINTER %4
|
||||||
ASSERT regs_used <= 15
|
ASSERT regs_used <= 15
|
||||||
PUSH_IF_USED 7, 8, 9, 10, 11, 12, 13, 14
|
PUSH_IF_USED 7, 8, 9, 10, 11, 12, 13, 14
|
||||||
%assign xmm_regs_used 0
|
|
||||||
ALLOC_STACK %4, %3
|
ALLOC_STACK %4, %3
|
||||||
%if mmsize != 8 && stack_size == 0
|
%if mmsize != 8 && stack_size == 0
|
||||||
WIN64_SPILL_XMM %3
|
WIN64_SPILL_XMM %3
|
||||||
@ -518,8 +523,8 @@ DECLARE_REG 14, R15, 72
|
|||||||
%macro PROLOGUE 2-5+ ; #args, #regs, #xmm_regs, [stack_size,] arg_names...
|
%macro PROLOGUE 2-5+ ; #args, #regs, #xmm_regs, [stack_size,] arg_names...
|
||||||
%assign num_args %1
|
%assign num_args %1
|
||||||
%assign regs_used %2
|
%assign regs_used %2
|
||||||
SETUP_STACK_POINTER %4
|
|
||||||
ASSERT regs_used >= num_args
|
ASSERT regs_used >= num_args
|
||||||
|
SETUP_STACK_POINTER %4
|
||||||
ASSERT regs_used <= 15
|
ASSERT regs_used <= 15
|
||||||
PUSH_IF_USED 9, 10, 11, 12, 13, 14
|
PUSH_IF_USED 9, 10, 11, 12, 13, 14
|
||||||
ALLOC_STACK %4
|
ALLOC_STACK %4
|
||||||
@ -568,12 +573,15 @@ DECLARE_ARG 7, 8, 9, 10, 11, 12, 13, 14
|
|||||||
%macro PROLOGUE 2-5+ ; #args, #regs, #xmm_regs, [stack_size,] arg_names...
|
%macro PROLOGUE 2-5+ ; #args, #regs, #xmm_regs, [stack_size,] arg_names...
|
||||||
%assign num_args %1
|
%assign num_args %1
|
||||||
%assign regs_used %2
|
%assign regs_used %2
|
||||||
|
ASSERT regs_used >= num_args
|
||||||
|
%if num_args > 7
|
||||||
|
%assign num_args 7
|
||||||
|
%endif
|
||||||
%if regs_used > 7
|
%if regs_used > 7
|
||||||
%assign regs_used 7
|
%assign regs_used 7
|
||||||
%endif
|
%endif
|
||||||
SETUP_STACK_POINTER %4
|
SETUP_STACK_POINTER %4
|
||||||
ASSERT regs_used <= 7
|
ASSERT regs_used <= 7
|
||||||
ASSERT regs_used >= num_args
|
|
||||||
PUSH_IF_USED 3, 4, 5, 6
|
PUSH_IF_USED 3, 4, 5, 6
|
||||||
ALLOC_STACK %4
|
ALLOC_STACK %4
|
||||||
LOAD_IF_USED 0, 1, 2, 3, 4, 5, 6
|
LOAD_IF_USED 0, 1, 2, 3, 4, 5, 6
|
||||||
@ -635,12 +643,10 @@ DECLARE_ARG 7, 8, 9, 10, 11, 12, 13, 14
|
|||||||
; Applies any symbol mangling needed for C linkage, and sets up a define such that
|
; Applies any symbol mangling needed for C linkage, and sets up a define such that
|
||||||
; subsequent uses of the function name automatically refer to the mangled version.
|
; subsequent uses of the function name automatically refer to the mangled version.
|
||||||
; Appends cpuflags to the function name if cpuflags has been specified.
|
; Appends cpuflags to the function name if cpuflags has been specified.
|
||||||
%macro cglobal 1-2+ ; name, [PROLOGUE args]
|
%macro cglobal 1-2+ "" ; name, [PROLOGUE args]
|
||||||
%if %0 == 1
|
; the "" is a workaround for nasm, which fails if SUFFIX is empty
|
||||||
cglobal_internal %1 %+ SUFFIX
|
; and we call cglobal_internal with just %1 %+ SUFFIX (without %2)
|
||||||
%else
|
|
||||||
cglobal_internal %1 %+ SUFFIX, %2
|
cglobal_internal %1 %+ SUFFIX, %2
|
||||||
%endif
|
|
||||||
%endmacro
|
%endmacro
|
||||||
%macro cglobal_internal 1-2+
|
%macro cglobal_internal 1-2+
|
||||||
%ifndef cglobaled_%1
|
%ifndef cglobaled_%1
|
||||||
@ -661,7 +667,8 @@ DECLARE_ARG 7, 8, 9, 10, 11, 12, 13, 14
|
|||||||
%assign stack_offset 0
|
%assign stack_offset 0
|
||||||
%assign stack_size 0
|
%assign stack_size 0
|
||||||
%assign stack_size_padded 0
|
%assign stack_size_padded 0
|
||||||
%if %0 > 1
|
%assign xmm_regs_used 0
|
||||||
|
%ifnidn %2, ""
|
||||||
PROLOGUE %2
|
PROLOGUE %2
|
||||||
%endif
|
%endif
|
||||||
%endmacro
|
%endmacro
|
||||||
|
Reference in New Issue
Block a user