* commit '142e76f1055de5dde44696e71a5f63f2cb11dedf': swscale: fix crash with dithering due incorrect offset calculation. matroskadec: fix stupid typo (!= -> ==) build: remove duplicates from order-only directory prerequisite list build: rework rules for things in the tools dir configure: fix --cpu=host with gcc 4.6 ARM: use const macro to define constant data in asm bitdepth: simplify FUNC/FUNCC macros dsputil: remove ff_emulated_edge_mc macro used in one place 9/10-bit: simplify clipping macros matroskadec: reindent matroskadec: defer parsing of cues element until we seek. lavc: add support for codec-specific defaults. lavc: make avcodec_alloc_context3 officially public. lavc: remove a half-working attempt at different defaults for audio/video codecs. ac3dec: add a drc_scale private option lavf: add avformat_find_stream_info() lavc: introduce avcodec_open2() as a replacement for avcodec_open(). Conflicts: Makefile libavcodec/utils.c libavformat/avformat.h libswscale/swscale_internal.h Merged-by: Michael Niedermayer <michaelni@gmx.at>
		
			
				
	
	
		
			249 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
			
		
		
	
	
			249 lines
		
	
	
		
			8.4 KiB
		
	
	
	
		
			ArmAsm
		
	
	
	
	
	
| /**
 | |
|  * Copyright (C) 2010 Mans Rullgard
 | |
|  *
 | |
|  * This file is part of FFmpeg.
 | |
|  *
 | |
|  * FFmpeg is free software; you can redistribute it and/or
 | |
|  * modify it under the terms of the GNU Lesser General Public
 | |
|  * License as published by the Free Software Foundation; either
 | |
|  * version 2.1 of the License, or (at your option) any later version.
 | |
|  *
 | |
|  * FFmpeg is distributed in the hope that it will be useful,
 | |
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | |
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 | |
|  * Lesser General Public License for more details.
 | |
|  *
 | |
|  * You should have received a copy of the GNU Lesser General Public
 | |
|  * License along with FFmpeg; if not, write to the Free Software
 | |
|  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
 | |
|  */
 | |
| 
 | |
| #include "asm.S"
 | |
| 
 | |
| .macro rac_get_prob     h, bs, buf, cw, pr, t0, t1
 | |
|         adds            \bs, \bs, \t0
 | |
|         lsl             \cw, \cw, \t0
 | |
|         lsl             \t0, \h,  \t0
 | |
|         rsb             \h,  \pr, #256
 | |
|         it              cs
 | |
|         ldrhcs          \t1, [\buf], #2
 | |
|         smlabb          \h,  \t0, \pr, \h
 | |
| T       itttt           cs
 | |
|         rev16cs         \t1, \t1
 | |
| A       orrcs           \cw, \cw, \t1, lsl \bs
 | |
| T       lslcs           \t1, \t1, \bs
 | |
| T       orrcs           \cw, \cw, \t1
 | |
|         subcs           \bs, \bs, #16
 | |
|         lsr             \h,  \h,  #8
 | |
|         cmp             \cw, \h,  lsl #16
 | |
|         itt             ge
 | |
|         subge           \cw, \cw, \h,  lsl #16
 | |
|         subge           \h,  \t0, \h
 | |
| .endm
 | |
| 
 | |
| .macro rac_get_128      h, bs, buf, cw, t0, t1
 | |
|         adds            \bs, \bs, \t0
 | |
|         lsl             \cw, \cw, \t0
 | |
|         lsl             \t0, \h,  \t0
 | |
|         it              cs
 | |
|         ldrhcs          \t1, [\buf], #2
 | |
|         mov             \h,  #128
 | |
|         it              cs
 | |
|         rev16cs         \t1, \t1
 | |
|         add             \h,  \h,  \t0, lsl #7
 | |
| A       orrcs           \cw, \cw, \t1, lsl \bs
 | |
| T       ittt            cs
 | |
| T       lslcs           \t1, \t1, \bs
 | |
| T       orrcs           \cw, \cw, \t1
 | |
|         subcs           \bs, \bs, #16
 | |
|         lsr             \h,  \h,  #8
 | |
|         cmp             \cw, \h,  lsl #16
 | |
|         itt             ge
 | |
|         subge           \cw, \cw, \h,  lsl #16
 | |
|         subge           \h,  \t0, \h
 | |
| .endm
 | |
| 
 | |
| function ff_decode_block_coeffs_armv6, export=1
 | |
|         push            {r0,r1,r4-r11,lr}
 | |
