Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / libvpx / source / libvpx / vpx_scale / yv12config.h
1 /*
2  *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3  *
4  *  Use of this source code is governed by a BSD-style license
5  *  that can be found in the LICENSE file in the root of the source
6  *  tree. An additional intellectual property rights grant can be found
7  *  in the file PATENTS.  All contributing project authors may
8  *  be found in the AUTHORS file in the root of the source tree.
9  */
10
11 #ifndef VPX_SCALE_YV12CONFIG_H_
12 #define VPX_SCALE_YV12CONFIG_H_
13
14 #ifdef __cplusplus
15 extern "C" {
16 #endif
17
18 #include "vpx/vpx_codec.h"
19 #include "vpx/vpx_frame_buffer.h"
20 #include "vpx/vpx_integer.h"
21
22 #define VP8BORDERINPIXELS           32
23 #define VP9INNERBORDERINPIXELS      96
24 #define VP9_INTERP_EXTEND           4
25 #define VP9_ENC_BORDER_IN_PIXELS    160
26 #define VP9_DEC_BORDER_IN_PIXELS    32
27
28 typedef struct yv12_buffer_config {
29   int   y_width;
30   int   y_height;
31   int   y_crop_width;
32   int   y_crop_height;
33   int   y_stride;
34
35   int   uv_width;
36   int   uv_height;
37   int   uv_crop_width;
38   int   uv_crop_height;
39   int   uv_stride;
40
41   int   alpha_width;
42   int   alpha_height;
43   int   alpha_stride;
44
45   uint8_t *y_buffer;
46   uint8_t *u_buffer;
47   uint8_t *v_buffer;
48   uint8_t *alpha_buffer;
49
50   uint8_t *buffer_alloc;
51   int buffer_alloc_sz;
52   int border;
53   int frame_size;
54   unsigned int bit_depth;
55
56   int corrupted;
57   int flags;
58 } YV12_BUFFER_CONFIG;
59
60 #define YV12_FLAG_HIGHBITDEPTH 1
61
62 int vp8_yv12_alloc_frame_buffer(YV12_BUFFER_CONFIG *ybf,
63                                 int width, int height, int border);
64 int vp8_yv12_realloc_frame_buffer(YV12_BUFFER_CONFIG *ybf,
65                                   int width, int height, int border);
66 int vp8_yv12_de_alloc_frame_buffer(YV12_BUFFER_CONFIG *ybf);
67
68 int vp9_alloc_frame_buffer(YV12_BUFFER_CONFIG *ybf,
69                            int width, int height, int ss_x, int ss_y,
70 #if CONFIG_VP9_HIGHBITDEPTH
71                            int use_highbitdepth,
72 #endif
73                            int border);
74
75 // Updates the yv12 buffer config with the frame buffer. If cb is not
76 // NULL, then libvpx is using the frame buffer callbacks to handle memory.
77 // If cb is not NULL, libvpx will call cb with minimum size in bytes needed
78 // to decode the current frame. If cb is NULL, libvpx will allocate memory
79 // internally to decode the current frame. Returns 0 on success. Returns < 0
80 // on failure.
81 int vp9_realloc_frame_buffer(YV12_BUFFER_CONFIG *ybf,
82                              int width, int height, int ss_x, int ss_y,
83 #if CONFIG_VP9_HIGHBITDEPTH
84                              int use_highbitdepth,
85 #endif
86                              int border,
87                              vpx_codec_frame_buffer_t *fb,
88                              vpx_get_frame_buffer_cb_fn_t cb,
89                              void *cb_priv);
90 int vp9_free_frame_buffer(YV12_BUFFER_CONFIG *ybf);
91
92 #ifdef __cplusplus
93 }
94 #endif
95
96 #endif  // VPX_SCALE_YV12CONFIG_H_