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 * Based on code from the OggTheora software codec source code, 11*fb1b10abSAndroid Build Coastguard Worker * Copyright (C) 2002-2010 The Xiph.Org Foundation and contributors. 12*fb1b10abSAndroid Build Coastguard Worker */ 13*fb1b10abSAndroid Build Coastguard Worker 14*fb1b10abSAndroid Build Coastguard Worker #ifndef VPX_Y4MINPUT_H_ 15*fb1b10abSAndroid Build Coastguard Worker #define VPX_Y4MINPUT_H_ 16*fb1b10abSAndroid Build Coastguard Worker 17*fb1b10abSAndroid Build Coastguard Worker #include <stdio.h> 18*fb1b10abSAndroid Build Coastguard Worker #include "vpx/vpx_image.h" 19*fb1b10abSAndroid Build Coastguard Worker 20*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus 21*fb1b10abSAndroid Build Coastguard Worker extern "C" { 22*fb1b10abSAndroid Build Coastguard Worker #endif 23*fb1b10abSAndroid Build Coastguard Worker 24*fb1b10abSAndroid Build Coastguard Worker typedef struct y4m_input y4m_input; 25*fb1b10abSAndroid Build Coastguard Worker 26*fb1b10abSAndroid Build Coastguard Worker /*The function used to perform chroma conversion.*/ 27*fb1b10abSAndroid Build Coastguard Worker typedef void (*y4m_convert_func)(y4m_input *_y4m, unsigned char *_dst, 28*fb1b10abSAndroid Build Coastguard Worker unsigned char *_src); 29*fb1b10abSAndroid Build Coastguard Worker 30*fb1b10abSAndroid Build Coastguard Worker struct y4m_input { 31*fb1b10abSAndroid Build Coastguard Worker int pic_w; 32*fb1b10abSAndroid Build Coastguard Worker int pic_h; 33*fb1b10abSAndroid Build Coastguard Worker int fps_n; 34*fb1b10abSAndroid Build Coastguard Worker int fps_d; 35*fb1b10abSAndroid Build Coastguard Worker int par_n; 36*fb1b10abSAndroid Build Coastguard Worker int par_d; 37*fb1b10abSAndroid Build Coastguard Worker char interlace; 38*fb1b10abSAndroid Build Coastguard Worker int src_c_dec_h; 39*fb1b10abSAndroid Build Coastguard Worker int src_c_dec_v; 40*fb1b10abSAndroid Build Coastguard Worker int dst_c_dec_h; 41*fb1b10abSAndroid Build Coastguard Worker int dst_c_dec_v; 42*fb1b10abSAndroid Build Coastguard Worker char chroma_type[16]; 43*fb1b10abSAndroid Build Coastguard Worker /*The size of each converted frame buffer.*/ 44*fb1b10abSAndroid Build Coastguard Worker size_t dst_buf_sz; 45*fb1b10abSAndroid Build Coastguard Worker /*The amount to read directly into the converted frame buffer.*/ 46*fb1b10abSAndroid Build Coastguard Worker size_t dst_buf_read_sz; 47*fb1b10abSAndroid Build Coastguard Worker /*The size of the auxilliary buffer.*/ 48*fb1b10abSAndroid Build Coastguard Worker size_t aux_buf_sz; 49*fb1b10abSAndroid Build Coastguard Worker /*The amount to read into the auxilliary buffer.*/ 50*fb1b10abSAndroid Build Coastguard Worker size_t aux_buf_read_sz; 51*fb1b10abSAndroid Build Coastguard Worker y4m_convert_func convert; 52*fb1b10abSAndroid Build Coastguard Worker unsigned char *dst_buf; 53*fb1b10abSAndroid Build Coastguard Worker unsigned char *aux_buf; 54*fb1b10abSAndroid Build Coastguard Worker enum vpx_img_fmt vpx_fmt; 55*fb1b10abSAndroid Build Coastguard Worker int bps; 56*fb1b10abSAndroid Build Coastguard Worker unsigned int bit_depth; 57*fb1b10abSAndroid Build Coastguard Worker }; 58*fb1b10abSAndroid Build Coastguard Worker 59*fb1b10abSAndroid Build Coastguard Worker /** 60*fb1b10abSAndroid Build Coastguard Worker * Open the input file, treating it as Y4M. |y4m_ctx| is filled in after 61*fb1b10abSAndroid Build Coastguard Worker * reading it. The |skip_buffer| indicates bytes that were previously read 62*fb1b10abSAndroid Build Coastguard Worker * from |file|, to do input-type detection; this buffer will be read before 63*fb1b10abSAndroid Build Coastguard Worker * the |file| is read. It is of size |num_skip|, which *must* be 8 or less. 64*fb1b10abSAndroid Build Coastguard Worker * 65*fb1b10abSAndroid Build Coastguard Worker * Returns 0 on success, -1 on failure. 66*fb1b10abSAndroid Build Coastguard Worker */ 67*fb1b10abSAndroid Build Coastguard Worker int y4m_input_open(y4m_input *y4m_ctx, FILE *file, char *skip_buffer, 68*fb1b10abSAndroid Build Coastguard Worker int num_skip, int only_420); 69*fb1b10abSAndroid Build Coastguard Worker void y4m_input_close(y4m_input *_y4m); 70*fb1b10abSAndroid Build Coastguard Worker int y4m_input_fetch_frame(y4m_input *_y4m, FILE *_fin, vpx_image_t *img); 71*fb1b10abSAndroid Build Coastguard Worker 72*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus 73*fb1b10abSAndroid Build Coastguard Worker } // extern "C" 74*fb1b10abSAndroid Build Coastguard Worker #endif 75*fb1b10abSAndroid Build Coastguard Worker 76*fb1b10abSAndroid Build Coastguard Worker #endif // VPX_Y4MINPUT_H_ 77