#include "ebml/StdIOCallback.h"
+extern "C" {
+ #include "mp4/libmp4.h"
+}
#ifdef HAVE_ZLIB_H
# include <zlib.h>
#endif
static void Close( vlc_object_t * );
vlc_module_begin();
+ set_shortname( _("Matroska") );
set_description( _("Matroska stream demuxer" ) );
set_capability( "demux2", 50 );
set_callbacks( Open, Close );
+ set_category( CAT_INPUT );
+ set_subcategory( SUBCAT_INPUT_DEMUX );
add_bool( "mkv-seek-percent", 1, NULL,
N_("Seek based on percent not time"),
char *psz_codec_download_url;
/* encryption/compression */
- vlc_bool_t b_compression_zlib;
+ int i_compression_type;
} mkv_track_t;
tk.fmt.i_codec = VLC_FOURCC( 'm', 'p', '4', 'v' );
}
}
+ else if( !strcmp( tk.psz_codec, "V_QUICKTIME" ) )
+ {
+ MP4_Box_t *p_box = (MP4_Box_t*)malloc( sizeof( MP4_Box_t ) );
+ stream_t *p_mp4_stream = stream_MemoryNew( VLC_OBJECT(p_demux),
+ tk.p_extra_data,
+ tk.i_extra_data );
+ MP4_ReadBoxCommon( p_mp4_stream, p_box );
+ MP4_ReadBox_sample_vide( p_mp4_stream, p_box );
+ tk.fmt.i_codec = p_box->i_type;
+ tk.fmt.video.i_width = p_box->data.p_sample_vide->i_width;
+ tk.fmt.video.i_height = p_box->data.p_sample_vide->i_height;
+ tk.fmt.i_extra = p_box->data.p_sample_vide->i_qt_image_description;
+ tk.fmt.p_extra = malloc( tk.fmt.i_extra );
+ memcpy( tk.fmt.p_extra, p_box->data.p_sample_vide->p_qt_image_description, tk.fmt.i_extra );
+ MP4_FreeBox_sample_vide( p_box );
+ stream_MemoryDelete( p_mp4_stream, VLC_TRUE );
+ }
else if( !strcmp( tk.psz_codec, "A_MS/ACM" ) )
{
if( tk.i_extra_data < (int)sizeof( WAVEFORMATEX ) )
DataBuffer &data = block->GetBuffer(i);
p_block = MemToBlock( p_demux, data.Buffer(), data.Size() );
+
+ if( p_block == NULL )
+ {
+ break;
+ }
+
#if defined(HAVE_ZLIB_H)
- if( p_block != NULL && tk.b_compression_zlib )
+ if( tk.i_compression_type )
{
p_block = block_zlib_decompress( VLC_OBJECT(p_demux), p_block );
}
#endif
- if( p_block == NULL )
- {
- break;
- }
if( tk.fmt.i_cat != VIDEO_ES )
p_block->i_dts = p_block->i_pts = i_pts;
tk->psz_codec_info_url = NULL;
tk->psz_codec_download_url = NULL;
- tk->b_compression_zlib = VLC_FALSE;
+ tk->i_compression_type = MATROSKA_COMPRESSION_NONE;
for( i = 0; i < m->ListSize(); i++ )
{
MkvTree( p_demux, 6, "Compression Algorithm: %i", uint32(compalg) );
if( uint32( compalg ) == 0 )
{
- tk->b_compression_zlib = VLC_TRUE;
+ tk->i_compression_type = MATROSKA_COMPRESSION_ZLIB;
}
}
else