/*****************************************************************************
- * matroska_ebml.c:
+ * matroska_ebml.c: matroska muxer utilities
*****************************************************************************
- * Copyright (C) 2005 Mike Matsnev
+ * Copyright (C) 2005-2014 x264 project
+ *
+ * Authors: Mike Matsnev <mike@haali.su>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111, USA.
+ *
+ * This program is also available under a commercial proprietary license.
+ * For more information, contact us at licensing@x264.com.
*****************************************************************************/
#include "output.h"
}
else
{
- c = malloc( sizeof(*c) );
+ c = calloc( 1, sizeof(mk_context) );
if( !c )
return NULL;
- memset( c, 0, sizeof(*c) );
}
c->parent = parent;
mk_writer *mk_create_writer( const char *filename )
{
- mk_writer *w = malloc( sizeof(*w) );
+ mk_writer *w = calloc( 1, sizeof(mk_writer) );
if( !w )
return NULL;
- memset( w, 0, sizeof(*w) );
-
w->root = mk_create_context( w, NULL, 0 );
if( !w->root )
{
if( !strcmp( filename, "-" ) )
w->fp = stdout;
else
- w->fp = fopen( filename, "wb" );
+ w->fp = x264_fopen( filename, "wb" );
if( !w->fp )
{
mk_destroy_contexts( w );
return w;
}
-int mk_writeHeader( mk_writer *w, const char *writing_app,
- const char *codec_id,
- const void *codec_private, unsigned codec_private_size,
- int64_t default_frame_duration,
- int64_t timescale,
- unsigned width, unsigned height,
- unsigned d_width, unsigned d_height, int display_size_units )
+static const uint8_t mk_stereo_modes[6] = {5,9,7,1,3,13};
+
+int mk_write_header( mk_writer *w, const char *writing_app,
+ const char *codec_id,
+ const void *codec_private, unsigned codec_private_size,
+ int64_t default_frame_duration,
+ int64_t timescale,
+ unsigned width, unsigned height,
+ unsigned d_width, unsigned d_height, int display_size_units, int stereo_mode )
{
mk_context *c, *ti, *v;
CHECK( mk_write_uint( v, 0x54b2, display_size_units ) );
CHECK( mk_write_uint( v, 0x54b0, d_width ) );
CHECK( mk_write_uint( v, 0x54ba, d_height ) );
+ if( stereo_mode >= 0 && stereo_mode <= 5 )
+ CHECK( mk_write_uint( v, 0x53b8, mk_stereo_modes[stereo_mode] ) );
CHECK( mk_close_context( v, 0 ) );
CHECK( mk_close_context( ti, 0 ) );