15ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang/* 25ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang * Copyright (c) 2013 The WebM project authors. All Rights Reserved. 35ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang * 45ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang * Use of this source code is governed by a BSD-style license 55ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang * that can be found in the LICENSE file in the root of the source 65ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang * tree. An additional intellectual property rights grant can be found 75ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang * in the file PATENTS. All contributing project authors may 85ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang * be found in the AUTHORS file in the root of the source tree. 95ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang */ 105ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang#ifndef WEBMENC_H_ 115ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang#define WEBMENC_H_ 125ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 135ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang#include <stdio.h> 145ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang#include <stdlib.h> 155ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 165ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang#if defined(_MSC_VER) 175ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang/* MSVS doesn't define off_t */ 185ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangtypedef __int64 off_t; 195ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang#else 205ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang#include <stdint.h> 215ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang#endif 225ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 235ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang#include "tools_common.h" 245ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang#include "vpx/vpx_encoder.h" 255ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 26b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#ifdef __cplusplus 27b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanianextern "C" { 28b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#endif 29b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 305ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangtypedef off_t EbmlLoc; 315ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 325ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangstruct cue_entry { 335ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang unsigned int time; 345ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang uint64_t loc; 355ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang}; 365ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 375ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangstruct EbmlGlobal { 385ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang int debug; 395ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 405ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang FILE *stream; 415ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang int64_t last_pts_ms; 425ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang vpx_rational_t framerate; 435ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 445ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang /* These pointers are to the start of an element */ 455ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang off_t position_reference; 465ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang off_t seek_info_pos; 475ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang off_t segment_info_pos; 485ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang off_t track_pos; 495ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang off_t cue_pos; 505ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang off_t cluster_pos; 515ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 525ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang /* This pointer is to a specific element to be serialized */ 535ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang off_t track_id_pos; 545ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 555ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang /* These pointers are to the size field of the element */ 565ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang EbmlLoc startSegment; 575ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang EbmlLoc startCluster; 585ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 595ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang uint32_t cluster_timecode; 605ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang int cluster_open; 615ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 625ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang struct cue_entry *cue_list; 635ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang unsigned int cues; 645ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang}; 655ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 665ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang/* Stereo 3D packed frame format */ 675ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangtypedef enum stereo_format { 685ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang STEREO_FORMAT_MONO = 0, 695ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang STEREO_FORMAT_LEFT_RIGHT = 1, 705ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang STEREO_FORMAT_BOTTOM_TOP = 2, 715ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang STEREO_FORMAT_TOP_BOTTOM = 3, 725ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang STEREO_FORMAT_RIGHT_LEFT = 11 735ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang} stereo_format_t; 745ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 755ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangvoid write_webm_seek_element(struct EbmlGlobal *ebml, 765ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang unsigned int id, 775ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang off_t pos); 785ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 795ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangvoid write_webm_file_header(struct EbmlGlobal *glob, 805ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang const vpx_codec_enc_cfg_t *cfg, 815ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang const struct vpx_rational *fps, 825ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang stereo_format_t stereo_fmt, 835ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang unsigned int fourcc); 845ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 855ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangvoid write_webm_block(struct EbmlGlobal *glob, 865ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang const vpx_codec_enc_cfg_t *cfg, 875ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang const vpx_codec_cx_pkt_t *pkt); 885ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 895ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuangvoid write_webm_file_footer(struct EbmlGlobal *glob, int hash); 905ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang 91b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#ifdef __cplusplus 92b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian} // extern "C" 93b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian#endif 94b08e2e23eec181e9951df33cd704ac294c5407b6Vignesh Venkatasubramanian 955ae7ac49f08a179e4f054d99fcfc9dce78d26e58hkuang#endif // WEBMENC_H_ 96