/*
- * 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 <dan@dennedy.org>
* Charles Yates <charles.yates@pandora.be>
#include <sched.h>
#include <framework/mlt.h>
+#include <mvcp/mvcp_notifier.h>
+#include <mvcp/mvcp_status.h>
/* 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.
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 );
}
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 ) );
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 ] );
}
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;
}