1*fb1b10abSAndroid Build Coastguard Worker /* 2*fb1b10abSAndroid Build Coastguard Worker * Copyright (c) 2013 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 #ifndef VPX_WEBMDEC_H_ 11*fb1b10abSAndroid Build Coastguard Worker #define VPX_WEBMDEC_H_ 12*fb1b10abSAndroid Build Coastguard Worker 13*fb1b10abSAndroid Build Coastguard Worker #include "./tools_common.h" 14*fb1b10abSAndroid Build Coastguard Worker 15*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus 16*fb1b10abSAndroid Build Coastguard Worker extern "C" { 17*fb1b10abSAndroid Build Coastguard Worker #endif 18*fb1b10abSAndroid Build Coastguard Worker 19*fb1b10abSAndroid Build Coastguard Worker struct VpxInputContext; 20*fb1b10abSAndroid Build Coastguard Worker 21*fb1b10abSAndroid Build Coastguard Worker struct WebmInputContext { 22*fb1b10abSAndroid Build Coastguard Worker void *reader; 23*fb1b10abSAndroid Build Coastguard Worker void *segment; 24*fb1b10abSAndroid Build Coastguard Worker uint8_t *buffer; 25*fb1b10abSAndroid Build Coastguard Worker const void *cluster; 26*fb1b10abSAndroid Build Coastguard Worker const void *block_entry; 27*fb1b10abSAndroid Build Coastguard Worker const void *block; 28*fb1b10abSAndroid Build Coastguard Worker int block_frame_index; 29*fb1b10abSAndroid Build Coastguard Worker int video_track_index; 30*fb1b10abSAndroid Build Coastguard Worker int64_t timestamp_ns; 31*fb1b10abSAndroid Build Coastguard Worker int is_key_frame; 32*fb1b10abSAndroid Build Coastguard Worker int reached_eos; 33*fb1b10abSAndroid Build Coastguard Worker }; 34*fb1b10abSAndroid Build Coastguard Worker 35*fb1b10abSAndroid Build Coastguard Worker // Checks if the input is a WebM file. If so, initializes WebMInputContext so 36*fb1b10abSAndroid Build Coastguard Worker // that webm_read_frame can be called to retrieve a video frame. 37*fb1b10abSAndroid Build Coastguard Worker // Returns 1 on success and 0 on failure or input is not WebM file. 38*fb1b10abSAndroid Build Coastguard Worker // TODO(vigneshv): Refactor this function into two smaller functions specific 39*fb1b10abSAndroid Build Coastguard Worker // to their task. 40*fb1b10abSAndroid Build Coastguard Worker int file_is_webm(struct WebmInputContext *webm_ctx, 41*fb1b10abSAndroid Build Coastguard Worker struct VpxInputContext *vpx_ctx); 42*fb1b10abSAndroid Build Coastguard Worker 43*fb1b10abSAndroid Build Coastguard Worker // Reads a WebM Video Frame. Memory for the buffer is created, owned and managed 44*fb1b10abSAndroid Build Coastguard Worker // by this function. For the first call, |buffer| should be NULL and 45*fb1b10abSAndroid Build Coastguard Worker // |*buffer_size| should be 0. Once all the frames are read and used, 46*fb1b10abSAndroid Build Coastguard Worker // webm_free() should be called, otherwise there will be a leak. 47*fb1b10abSAndroid Build Coastguard Worker // Parameters: 48*fb1b10abSAndroid Build Coastguard Worker // webm_ctx - WebmInputContext object 49*fb1b10abSAndroid Build Coastguard Worker // buffer - pointer where the frame data will be filled. 50*fb1b10abSAndroid Build Coastguard Worker // buffer_size - pointer to buffer size. 51*fb1b10abSAndroid Build Coastguard Worker // Return values: 52*fb1b10abSAndroid Build Coastguard Worker // 0 - Success 53*fb1b10abSAndroid Build Coastguard Worker // 1 - End of Stream 54*fb1b10abSAndroid Build Coastguard Worker // -1 - Error 55*fb1b10abSAndroid Build Coastguard Worker int webm_read_frame(struct WebmInputContext *webm_ctx, uint8_t **buffer, 56*fb1b10abSAndroid Build Coastguard Worker size_t *buffer_size); 57*fb1b10abSAndroid Build Coastguard Worker 58*fb1b10abSAndroid Build Coastguard Worker // Guesses the frame rate of the input file based on the container timestamps. 59*fb1b10abSAndroid Build Coastguard Worker int webm_guess_framerate(struct WebmInputContext *webm_ctx, 60*fb1b10abSAndroid Build Coastguard Worker struct VpxInputContext *vpx_ctx); 61*fb1b10abSAndroid Build Coastguard Worker 62*fb1b10abSAndroid Build Coastguard Worker // Resets the WebMInputContext. 63*fb1b10abSAndroid Build Coastguard Worker void webm_free(struct WebmInputContext *webm_ctx); 64*fb1b10abSAndroid Build Coastguard Worker 65*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus 66*fb1b10abSAndroid Build Coastguard Worker } // extern "C" 67*fb1b10abSAndroid Build Coastguard Worker #endif 68*fb1b10abSAndroid Build Coastguard Worker 69*fb1b10abSAndroid Build Coastguard Worker #endif // VPX_WEBMDEC_H_ 70