Subversion Repositories Kolibri OS

Rev

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