Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright (C) 2013 Xiaolei Yu <dreifachstein@gmail.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 "rgb2yuv_neon_common.S"
  22.  
  23. /* downsampled R16G16B16 x8 */
  24. alias_qw    r16x8,  q7
  25. alias_qw    g16x8,  q8
  26. alias_qw    b16x8,  q9
  27.  
  28. alias   n16x16_l,   q11
  29. alias   n16x16_h,   q12
  30.  
  31. alias   y16x16_l,   q13
  32. alias   y16x16_h,   q14
  33.  
  34. alias_qw    y8x16,  q15
  35.  
  36. .macro init     src
  37.     vld3.i32    {q13_l, q14_l, q15_l},          [\src]!
  38.     vld3.i32    {q13_h[0], q14_h[0], q15_h[0]}, [\src]
  39.     vrshrn.i32  CO_R,   q13, #7
  40.     vrshrn.i32  CO_G,   q14, #7
  41.     vrshrn.i32  CO_B,   q15, #7
  42.  
  43.     vmov.u8     BIAS_Y, #16
  44.     vmov.u8     BIAS_U, #128
  45. .endm
  46.  
  47.  
  48. .macro compute_y_16x1_step  action, s8x16, coeff
  49.     vmovl.u8    n16x16_l,   \s8x16\()_l
  50.     vmovl.u8    n16x16_h,   \s8x16\()_h
  51.  
  52.     \action     y16x16_l,   n16x16_l,   \coeff
  53.     \action     y16x16_h,   n16x16_h,   \coeff
  54. .endm
  55.  
  56. .macro compute_y_16x1
  57.     compute_y_16x1_step vmul, r8x16, CO_RY
  58.     compute_y_16x1_step vmla, g8x16, CO_GY
  59.     compute_y_16x1_step vmla, b8x16, CO_BY
  60.  
  61.     vrshrn.i16  y8x16_l,    y16x16_l,   #8
  62.     vrshrn.i16  y8x16_h,    y16x16_h,   #8
  63.  
  64.     vadd.u8     y8x16,      y8x16,      BIAS_Y
  65. .endm
  66.  
  67. alias   c16x8,      q15
  68. alias_qw    c8x8x2, q10
  69.  
  70.  
  71. .macro compute_chroma_8x1   c, C
  72.     vmul    c16x8,  r16x8,  CO_R\C
  73.     vmla    c16x8,  g16x8,  CO_G\C
  74.     vmla    c16x8,  b16x8,  CO_B\C
  75.  
  76.     vrshrn.i16  \c\()8x8,   c16x8,      #8
  77.     vadd.u8     \c\()8x8,   \c\()8x8,   BIAS_\C
  78. .endm
  79.  
  80.     loop_420sp  rgbx, nv12, init, kernel_420_16x2, 16
  81.