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 vpx_color_range_t color_range; 60 int render_width; 61 int render_height; 62 63 int corrupted; 64 int flags; 65 } YV12_BUFFER_CONFIG; 66 67 #define YV12_FLAG_HIGHBITDEPTH 8 68 69 int vp8_yv12_alloc_frame_buffer(YV12_BUFFER_CONFIG *ybf, 70 int width, int height, int border); 71 int vp8_yv12_realloc_frame_buffer(YV12_BUFFER_CONFIG *ybf, 72 int width, int height, int border); 73 int vp8_yv12_de_alloc_frame_buffer(YV12_BUFFER_CONFIG *ybf); 74 75 int vpx_alloc_frame_buffer(YV12_BUFFER_CONFIG *ybf, 76 int width, int height, int ss_x, int ss_y, 77 #if CONFIG_VP9_HIGHBITDEPTH 78 int use_highbitdepth, 79 #endif 80 int border, int byte_alignment); 81 82 // Updates the yv12 buffer config with the frame buffer. |byte_alignment| must 83 // be a power of 2, from 32 to 1024. 0 sets legacy alignment. If cb is not 84 // NULL, then libvpx is using the frame buffer callbacks to handle memory. 85 // If cb is not NULL, libvpx will call cb with minimum size in bytes needed 86 // to decode the current frame. If cb is NULL, libvpx will allocate memory 87 // internally to decode the current frame. Returns 0 on success. Returns < 0 88 // on failure. 89 int vpx_realloc_frame_buffer(YV12_BUFFER_CONFIG *ybf, 90 int width, int height, int ss_x, int ss_y, 91 #if CONFIG_VP9_HIGHBITDEPTH 92 int use_highbitdepth, 93 #endif 94 int border, 95 int byte_alignment, 96 vpx_codec_frame_buffer_t *fb, 97 vpx_get_frame_buffer_cb_fn_t cb, 98 void *cb_priv); 99 int vpx_free_frame_buffer(YV12_BUFFER_CONFIG *ybf); 100 101 #ifdef __cplusplus 102 } 103 #endif 104 105 #endif // VPX_SCALE_YV12CONFIG_H_ 106