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