| /* |
| * Copyright (c) 2010 The WebM project authors. All Rights Reserved. |
| * |
| * Use of this source code is governed by a BSD-style license |
| * that can be found in the LICENSE file in the root of the source |
| * tree. An additional intellectual property rights grant can be found |
| * in the file PATENTS. All contributing project authors may |
| * be found in the AUTHORS file in the root of the source tree. |
| */ |
| |
| #ifndef VPX_SCALE_YV12CONFIG_H_ |
| #define VPX_SCALE_YV12CONFIG_H_ |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| #include "./vpx_config.h" |
| #include "vpx/vpx_codec.h" |
| #include "vpx/vpx_frame_buffer.h" |
| #include "vpx/vpx_integer.h" |
| |
| #define VP8BORDERINPIXELS 32 |
| #define VP9INNERBORDERINPIXELS 96 |
| #define VP9_INTERP_EXTEND 4 |
| #define VP9_ENC_BORDER_IN_PIXELS 160 |
| #define VP9_DEC_BORDER_IN_PIXELS 32 |
| |
| typedef struct yv12_buffer_config { |
| int y_width; |
| int y_height; |
| int y_crop_width; |
| int y_crop_height; |
| int y_stride; |
| |
| int uv_width; |
| int uv_height; |
| int uv_crop_width; |
| int uv_crop_height; |
| int uv_stride; |
| |
| int alpha_width; |
| int alpha_height; |
| int alpha_stride; |
| |
| uint8_t *y_buffer; |
| uint8_t *u_buffer; |
| uint8_t *v_buffer; |
| uint8_t *alpha_buffer; |
| |
| uint8_t *buffer_alloc; |
| int buffer_alloc_sz; |
| int border; |
| int frame_size; |
| int subsampling_x; |
| int subsampling_y; |
| unsigned int bit_depth; |
| vpx_color_space_t color_space; |
| vpx_color_range_t color_range; |
| int render_width; |
| int render_height; |
| |
| int corrupted; |
| int flags; |
| } YV12_BUFFER_CONFIG; |
| |
| #define YV12_FLAG_HIGHBITDEPTH 8 |
| |
| int vp8_yv12_alloc_frame_buffer(YV12_BUFFER_CONFIG *ybf, |
| int width, int height, int border); |
| int vp8_yv12_realloc_frame_buffer(YV12_BUFFER_CONFIG *ybf, |
| int width, int height, int border); |
| int vp8_yv12_de_alloc_frame_buffer(YV12_BUFFER_CONFIG *ybf); |
| |
| int vpx_alloc_frame_buffer(YV12_BUFFER_CONFIG *ybf, |
| int width, int height, int ss_x, int ss_y, |
| #if CONFIG_VP9_HIGHBITDEPTH |
| int use_highbitdepth, |
| #endif |
| int border, int byte_alignment); |
| |
| // Updates the yv12 buffer config with the frame buffer. |byte_alignment| must |
| // be a power of 2, from 32 to 1024. 0 sets legacy alignment. If cb is not |
| // NULL, then libvpx is using the frame buffer callbacks to handle memory. |
| // If cb is not NULL, libvpx will call cb with minimum size in bytes needed |
| // to decode the current frame. If cb is NULL, libvpx will allocate memory |
| // internally to decode the current frame. Returns 0 on success. Returns < 0 |
| // on failure. |
| int vpx_realloc_frame_buffer(YV12_BUFFER_CONFIG *ybf, |
| int width, int height, int ss_x, int ss_y, |
| #if CONFIG_VP9_HIGHBITDEPTH |
| int use_highbitdepth, |
| #endif |
| int border, |
| int byte_alignment, |
| vpx_codec_frame_buffer_t *fb, |
| vpx_get_frame_buffer_cb_fn_t cb, |
| void *cb_priv); |
| int vpx_free_frame_buffer(YV12_BUFFER_CONFIG *ybf); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| #endif // VPX_SCALE_YV12CONFIG_H_ |