Commit 626e56bf authored by Rafaël Carré's avatar Rafaël Carré

demuxers: remove the need for input_thread_t by using the new "meta-preparsed" input variable.

tta & ffmpeg: remove unneeded "meta reader" loading
tta didn't use anyway, and ffmpeg uses information from libavcodec
parent 4f5d55cf
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
#include <vlc_demux.h> #include <vlc_demux.h>
#include <vlc_stream.h> #include <vlc_stream.h>
#include <vlc_meta.h> #include <vlc_meta.h>
#include <vlc_input.h>
/* ffmpeg header */ /* ffmpeg header */
#ifdef HAVE_FFMPEG_AVFORMAT_H #ifdef HAVE_FFMPEG_AVFORMAT_H
...@@ -256,35 +255,6 @@ int E_(OpenDemux)( vlc_object_t *p_this ) ...@@ -256,35 +255,6 @@ int E_(OpenDemux)( vlc_object_t *p_this )
( p_sys->ic->duration != (int64_t)AV_NOPTS_VALUE ) ? ( p_sys->ic->duration != (int64_t)AV_NOPTS_VALUE ) ?
p_sys->ic->duration * 1000000 / AV_TIME_BASE : -1 ); p_sys->ic->duration * 1000000 / AV_TIME_BASE : -1 );
input_thread_t *p_input = (input_thread_t *)vlc_object_find( p_demux, VLC_OBJECT_INPUT, FIND_PARENT );
if( p_input )
{
if( !( input_GetItem( p_input )->p_meta->i_status & ITEM_PREPARSED ) )
{
p_demux->p_private = malloc( sizeof( demux_meta_t ) );
if( !p_demux->p_private )
{
vlc_object_release( p_input );
return VLC_ENOMEM;
}
module_t *p_meta = module_Need( p_demux, "meta reader", NULL, 0 );
if( p_meta )
{
demux_meta_t *p_demux_meta = (demux_meta_t *)p_demux->p_private;
vlc_meta_Merge( input_GetItem(p_input)->p_meta,
p_demux_meta->p_meta );
vlc_meta_Delete( p_demux_meta->p_meta );
module_Unneed( p_demux, p_meta );
int i;
for( i = 0; i < p_demux_meta->i_attachments; i++ )
free( p_demux_meta->attachments[i] );
TAB_CLEAN( p_demux_meta->i_attachments, p_demux_meta->attachments );
}
free( p_demux->p_private );
}
vlc_object_release( p_input );
}
return VLC_SUCCESS; return VLC_SUCCESS;
} }
......
...@@ -155,44 +155,34 @@ static int Open( vlc_object_t * p_this ) ...@@ -155,44 +155,34 @@ static int Open( vlc_object_t * p_this )
} }
/* Parse possible id3 header */ /* Parse possible id3 header */
input_thread_t *p_input = (input_thread_t *)vlc_object_find( p_demux, VLC_OBJECT_INPUT, FIND_PARENT ); if( !var_CreateGetBool( p_demux, "meta-preparsed" ) )
if( p_input )
{ {
if( !( input_GetItem( p_input )->p_meta->i_status & ITEM_PREPARSED ) ) p_demux->p_private = malloc( sizeof( demux_meta_t ) );
if( !p_demux->p_private )
return VLC_ENOMEM;
if( ( p_id3 = module_Need( p_demux, "meta reader", NULL, 0 ) ) )
{ {
p_demux->p_private = malloc( sizeof( demux_meta_t ) ); module_Unneed( p_demux, p_id3 );
if( !p_demux->p_private ) demux_meta_t *p_demux_meta = (demux_meta_t *)p_demux->p_private;
vlc_meta_t *p_meta = p_demux_meta->p_meta;
if( !p_sys->p_meta )
{ {
vlc_object_release( p_input ); p_sys->p_meta = p_meta;
return VLC_ENOMEM;
} }
if( ( p_id3 = module_Need( p_demux, "meta reader", NULL, 0 ) ) ) else if( p_meta )
{ {
demux_meta_t *p_demux_meta = (demux_meta_t *)p_demux->p_private; vlc_meta_Merge( p_sys->p_meta, p_meta );
vlc_meta_t *p_meta = p_demux_meta->p_meta; vlc_meta_Delete( p_meta );
if( !p_sys->p_meta )
{
p_sys->p_meta = p_meta;
}
else if( p_meta )
{
vlc_meta_Merge( p_sys->p_meta, p_meta );
vlc_meta_Delete( p_meta );
}
p_demux->p_private = NULL;
module_Unneed( p_demux, p_id3 );
int i;
for( i = 0; i < p_demux_meta->i_attachments; i++ )
TAB_APPEND_CAST( (input_attachment_t**),
p_sys->i_attachments, p_sys->attachments,
p_demux_meta->attachments[p_demux_meta->i_attachments] );
TAB_CLEAN( p_demux_meta->i_attachments,
p_demux_meta->attachments );
} }
free( p_demux->p_private ); int i;
for( i = 0; i < p_demux_meta->i_attachments; i++ )
TAB_APPEND_CAST( (input_attachment_t**),
p_sys->i_attachments, p_sys->attachments,
p_demux_meta->attachments[p_demux_meta->i_attachments] );
TAB_CLEAN( p_demux_meta->i_attachments, p_demux_meta->attachments );
} }
vlc_object_release( p_input ); free( p_demux->p_private );
} }
if( p_sys->i_cover_idx < p_sys->i_attachments ) if( p_sys->i_cover_idx < p_sys->i_attachments )
...@@ -216,6 +206,7 @@ static void Close( vlc_object_t * p_this ) ...@@ -216,6 +206,7 @@ static void Close( vlc_object_t * p_this )
demux_t *p_demux = (demux_t*)p_this; demux_t *p_demux = (demux_t*)p_this;
demux_sys_t *p_sys = p_demux->p_sys; demux_sys_t *p_sys = p_demux->p_sys;
var_Destroy( p_demux, "meta-preparsed" );
TAB_CLEAN( p_sys->i_seekpoint, p_sys->seekpoint ); TAB_CLEAN( p_sys->i_seekpoint, p_sys->seekpoint );
int i; int i;
......
...@@ -189,31 +189,23 @@ static int Open( vlc_object_t * p_this ) ...@@ -189,31 +189,23 @@ static int Open( vlc_object_t * p_this )
} }
/* Parse possible id3 header */ /* Parse possible id3 header */
input_thread_t *p_input = (input_thread_t *)vlc_object_find( p_demux, VLC_OBJECT_INPUT, FIND_PARENT ); if( !var_CreateGetBool( p_demux, "meta-preparsed" ) )
if( p_input )
{ {
if( !( input_GetItem( p_input )->p_meta->i_status & ITEM_PREPARSED ) ) p_demux->p_private = malloc( sizeof( demux_meta_t ) );
if( !p_demux->p_private )
return VLC_ENOMEM;
if( ( p_id3 = module_Need( p_demux, "meta reader", NULL, 0 ) ) )
{ {
p_demux->p_private = malloc( sizeof( demux_meta_t ) ); module_Unneed( p_demux, p_id3 );
if( !p_demux->p_private ) demux_meta_t *p_demux_meta = (demux_meta_t *)p_demux->p_private;
{ p_sys->p_meta = p_demux_meta->p_meta;
vlc_object_release( p_input ); int i;
return VLC_ENOMEM; for( i = 0; i < p_demux_meta->i_attachments; i++ )
} free( p_demux_meta->attachments[i] );
if( ( p_id3 = module_Need( p_demux, "meta reader", NULL, 0 ) ) ) TAB_CLEAN( p_demux_meta->i_attachments,
{ p_demux_meta->attachments );
demux_meta_t *p_demux_meta = (demux_meta_t *)p_demux->p_private;
p_sys->p_meta = p_demux_meta->p_meta;
module_Unneed( p_demux, p_id3 );
int i;
for( i = 0; i < p_demux_meta->i_attachments; i++ )
free( p_demux_meta->attachments[i] );
TAB_CLEAN( p_demux_meta->i_attachments,
p_demux_meta->attachments );
}
free( p_demux->p_private );
} }
vlc_object_release( p_input ); free( p_demux->p_private );
} }
if( !p_sys->p_meta ) if( !p_sys->p_meta )
...@@ -233,6 +225,7 @@ static void Close( vlc_object_t * p_this ) ...@@ -233,6 +225,7 @@ static void Close( vlc_object_t * p_this )
demux_t *p_demux = (demux_t*)p_this; demux_t *p_demux = (demux_t*)p_this;
demux_sys_t *p_sys = p_demux->p_sys; demux_sys_t *p_sys = p_demux->p_sys;
var_Destroy( p_demux, "meta-preparsed" );
free( p_sys ); free( p_sys );
} }
......
...@@ -27,7 +27,6 @@ ...@@ -27,7 +27,6 @@
#include <vlc/vlc.h> #include <vlc/vlc.h>
#include <vlc_demux.h> #include <vlc_demux.h>
#include <vlc_input.h>
#include "vlc_codec.h" #include "vlc_codec.h"
/***************************************************************************** /*****************************************************************************
...@@ -110,32 +109,23 @@ static int Open( vlc_object_t * p_this ) ...@@ -110,32 +109,23 @@ static int Open( vlc_object_t * p_this )
LOAD_PACKETIZER_OR_FAIL( p_sys->p_packetizer, "mp4 audio" ); LOAD_PACKETIZER_OR_FAIL( p_sys->p_packetizer, "mp4 audio" );
/* Parse possible id3 header */ /* Parse possible id3 header */
input_thread_t *p_input = (input_thread_t *)vlc_object_find( p_demux, VLC_OBJECT_INPUT, FIND_PARENT ); if( !var_CreateGetBool( p_demux, "meta-preparsed" ) )
if( p_input )
{ {
if( !( input_GetItem( p_input )->p_meta->i_status & ITEM_PREPARSED ) ) p_demux->p_private = malloc( sizeof( demux_meta_t ) );
if( !p_demux->p_private )
return VLC_ENOMEM;
if( ( p_id3 = module_Need( p_demux, "meta reader", NULL, 0 ) ) )
{ {
p_demux->p_private = malloc( sizeof( demux_meta_t ) ); module_Unneed( p_demux, p_id3 );
if( !p_demux->p_private ) demux_meta_t *p_demux_meta = (demux_meta_t *)p_demux->p_private;
{ p_sys->meta = p_demux_meta->p_meta;
vlc_object_release( p_input ); int i;
return VLC_ENOMEM; /* attachments not supported in this demuxer */
} for( i = 0; i < p_demux_meta->i_attachments; i++ )
if( ( p_id3 = module_Need( p_demux, "meta reader", NULL, 0 ) ) ) free( p_demux_meta->attachments[i] );
{ TAB_CLEAN( p_demux_meta->i_attachments, p_demux_meta->attachments );
demux_meta_t *p_demux_meta = (demux_meta_t *)p_demux->p_private;
p_sys->meta = p_demux_meta->p_meta;
p_demux->p_private = NULL;
module_Unneed( p_demux, p_id3 );
int i;
for( i = 0; i < p_demux_meta->i_attachments; i++ )
free( p_demux_meta->attachments[i] );
TAB_CLEAN( p_demux_meta->i_attachments,
p_demux_meta->attachments );
}
free( p_demux->p_private );
} }
vlc_object_release( p_input ); free( p_demux->p_private );
} }
return VLC_SUCCESS; return VLC_SUCCESS;
} }
...@@ -148,6 +138,9 @@ static void Close( vlc_object_t * p_this ) ...@@ -148,6 +138,9 @@ static void Close( vlc_object_t * p_this )
demux_t *p_demux = (demux_t*)p_this; demux_t *p_demux = (demux_t*)p_this;
demux_sys_t *p_sys = p_demux->p_sys; demux_sys_t *p_sys = p_demux->p_sys;
var_Destroy( p_demux, "meta-preparsed" );
if( p_sys->meta ) vlc_meta_Delete( p_sys->meta );
DESTROY_PACKETIZER( p_sys->p_packetizer ); DESTROY_PACKETIZER( p_sys->p_packetizer );
free( p_sys ); free( p_sys );
......
...@@ -28,6 +28,7 @@ ...@@ -28,6 +28,7 @@
#include <vlc/vlc.h> #include <vlc/vlc.h>
#include <vlc_demux.h> #include <vlc_demux.h>
#include <vlc_meta.h>
#include <vlc_codec.h> #include <vlc_codec.h>
#include <vlc_input.h> #include <vlc_input.h>
...@@ -255,32 +256,22 @@ static int Open( vlc_object_t * p_this ) ...@@ -255,32 +256,22 @@ static int Open( vlc_object_t * p_this )
p_sys->p_block_out = p_block_out; p_sys->p_block_out = p_block_out;
/* Parse possible id3 header */ /* Parse possible id3 header */
input_thread_t *p_input = (input_thread_t *) if( !var_CreateGetBool( p_demux, "meta-preparsed" ) )
vlc_object_find( p_demux, VLC_OBJECT_INPUT, FIND_PARENT );
if( p_input )
{ {
if( !( input_GetItem( p_input )->p_meta->i_status & ITEM_PREPARSED ) ) p_demux->p_private = malloc( sizeof( demux_meta_t ) );
if( !p_demux->p_private )
return VLC_ENOMEM;
if( ( p_id3 = module_Need( p_demux, "meta reader", NULL, 0 ) ) )
{ {
p_demux->p_private = malloc( sizeof( demux_meta_t ) ); module_Unneed( p_demux, p_id3 );
if( !p_demux->p_private ) demux_meta_t *p_demux_meta = (demux_meta_t *)p_demux->p_private;
{ p_sys->meta = p_demux_meta->p_meta;
vlc_object_release( p_input ); p_sys->i_attachments = p_demux_meta->i_attachments;
return VLC_ENOMEM; p_sys->attachments = p_demux_meta->attachments;
}
if( ( p_id3 = module_Need( p_demux, "meta reader", NULL, 0 ) ) )
{
demux_meta_t *p_demux_meta = (demux_meta_t *)p_demux->p_private;
p_sys->meta = p_demux_meta->p_meta;
p_demux->p_private = NULL;
module_Unneed( p_demux, p_id3 );
p_sys->i_attachments = p_demux_meta->i_attachments;
p_sys->attachments = p_demux_meta->attachments;
}
free( p_demux->p_private );
} }
vlc_object_release( p_input ); free( p_demux->p_private );
} }
else printf("SKIP\n");
/* */ /* */
p_sys->p_packetizer->fmt_out.b_packetized = VLC_TRUE; p_sys->p_packetizer->fmt_out.b_packetized = VLC_TRUE;
vlc_audio_replay_gain_MergeFromMeta( &p_sys->p_packetizer->fmt_out.audio_replay_gain, vlc_audio_replay_gain_MergeFromMeta( &p_sys->p_packetizer->fmt_out.audio_replay_gain,
...@@ -355,6 +346,8 @@ static void Close( vlc_object_t * p_this ) ...@@ -355,6 +346,8 @@ static void Close( vlc_object_t * p_this )
demux_t *p_demux = (demux_t*)p_this; demux_t *p_demux = (demux_t*)p_this;
demux_sys_t *p_sys = p_demux->p_sys; demux_sys_t *p_sys = p_demux->p_sys;
var_Destroy( p_demux, "meta-preparsed" );
DESTROY_PACKETIZER( p_sys->p_packetizer ); DESTROY_PACKETIZER( p_sys->p_packetizer );
if( p_sys->meta ) vlc_meta_Delete( p_sys->meta ); if( p_sys->meta ) vlc_meta_Delete( p_sys->meta );
if( p_sys->p_block_out ) block_Release( p_sys->p_block_out ); if( p_sys->p_block_out ) block_Release( p_sys->p_block_out );
......
...@@ -26,8 +26,9 @@ ...@@ -26,8 +26,9 @@
* Preamble * Preamble
*****************************************************************************/ *****************************************************************************/
#include <vlc/vlc.h> #include <vlc/vlc.h>
#include <vlc_input.h>
#include <vlc_demux.h> #include <vlc_demux.h>
#include <vlc_meta.h>
#include <vlc_input.h>
#include <ogg/ogg.h> #include <ogg/ogg.h>
...@@ -104,6 +105,9 @@ struct demux_sys_t ...@@ -104,6 +105,9 @@ struct demux_sys_t
/* bitrate */ /* bitrate */
int i_bitrate; int i_bitrate;
/* meta data */
vlc_meta_t *meta;
/* attachments */ /* attachments */
int i_attachments; int i_attachments;
input_attachment_t **attachments; input_attachment_t **attachments;
...@@ -183,7 +187,6 @@ static void Ogg_ReadAnnodexHeader( vlc_object_t *, logical_stream_t *, ogg_packe ...@@ -183,7 +187,6 @@ static void Ogg_ReadAnnodexHeader( vlc_object_t *, logical_stream_t *, ogg_packe
static int Open( vlc_object_t * p_this ) static int Open( vlc_object_t * p_this )
{ {
demux_t *p_demux = (demux_t *)p_this; demux_t *p_demux = (demux_t *)p_this;
input_thread_t *p_input;
demux_sys_t *p_sys; demux_sys_t *p_sys;
const uint8_t *p_peek; const uint8_t *p_peek;
...@@ -207,32 +210,21 @@ static int Open( vlc_object_t * p_this ) ...@@ -207,32 +210,21 @@ static int Open( vlc_object_t * p_this )
/* Begnning of stream, tell the demux to look for elementary streams. */ /* Begnning of stream, tell the demux to look for elementary streams. */
p_sys->i_eos = 0; p_sys->i_eos = 0;
if( !var_CreateGetBool( p_demux, "meta-preparsed" ) )
p_input = (input_thread_t *)vlc_object_find( p_demux, VLC_OBJECT_INPUT, FIND_PARENT );
if( p_input )
{ {
if( !( input_GetItem( p_input )->p_meta->i_status & ITEM_PREPARSED ) ) p_demux->p_private = malloc( sizeof( demux_meta_t ) );
if( !p_demux->p_private )
return VLC_ENOMEM;
module_t *p_meta = module_Need( p_demux, "meta reader", NULL, 0 );
if( p_meta )
{ {
p_demux->p_private = malloc( sizeof( demux_meta_t ) ); module_Unneed( p_demux, p_meta );
if( !p_demux->p_private ) demux_meta_t *p_demux_meta = (demux_meta_t *)p_demux->p_private;
{ p_sys->meta = p_demux_meta->p_meta;
vlc_object_release( p_input ); p_sys->i_attachments = p_demux_meta->i_attachments;
return VLC_ENOMEM; p_sys->attachments = p_demux_meta->attachments;
}
module_t *p_meta = module_Need( p_demux, "meta reader", NULL, 0 );
if( p_meta )
{
demux_meta_t *p_demux_meta = (demux_meta_t *)p_demux->p_private;
vlc_meta_Merge( input_GetItem(p_input)->p_meta,
p_demux_meta->p_meta );
vlc_meta_Delete( p_demux_meta->p_meta );
module_Unneed( p_demux, p_meta );
p_sys->i_attachments = p_demux_meta->i_attachments;
p_sys->attachments = p_demux_meta->attachments;
}
free( p_demux->p_private );
} }
vlc_object_release( p_input ); free( p_demux->p_private );
} }
/* Initialize the Ogg physical bitstream parser */ /* Initialize the Ogg physical bitstream parser */
...@@ -254,6 +246,9 @@ static void Close( vlc_object_t *p_this ) ...@@ -254,6 +246,9 @@ static void Close( vlc_object_t *p_this )
Ogg_EndOfStream( p_demux ); Ogg_EndOfStream( p_demux );
var_Destroy( p_demux, "meta-preparsed" );
if( p_sys->meta ) vlc_meta_Delete( p_sys->meta );
int i; int i;
for( i = 0; i < p_sys->i_attachments; i++ ) for( i = 0; i < p_sys->i_attachments; i++ )
free( p_sys->attachments[i] ); free( p_sys->attachments[i] );
...@@ -406,9 +401,15 @@ static int Control( demux_t *p_demux, int i_query, va_list args ) ...@@ -406,9 +401,15 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
int i; int i;
input_attachment_t ***ppp_attach; input_attachment_t ***ppp_attach;
int *pi_int; int *pi_int;
vlc_meta_t *p_meta;
switch( i_query ) switch( i_query )
{ {
case DEMUX_GET_META:
p_meta = (vlc_meta_t *)va_arg( args, vlc_meta_t* );
vlc_meta_Merge( p_meta, p_sys->meta );
return VLC_SUCCESS;
case DEMUX_GET_TIME: case DEMUX_GET_TIME:
pi64 = (int64_t*)va_arg( args, int64_t * ); pi64 = (int64_t*)va_arg( args, int64_t * );
*pi64 = p_sys->i_pcr; *pi64 = p_sys->i_pcr;
......
...@@ -139,39 +139,6 @@ static int Open( vlc_object_t * p_this ) ...@@ -139,39 +139,6 @@ static int Open( vlc_object_t * p_this )
free( p_seektable ); free( p_seektable );
p_sys->i_start = stream_Tell( p_demux->s ); p_sys->i_start = stream_Tell( p_demux->s );
#if 0
/* Parse possible id3 header */
input_thread_t *p_input = (input_thread_t *)
vlc_object_find( p_demux, VLC_OBJECT_INPUT, FIND_PARENT );
if( p_input )
{
if( !( input_GetItem( p_input )->p_meta->i_status & ITEM_PREPARSED ) )
{
p_demux->p_private = malloc( sizeof( demux_meta_t ) );
if( !p_demux->p_private )
{
vlc_object_release( p_input );
return VLC_ENOMEM;
}
if( ( p_id3 = module_Need( p_demux, "meta reader", NULL, 0 ) ) )
{
demux_meta_t *p_demux_meta = (demux_meta_t *)p_demux->p_private;
p_sys->p_meta = p_demux_meta->p_meta;
p_demux->p_private = NULL;
module_Unneed( p_demux, p_id3 );
int i;
for( i = 0; i < p_demux_meta->i_attachments; i++ )
free( p_demux_meta->attachments[i] );
TAB_CLEAN( p_demux_meta->i_attachments,
p_demux_meta->attachments );
}
free( p_demux->p_private );
}
vlc_object_release( p_input );
}
if( !p_sys->p_meta )
p_sys->p_meta = vlc_meta_New();
#endif
return VLC_SUCCESS; return VLC_SUCCESS;
} }
...@@ -252,7 +219,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args ) ...@@ -252,7 +219,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
return VLC_SUCCESS; return VLC_SUCCESS;
} }
return VLC_EGENERIC; return VLC_EGENERIC;
case DEMUX_GET_LENGTH: case DEMUX_GET_LENGTH:
pi64 = (int64_t*)va_arg( args, int64_t * ); pi64 = (int64_t*)va_arg( args, int64_t * );
*pi64 = I64C(1000000) * p_sys->i_totalframes * TTA_FRAMETIME; *pi64 = I64C(1000000) * p_sys->i_totalframes * TTA_FRAMETIME;
...@@ -262,7 +229,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args ) ...@@ -262,7 +229,7 @@ static int Control( demux_t *p_demux, int i_query, va_list args )
pi64 = (int64_t*)va_arg( args, int64_t * ); pi64 = (int64_t*)va_arg( args, int64_t * );
*pi64 = I64C(1000000) * p_sys->i_currentframe * TTA_FRAMETIME; *pi64 = I64C(1000000) * p_sys->i_currentframe * TTA_FRAMETIME;
return VLC_SUCCESS; return VLC_SUCCESS;
default: default:
return VLC_EGENERIC; return VLC_EGENERIC;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment