Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright (c) 2011 Mans Rullgard <mans@mansr.com>
  3.  *
  4.  * This file is part of FFmpeg.
  5.  *
  6.  * FFmpeg is free software; you can redistribute it and/or
  7.  * modify it under the terms of the GNU Lesser General Public
  8.  * License as published by the Free Software Foundation; either
  9.  * version 2.1 of the License, or (at your option) any later version.
  10.  *
  11.  * FFmpeg is distributed in the hope that it will be useful,
  12.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  14.  * Lesser General Public License for more details.
  15.  *
  16.  * You should have received a copy of the GNU Lesser General Public
  17.  * License along with FFmpeg; if not, write to the Free Software
  18.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  19.  */
  20.  
  21. #include "libavutil/arm/asm.S"
  22.  
  23. function ff_ac3_bit_alloc_calc_bap_armv6, export=1
  24.         ldr             r12, [sp]
  25.         cmp             r12, #-960
  26.         beq             4f
  27.         push            {r4-r11,lr}
  28.         add             r5,  sp,  #40
  29.         movrelx         r4,  X(ff_ac3_bin_to_band_tab), r11
  30.         movrelx         lr,  X(ff_ac3_band_start_tab)
  31.         ldm             r5,  {r5-r7}
  32.         ldrb            r4,  [r4, r2]
  33.         add             r1,  r1,  r2,  lsl #1           @ psd + start
  34.         add             r0,  r0,  r4,  lsl #1           @ mask + band
  35.         add             r4,  r4,  lr
  36.         add             r7,  r7,  r2                    @ bap + start
  37. 1:
  38.         ldrsh           r9,  [r0], #2                   @ mask[band]
  39.         mov             r8,  #0xff0
  40.         sub             r9,  r9,  r12                   @   - snr_offset
  41.         ldrb            r10, [r4, #1]!                  @ band_start_tab[++band]
  42.         subs            r9,  r9,  r5                    @   - floor
  43.         it              lt
  44.         movlt           r9,  #0
  45.         cmp             r10, r3                         @   - end
  46.         and             r9,  r9,  r8, lsl #1            @   & 0x1fe0
  47.         ite             gt
  48.         subgt           r8,  r3,  r2
  49.         suble           r8,  r10, r2
  50.         mov             r2,  r10
  51.         add             r9,  r9,  r5                    @   + floor => m
  52.         tst             r8,  #1
  53.         add             r11, r7,  r8
  54.         bne             3f
  55.         b               5f
  56. 2:
  57.         ldrsh           r8,  [r1], #2
  58.         ldrsh           lr,  [r1], #2
  59.         sub             r8,  r8,  r9
  60.         sub             lr,  lr,  r9
  61.         usat            r8,  #6,  r8,  asr #5           @ address
  62.         usat            lr,  #6,  lr,  asr #5
  63.         ldrb            r8,  [r6, r8]                   @ bap_tab[address]
  64.         ldrb            lr,  [r6, lr]
  65.         strb            r8,  [r7], #1                   @ bap[bin]
  66.         strb            lr,  [r7], #1
  67. 5:      cmp             r7,  r11
  68.         blo             2b
  69.         cmp             r3,  r10
  70.         bgt             1b
  71.         pop             {r4-r11,pc}
  72. 3:
  73.         ldrsh           r8,  [r1], #2                   @ psd[bin]
  74.         sub             r8,  r8,  r9                    @   - m
  75.         usat            r8,  #6,  r8,  asr #5           @ address
  76.         ldrb            r8,  [r6, r8]                   @ bap_tab[address]
  77.         strb            r8,  [r7], #1                   @ bap[bin]
  78.         b               5b
  79. 4:
  80.         ldr             r0,  [sp, #12]
  81.         mov             r1,  #0
  82.         mov             r2,  #256
  83.         b               X(memset)
  84. endfunc
  85.