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_config.h" 19 #include "vpx/vpx_codec.h" 20 #include "vpx/vpx_frame_buffer.h" 21 #include "vpx/vpx_integer.h" 22 23 #define VP8BORDERINPIXELS 32 24 #define VP9INNERBORDERINPIXELS 96 25 #define VP9_INTERP_EXTEND 4 26 #define VP9_ENC_BORDER_IN_PIXELS 160 27 #define VP9_DEC_BORDER_IN_PIXELS 32 28 29 typedef struct yv12_buffer_config { 30 int y_width; 31 int y_height; 32 int y_crop_width; 33 int y_crop_height; 34 int y_stride; 35 36 int uv_width; 37 int uv_height; 38 int uv_crop_width; 39 int uv_crop_height; 40 int uv_stride; 41 42 int alpha_width; 43 int alpha_height; 44 int alpha_stride; 45 46 uint8_t *y_buffer; 47 uint8_t *u_buffer; 48 uint8_t *v_buffer; 49 uint8_t *alpha_buffer; 50 51 uint8_t *buffer_alloc; 52 int buffer_alloc_sz; 53 int border; 54 int frame_size; 55 int subsampling_x; 56 int subsampling_y; 57 unsigned int bit_depth; 58 vpx_color_space_t color_space; 59 60 int corrupted; 61 int flags; 62 } YV12_BUFFER_CONFIG; 63 64 #define YV12_FLAG_HIGHBITDEPTH 8 65 66 int vp8_yv12_alloc_frame_buffer(YV12_BUFFER_CONFIG *ybf, 67 int width, int height, int border); 68 int vp8_yv12_realloc_frame_buffer(YV12_BUFFER_CONFIG *ybf, 69 int width, int height, int border); 70 int vp8_yv12_de_alloc_frame_buffer(YV12_BUFFER_CONFIG *ybf); 71 72 int vpx_alloc_frame_buffer(YV12_BUFFER_CONFIG *ybf, 73 int width, int height, int ss_x, int ss_y, 74 #if CONFIG_VP9_HIGHBITDEPTH 75 int use_highbitdepth, 76 #endif 77 int border, int byte_alignment); 78 79 // Updates the yv12 buffer config with the frame buffer. |byte_alignment| must 80 // be a power of 2, from 32 to 1024. 0 sets legacy alignment. If cb is not 81 // NULL, then libvpx is using the frame buffer callbacks to handle memory. 82 // If cb is not NULL, libvpx will call cb with minimum size in bytes needed 83 // to decode the current frame. If cb is NULL, libvpx will allocate memory 84 // internally to decode the current frame. Returns 0 on success. Returns < 0 85 // on failure. 86 int vpx_realloc_frame_buffer(YV12_BUFFER_CONFIG *ybf, 87 int width, int height, int ss_x, int ss_y, 88 #if CONFIG_VP9_HIGHBITDEPTH 89 int use_highbitdepth, 90 #endif 91 int border, 92 int byte_alignment, 93 vpx_codec_frame_buffer_t *fb, 94 vpx_get_frame_buffer_cb_fn_t cb, 95 void *cb_priv); 96 int vpx_free_frame_buffer(YV12_BUFFER_CONFIG *ybf); 97 98 #ifdef __cplusplus 99 } 100 #endif 101 102 #endif // VPX_SCALE_YV12CONFIG_H_ 103