Subversion Repositories Kolibri OS

Rev

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

  1. /*
  2.  * Copyright (C) 2004-2010 Michael Niedermayer <michaelni@gmx.at>
  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. #ifndef AVCODEC_SNOW_DWT_H
  22. #define AVCODEC_SNOW_DWT_H
  23.  
  24. #include <stdint.h>
  25.  
  26. typedef int DWTELEM;
  27. typedef short IDWTELEM;
  28.  
  29. #define MAX_DECOMPOSITIONS 8
  30.  
  31. typedef struct DWTCompose {
  32.     IDWTELEM *b0;
  33.     IDWTELEM *b1;
  34.     IDWTELEM *b2;
  35.     IDWTELEM *b3;
  36.     int y;
  37. } DWTCompose;
  38.  
  39. /** Used to minimize the amount of memory used in order to
  40.  *  optimize cache performance. **/
  41. typedef struct slice_buffer_s {
  42.     IDWTELEM **line;   ///< For use by idwt and predict_slices.
  43.     IDWTELEM **data_stack;   ///< Used for internal purposes.
  44.     int data_stack_top;
  45.     int line_count;
  46.     int line_width;
  47.     int data_count;
  48.     IDWTELEM *base_buffer;  ///< Buffer that this structure is caching.
  49. } slice_buffer;
  50.  
  51. struct SnowDWTContext;
  52.  
  53. typedef struct SnowDWTContext {
  54.     void (*vertical_compose97i)(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2,
  55.                                 IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5,
  56.                                 int width);
  57.     void (*horizontal_compose97i)(IDWTELEM *b, IDWTELEM *temp, int width);
  58.     void (*inner_add_yblock)(const uint8_t *obmc, const int obmc_stride,
  59.                              uint8_t **block, int b_w, int b_h, int src_x,
  60.                              int src_y, int src_stride, slice_buffer *sb,
  61.                              int add, uint8_t *dst8);
  62. } SnowDWTContext;
  63.  
  64.  
  65. #define DWT_97 0
  66. #define DWT_53 1
  67.  
  68. #define liftS lift
  69. #define W_AM 3
  70. #define W_AO 0
  71. #define W_AS 1
  72.  
  73. #undef liftS
  74. #define W_BM 1
  75. #define W_BO 8
  76. #define W_BS 4
  77.  
  78. #define W_CM 1
  79. #define W_CO 0
  80. #define W_CS 0
  81.  
  82. #define W_DM 3
  83. #define W_DO 4
  84. #define W_DS 3
  85.  
  86. #define slice_buffer_get_line(slice_buf, line_num)                          \
  87.     ((slice_buf)->line[line_num] ? (slice_buf)->line[line_num]              \
  88.                                  : ff_slice_buffer_load_line((slice_buf),   \
  89.                                                              (line_num)))
  90.  
  91. int ff_slice_buffer_init(slice_buffer *buf, int line_count,
  92.                          int max_allocated_lines, int line_width,
  93.                          IDWTELEM *base_buffer);
  94. void ff_slice_buffer_release(slice_buffer *buf, int line);
  95. void ff_slice_buffer_flush(slice_buffer *buf);
  96. void ff_slice_buffer_destroy(slice_buffer *buf);
  97. IDWTELEM *ff_slice_buffer_load_line(slice_buffer *buf, int line);
  98.  
  99. void ff_snow_vertical_compose97i(IDWTELEM *b0, IDWTELEM *b1, IDWTELEM *b2,
  100.                                  IDWTELEM *b3, IDWTELEM *b4, IDWTELEM *b5,
  101.                                  int width);
  102. void ff_snow_horizontal_compose97i(IDWTELEM *b, IDWTELEM *temp, int width);
  103. void ff_snow_inner_add_yblock(const uint8_t *obmc, const int obmc_stride,
  104.                               uint8_t **block, int b_w, int b_h, int src_x,
  105.                               int src_y, int src_stride, slice_buffer *sb,
  106.                               int add, uint8_t *dst8);
  107.  
  108. int ff_w53_32_c(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h);
  109. int ff_w97_32_c(void *v, uint8_t *pix1, uint8_t *pix2, int line_size, int h);
  110.  
  111. void ff_spatial_dwt(int *buffer, int *temp, int width, int height, int stride,
  112.                     int type, int decomposition_count);
  113.  
  114. void ff_spatial_idwt_buffered_init(DWTCompose *cs, slice_buffer *sb, int width,
  115.                                    int height, int stride_line, int type,
  116.                                    int decomposition_count);
  117. void ff_spatial_idwt_buffered_slice(SnowDWTContext *dsp, DWTCompose *cs,
  118.                                     slice_buffer *slice_buf, IDWTELEM *temp,
  119.                                     int width, int height, int stride_line,
  120.                                     int type, int decomposition_count, int y);
  121. void ff_spatial_idwt(IDWTELEM *buffer, IDWTELEM *temp, int width, int height,
  122.                      int stride, int type, int decomposition_count);
  123.  
  124. void ff_dwt_init(SnowDWTContext *c);
  125. void ff_dwt_init_x86(SnowDWTContext *c);
  126.  
  127. #endif /* AVCODEC_DWT_H */
  128.