1233d2500723e5594f3e7c70896ffeeef32b9c950ywan/* 2233d2500723e5594f3e7c70896ffeeef32b9c950ywan * Copyright (c) 2013 The WebM project authors. All Rights Reserved. 3233d2500723e5594f3e7c70896ffeeef32b9c950ywan * 4233d2500723e5594f3e7c70896ffeeef32b9c950ywan * Use of this source code is governed by a BSD-style license 5233d2500723e5594f3e7c70896ffeeef32b9c950ywan * that can be found in the LICENSE file in the root of the source 6233d2500723e5594f3e7c70896ffeeef32b9c950ywan * tree. An additional intellectual property rights grant can be found 7233d2500723e5594f3e7c70896ffeeef32b9c950ywan * in the file PATENTS. All contributing project authors may 8233d2500723e5594f3e7c70896ffeeef32b9c950ywan * be found in the AUTHORS file in the root of the source tree. 9233d2500723e5594f3e7c70896ffeeef32b9c950ywan */ 10233d2500723e5594f3e7c70896ffeeef32b9c950ywan#ifndef WEBMENC_H_ 11233d2500723e5594f3e7c70896ffeeef32b9c950ywan#define WEBMENC_H_ 12233d2500723e5594f3e7c70896ffeeef32b9c950ywan 13233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include <stdio.h> 14233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include <stdlib.h> 15233d2500723e5594f3e7c70896ffeeef32b9c950ywan 16233d2500723e5594f3e7c70896ffeeef32b9c950ywan#if defined(_MSC_VER) 17233d2500723e5594f3e7c70896ffeeef32b9c950ywan/* MSVS doesn't define off_t */ 18233d2500723e5594f3e7c70896ffeeef32b9c950ywantypedef __int64 off_t; 19233d2500723e5594f3e7c70896ffeeef32b9c950ywan#else 20233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include <stdint.h> 21233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 22233d2500723e5594f3e7c70896ffeeef32b9c950ywan 23233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "tools_common.h" 24233d2500723e5594f3e7c70896ffeeef32b9c950ywan#include "vpx/vpx_encoder.h" 25233d2500723e5594f3e7c70896ffeeef32b9c950ywan 26233d2500723e5594f3e7c70896ffeeef32b9c950ywan#ifdef __cplusplus 27233d2500723e5594f3e7c70896ffeeef32b9c950ywanextern "C" { 28233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 29233d2500723e5594f3e7c70896ffeeef32b9c950ywan 30233d2500723e5594f3e7c70896ffeeef32b9c950ywantypedef off_t EbmlLoc; 31233d2500723e5594f3e7c70896ffeeef32b9c950ywan 32233d2500723e5594f3e7c70896ffeeef32b9c950ywanstruct cue_entry { 33233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned int time; 34233d2500723e5594f3e7c70896ffeeef32b9c950ywan uint64_t loc; 35233d2500723e5594f3e7c70896ffeeef32b9c950ywan}; 36233d2500723e5594f3e7c70896ffeeef32b9c950ywan 37233d2500723e5594f3e7c70896ffeeef32b9c950ywanstruct EbmlGlobal { 38233d2500723e5594f3e7c70896ffeeef32b9c950ywan int debug; 39233d2500723e5594f3e7c70896ffeeef32b9c950ywan 40233d2500723e5594f3e7c70896ffeeef32b9c950ywan FILE *stream; 41233d2500723e5594f3e7c70896ffeeef32b9c950ywan int64_t last_pts_ms; 42233d2500723e5594f3e7c70896ffeeef32b9c950ywan vpx_rational_t framerate; 43233d2500723e5594f3e7c70896ffeeef32b9c950ywan 44233d2500723e5594f3e7c70896ffeeef32b9c950ywan /* These pointers are to the start of an element */ 45233d2500723e5594f3e7c70896ffeeef32b9c950ywan off_t position_reference; 46233d2500723e5594f3e7c70896ffeeef32b9c950ywan off_t seek_info_pos; 47233d2500723e5594f3e7c70896ffeeef32b9c950ywan off_t segment_info_pos; 48233d2500723e5594f3e7c70896ffeeef32b9c950ywan off_t track_pos; 49233d2500723e5594f3e7c70896ffeeef32b9c950ywan off_t cue_pos; 50233d2500723e5594f3e7c70896ffeeef32b9c950ywan off_t cluster_pos; 51233d2500723e5594f3e7c70896ffeeef32b9c950ywan 52233d2500723e5594f3e7c70896ffeeef32b9c950ywan /* This pointer is to a specific element to be serialized */ 53233d2500723e5594f3e7c70896ffeeef32b9c950ywan off_t track_id_pos; 54233d2500723e5594f3e7c70896ffeeef32b9c950ywan 55233d2500723e5594f3e7c70896ffeeef32b9c950ywan /* These pointers are to the size field of the element */ 56233d2500723e5594f3e7c70896ffeeef32b9c950ywan EbmlLoc startSegment; 57233d2500723e5594f3e7c70896ffeeef32b9c950ywan EbmlLoc startCluster; 58233d2500723e5594f3e7c70896ffeeef32b9c950ywan 59233d2500723e5594f3e7c70896ffeeef32b9c950ywan uint32_t cluster_timecode; 60233d2500723e5594f3e7c70896ffeeef32b9c950ywan int cluster_open; 61233d2500723e5594f3e7c70896ffeeef32b9c950ywan 62233d2500723e5594f3e7c70896ffeeef32b9c950ywan struct cue_entry *cue_list; 63233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned int cues; 64233d2500723e5594f3e7c70896ffeeef32b9c950ywan}; 65233d2500723e5594f3e7c70896ffeeef32b9c950ywan 66233d2500723e5594f3e7c70896ffeeef32b9c950ywan/* Stereo 3D packed frame format */ 67233d2500723e5594f3e7c70896ffeeef32b9c950ywantypedef enum stereo_format { 68233d2500723e5594f3e7c70896ffeeef32b9c950ywan STEREO_FORMAT_MONO = 0, 69233d2500723e5594f3e7c70896ffeeef32b9c950ywan STEREO_FORMAT_LEFT_RIGHT = 1, 70233d2500723e5594f3e7c70896ffeeef32b9c950ywan STEREO_FORMAT_BOTTOM_TOP = 2, 71233d2500723e5594f3e7c70896ffeeef32b9c950ywan STEREO_FORMAT_TOP_BOTTOM = 3, 72233d2500723e5594f3e7c70896ffeeef32b9c950ywan STEREO_FORMAT_RIGHT_LEFT = 11 73233d2500723e5594f3e7c70896ffeeef32b9c950ywan} stereo_format_t; 74233d2500723e5594f3e7c70896ffeeef32b9c950ywan 75233d2500723e5594f3e7c70896ffeeef32b9c950ywanvoid write_webm_seek_element(struct EbmlGlobal *ebml, 76233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned int id, 77233d2500723e5594f3e7c70896ffeeef32b9c950ywan off_t pos); 78233d2500723e5594f3e7c70896ffeeef32b9c950ywan 79233d2500723e5594f3e7c70896ffeeef32b9c950ywanvoid write_webm_file_header(struct EbmlGlobal *glob, 80233d2500723e5594f3e7c70896ffeeef32b9c950ywan const vpx_codec_enc_cfg_t *cfg, 81233d2500723e5594f3e7c70896ffeeef32b9c950ywan const struct vpx_rational *fps, 82233d2500723e5594f3e7c70896ffeeef32b9c950ywan stereo_format_t stereo_fmt, 83233d2500723e5594f3e7c70896ffeeef32b9c950ywan unsigned int fourcc); 84233d2500723e5594f3e7c70896ffeeef32b9c950ywan 85233d2500723e5594f3e7c70896ffeeef32b9c950ywanvoid write_webm_block(struct EbmlGlobal *glob, 86233d2500723e5594f3e7c70896ffeeef32b9c950ywan const vpx_codec_enc_cfg_t *cfg, 87233d2500723e5594f3e7c70896ffeeef32b9c950ywan const vpx_codec_cx_pkt_t *pkt); 88233d2500723e5594f3e7c70896ffeeef32b9c950ywan 89233d2500723e5594f3e7c70896ffeeef32b9c950ywanvoid write_webm_file_footer(struct EbmlGlobal *glob, int hash); 90233d2500723e5594f3e7c70896ffeeef32b9c950ywan 91233d2500723e5594f3e7c70896ffeeef32b9c950ywan#ifdef __cplusplus 92233d2500723e5594f3e7c70896ffeeef32b9c950ywan} // extern "C" 93233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif 94233d2500723e5594f3e7c70896ffeeef32b9c950ywan 95233d2500723e5594f3e7c70896ffeeef32b9c950ywan#endif // WEBMENC_H_ 96