12ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian/* 22ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian * Copyright (c) 2013 The WebM project authors. All Rights Reserved. 32ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian * 42ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian * Use of this source code is governed by a BSD-style license 52ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian * that can be found in the LICENSE file in the root of the source 62ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian * tree. An additional intellectual property rights grant can be found 72ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian * in the file PATENTS. All contributing project authors may 82ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian * be found in the AUTHORS file in the root of the source tree. 92ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian */ 102ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian#ifndef WEBMDEC_H_ 112ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian#define WEBMDEC_H_ 122ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian 132ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian#include "./tools_common.h" 142ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian 152ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian#ifdef __cplusplus 162ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanianextern "C" { 172ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian#endif 182ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian 192ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanianstruct VpxInputContext; 202ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian 212ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanianstruct WebmInputContext { 22ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian void *reader; 23ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian void *segment; 24ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian uint8_t *buffer; 25ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian const void *cluster; 26ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian const void *block_entry; 27ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian const void *block; 28ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int block_frame_index; 29ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian int video_track_index; 30ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian uint64_t timestamp_ns; 312ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian}; 322ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian 33ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Checks if the input is a WebM file. If so, initializes WebMInputContext so 34ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// that webm_read_frame can be called to retrieve a video frame. 35ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Returns 1 on success and 0 on failure or input is not WebM file. 36ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// TODO(vigneshv): Refactor this function into two smaller functions specific 37ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// to their task. 382ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanianint file_is_webm(struct WebmInputContext *webm_ctx, 392ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian struct VpxInputContext *vpx_ctx); 402ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian 41ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Reads a WebM Video Frame. Memory for the buffer is created, owned and managed 42ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// by this function. For the first call, |buffer| should be NULL and 43ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// |*bytes_in_buffer| should be 0. Once all the frames are read and used, 44ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// webm_free() should be called, otherwise there will be a leak. 45ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Parameters: 46ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// webm_ctx - WebmInputContext object 47ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// buffer - pointer where the frame data will be filled. 48ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// bytes_in_buffer - pointer to buffer size. 49ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// buffer_size - unused TODO(vigneshv): remove this 50ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Return values: 51ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// 0 - Success 52ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// 1 - End of Stream 53ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// -1 - Error 54ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// TODO(vigneshv): Make the return values consistent across all functions in 55ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// this file. 562ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanianint webm_read_frame(struct WebmInputContext *webm_ctx, 572ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian uint8_t **buffer, 582ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian size_t *bytes_in_buffer, 592ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian size_t *buffer_size); 602ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian 61ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Guesses the frame rate of the input file based on the container timestamps. 622ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanianint webm_guess_framerate(struct WebmInputContext *webm_ctx, 632ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian struct VpxInputContext *vpx_ctx); 642ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian 65ba6c59e9d7d7013b3906b6f4230b663422681848Vignesh Venkatasubramanian// Resets the WebMInputContext. 662ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanianvoid webm_free(struct WebmInputContext *webm_ctx); 672ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian 682ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian#ifdef __cplusplus 692ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian} // extern "C" 702ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian#endif 712ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian 722ec72e65689c948e92b826ae1e867bf369e72f13Vignesh Venkatasubramanian#endif // WEBMDEC_H_ 73