|         movrel          lr,  X(ff_vp56_norm_shift)
 | |
|         ldrd            r4,  r5,  [sp, #44]             @ token_prob, qmul
 | |
|         cmp             r3,  #0
 | |
|         ldr             r11, [r5]
 | |
|         ldm             r0,  {r5-r7}                    @ high, bits, buf
 | |
|         it              ne
 | |
|         pkhtbne         r11, r11, r11, asr #16
 | |
|         ldr             r8,  [r0, #16]                  @ code_word
 | |
| 0:
 | |
|         ldrb            r9,  [lr, r5]
 | |
|         add             r3,  r3,  #1
 | |
|         ldrb            r0,  [r4, #1]
 | |
|         rac_get_prob    r5,  r6,  r7,  r8,  r0,  r9,  r10
 | |
|         blt             2f
 | |
| 
 | |
|         ldrb            r9,  [lr, r5]
 | |
|         ldrb            r0,  [r4, #2]
 | |
|         rac_get_prob    r5,  r6,  r7,  r8,  r0,  r9,  r10
 | |
|         ldrb            r9,  [lr, r5]
 | |
|         bge             3f
 | |
| 
 | |
|         add             r4,  r3,  r3,  lsl #5
 | |
|         sxth            r12, r11
 | |
|         add             r4,  r2,  r4
 | |
|         adds            r6,  r6,  r9
 | |
|         add             r4,  r4,  #11
 | |
|         lsl             r8,  r8,  r9
 | |
|         it              cs
 | |
|         ldrhcs          r10, [r7], #2
 | |
|         lsl             r9,  r5,  r9
 | |
|         mov             r5,  #128
 | |
|         it              cs
 | |
|         rev16cs         r10, r10
 | |
|         add             r5,  r5,  r9,  lsl #7
 | |
| T       ittt            cs
 | |
| T       lslcs           r10, r10, r6
 | |
| T       orrcs           r8,  r8,  r10
 | |
| A       orrcs           r8,  r8,  r10, lsl r6
 | |
|         subcs           r6,  r6,  #16
 | |
|         lsr             r5,  r5,  #8
 | |
|         cmp             r8,  r5,  lsl #16
 | |
|         movrel          r10, zigzag_scan-1
 | |
|         itt             ge
 | |
|         subge           r8,  r8,  r5,  lsl #16
 | |
|         subge           r5,  r9,  r5
 | |
|         ldrb            r10, [r10, r3]
 | |
|         it              ge
 | |
|         rsbge           r12, r12, #0
 | |
|         cmp             r3,  #16
 | |
|         strh            r12, [r1, r10]
 | |
|         bge             6f
 | |
| 5:
 | |
|         ldrb            r9,  [lr, r5]
 | |
|         ldrb            r0,  [r4]
 | |
|         rac_get_prob    r5,  r6,  r7,  r8,  r0,  r9,  r10
 | |
|         pkhtb           r11, r11, r11, asr #16
 | |
|         bge             0b
 | |
| 
 | |
| 6:
 | |
|         ldr             r0,  [sp]
 | |
|         ldr             r9,  [r0, #12]
 | |
|         cmp             r7,  r9
 | |
|         it              hi
 | |
|         movhi           r7,  r9
 | |
|         stm             r0,  {r5-r7}                    @ high, bits, buf
 | |
|         str             r8,  [r0, #16]                  @ code_word
 | |
| 
 | |
|         add             sp,  sp,  #8
 | |
|         mov             r0,  r3
 | |
|         pop             {r4-r11,pc}
 | |
| 2:
 | |
|         add             r4,  r3,  r3,  lsl #5
 | |
|         cmp             r3,  #16
 | |
|         add             r4,  r2,  r4
 | |
|         pkhtb           r11, r11, r11, asr #16
 | |
|         bne             0b
 | |
|         b               6b
 | |
| 3:
 | |
|         ldrb            r0,  [r4, #3]
 | |
|         rac_get_prob    r5,  r6,  r7,  r8,  r0,  r9,  r10
 | |
|         ldrb            r9,  [lr, r5]
 | |
|         bge             1f
 | |
| 
 | |
|         mov             r12, #2
 | |
|         ldrb            r0,  [r4, #4]
 | |
|         rac_get_prob    r5,  r6,  r7,  r8,  r0,  r9,  r10
 | |
|         it              ge
 | |
|         addge           r12, #1
 | |
|         ldrb            r9,  [lr, r5]
 | |
|         blt             4f
 | |
|         ldrb            r0,  [r4, #5]
 | |
|         rac_get_prob    r5,  r6,  r7,  r8,  r0,  r9,  r10
 | |
|         it              ge
 | |
|         addge           r12, #1
 | |
|         ldrb            r9,  [lr, r5]
 | |
|         b               4f
 | |
| 1:
 | |
|         ldrb            r0,  [r4, #6]
 | |
|         rac_get_prob    r5,  r6,  r7,  r8,  r0,  r9,  r10
 | |
|         ldrb            r9,  [lr, r5]
 | |
|         bge             3f
 | |
| 
 | |
|         ldrb            r0,  [r4, #7]
 | |
|         rac_get_prob    r5,  r6,  r7,  r8,  r0,  r9,  r10
 | |
|         ldrb            r9,  [lr, r5]
 | |
|         bge             2f
 | |
| 
 | |
|         mov             r12, #5
 | |
|         mov             r0,  #159
 | |
|         rac_get_prob    r5,  r6,  r7,  r8,  r0,  r9,  r10
 | |
|         it              ge
 | |
|         addge           r12, r12, #1
 | |
|         ldrb            r9,  [lr, r5]
 | |
|         b               4f
 | |
| 2:
 | |
|         mov             r12, #7
 | |
|         mov             r0,  #165
 | |
|         rac_get_prob    r5,  r6,  r7,  r8,  r0,  r9,  r10
 | |
|         it              ge
 | |
|         addge           r12, r12, #2
 | |
|         ldrb            r9,  [lr, r5]
 | |
|         mov             r0,  #145
 | |
|         rac_get_prob    r5,  r6,  r7,  r8,  r0,  r9,  r10
 | |
|         it              ge
 | |
|         addge           r12, r12, #1
 | |
|         ldrb            r9,  [lr, r5]
 | |
|         b               4f
 | |
| 3:
 | |
|         ldrb            r0,  [r4, #8]
 | |
|         rac_get_prob    r5,  r6,  r7,  r8,  r0,  r9,  r10
 | |
|         it              ge
 | |
|         addge           r4,  r4,  #1
 | |
|         ldrb            r9,  [lr, r5]
 | |
|         ite             ge
 | |
|         movge           r12, #2
 | |
|         movlt           r12, #0
 | |
|         ldrb            r0,  [r4, #9]
 | |
|         rac_get_prob    r5,  r6,  r7,  r8,  r0,  r9,  r10
 | |
|         mov             r9,  #8
 | |
|         it              ge
 | |
|         addge           r12, r12, #1
 | |
|         movrel          r4,  X(ff_vp8_dct_cat_prob)
 | |
|         lsl             r9,  r9,  r12
 | |
|         ldr             r4,  [r4, r12, lsl #2]
 | |
|         add             r12, r9,  #3
 | |
|         mov             r1,  #0
 | |
|         ldrb            r0,  [r4], #1
 | |
| 1:
 | |
|         ldrb            r9,  [lr, r5]
 | |
|         lsl             r1,  r1,  #1
 | |
|         rac_get_prob    r5,  r6,  r7,  r8,  r0,  r9,  r10
 | |
|         ldrb            r0,  [r4], #1
 | |
|         it              ge
 | |
|         addge           r1,  r1,  #1
 | |
|         cmp             r0,  #0
 | |
|         bne             1b
 | |
|         ldrb            r9,  [lr, r5]
 | |
|         add             r12, r12, r1
 | |
|         ldr             r1,  [sp, #4]
 | |
| 4:
 | |
|         add             r4,  r3,  r3,  lsl #5
 | |
|         add             r4,  r2,  r4
 | |
|         add             r4,  r4,  #22
 | |
|         rac_get_128     r5,  r6,  r7,  r8,  r9,  r10
 | |
|         it              ge
 | |
|         rsbge           r12, r12, #0
 | |
|         smulbb          r12, r12, r11
 | |
|         movrel          r9,  zigzag_scan-1
 | |
|         ldrb            r9,  [r9, r3]
 | |
|         cmp             r3,  #16
 | |
|         strh            r12, [r1, r9]
 | |
|         bge             6b
 | |
|         b               5b
 | |
| endfunc
 | |
| 
 | |
| const zigzag_scan
 | |
|         .byte            0,  2,  8, 16
 | |
|         .byte           10,  4,  6, 12
 | |
|         .byte           18, 24, 26, 20
 | |
|         .byte           14, 22, 28, 30
 | |
| endconst
 |