X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fmelted%2Fmelted.c;h=85d638b8fda64c94bfea6738cee64d86a74153bd;hb=f773797d7d8fa640fa79202b6f9838a315d6be50;hp=24aac66c9653c0c32a886e47bb87cafd08f2cb25;hpb=27f0329aa8f434794f1f18e018fc3221e58b77a4;p=melted diff --git a/src/melted/melted.c b/src/melted/melted.c index 24aac66..85d638b 100644 --- a/src/melted/melted.c +++ b/src/melted/melted.c @@ -1,7 +1,7 @@ /* - * miracle.c -- MLT Video TCP Server + * melted.c -- MLT Video TCP Server * - * Copyright (C) 2002-2003 Ushodaya Enterprises Limited + * Copyright (C) 2002-2009 Ushodaya Enterprises Limited * Authors: * Dan Dennedy * Charles Yates @@ -31,22 +31,26 @@ #include #include +#include +#include /* Application header files */ -#include "miracle_server.h" -#include "miracle_log.h" +#include "melted_server.h" +#include "melted_log.h" +#include "melted_commands.h" +#include "melted_unit.h" -/** Our dv server. +/** Our server context. */ -static miracle_server server = NULL; +static melted_server server = NULL; /** atexit shutdown handler for the server. */ static void main_cleanup( ) { - miracle_server_close( server ); + melted_server_close( server ); } /** Report usage and exit. @@ -54,7 +58,7 @@ static void main_cleanup( ) void usage( char *app ) { - fprintf( stderr, "Usage: %s [-test] [-port NNNN]\n", app ); + fprintf( stderr, "Usage: %s [-test] [-port NNNN] [-c config-file]\n", app ); exit( 0 ); } @@ -66,8 +70,14 @@ int main( int argc, char **argv ) int error = 0; int index = 0; int background = 1; - struct timespec tm = { 5, 0 }; + struct timespec tm = { 1, 0 }; struct sched_param scp; + mvcp_status_t status; + struct { + int clip_index; + int is_logged; + } asrun[ MAX_UNITS ]; + const char *config_file = "/etc/melted.conf"; // Use realtime scheduling if possible memset( &scp, '\0', sizeof( scp ) ); @@ -78,16 +88,18 @@ int main( int argc, char **argv ) mlt_factory_init( NULL ); - server = miracle_server_init( argv[ 0 ] ); + server = melted_server_init( argv[ 0 ] ); for ( index = 1; index < argc; index ++ ) { if ( !strcmp( argv[ index ], "-port" ) ) - miracle_server_set_port( server, atoi( argv[ ++ index ] ) ); + melted_server_set_port( server, atoi( argv[ ++ index ] ) ); else if ( !strcmp( argv[ index ], "-proxy" ) ) - miracle_server_set_proxy( server, argv[ ++ index ] ); + melted_server_set_proxy( server, argv[ ++ index ] ); else if ( !strcmp( argv[ index ], "-test" ) ) background = 0; + else if ( !strcmp( argv[ index ], "-c" ) ) + config_file = argv[ ++ index ]; else usage( argv[ 0 ] ); } @@ -99,24 +111,54 @@ int main( int argc, char **argv ) if ( fork() ) return 0; setsid(); - miracle_log_init( log_syslog, LOG_INFO ); + melted_log_init( log_syslog, LOG_NOTICE ); } else { - miracle_log_init( log_stderr, LOG_DEBUG ); + melted_log_init( log_stderr, LOG_DEBUG ); } atexit( main_cleanup ); /* Set the config script */ - miracle_server_set_config( server, "/etc/miracle.conf" ); + melted_server_set_config( server, config_file ); /* Execute the server */ - error = miracle_server_execute( server ); + error = melted_server_execute( server ); + + /* Initialize the as-run log tracking */ + for ( index = 0; index < MAX_UNITS; index ++ ) + asrun[ index ].clip_index = -1; /* We need to wait until we're exited.. */ while ( !server->shutdown ) + { nanosleep( &tm, NULL ); + /* As-run logging */ + for ( index = 0; !error && index < MAX_UNITS; index ++ ) + { + melted_unit unit = melted_get_unit( index ); + + if ( unit && melted_unit_get_status( unit, &status ) == 0 ) + { + int length = status.length - 60; + + /* Reset the logging if needed */ + if ( status.clip_index != asrun[ index ].clip_index || status.position < length || status.status == unit_not_loaded ) + { + asrun[ index ].clip_index = status.clip_index; + asrun[ index ].is_logged = 0; + } + /* Log as-run only once when near the end */ + if ( ! asrun[ index ].is_logged && status.length > 0 && status.position > length ) + { + melted_log( LOG_NOTICE, "AS-RUN U%d \"%s\" len %d pos %d", index, status.clip, status.length, status.position ); + asrun[ index ].is_logged = 1; + } + } + } + } + return error; }