X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fvalerie%2Fvalerie.c;h=c76112d8e015e1f593371510c82f60ab0a06fd32;hb=4580365ba2f57f530aa4bdeb57788822fab09e2f;hp=f2731539e00d11f0d74c0316d589921e130d74f4;hpb=80a5c8297b313b09add80814a637a71ba9e0fa05;p=melted diff --git a/src/valerie/valerie.c b/src/valerie/valerie.c index f273153..c76112d 100644 --- a/src/valerie/valerie.c +++ b/src/valerie/valerie.c @@ -145,6 +145,68 @@ valerie_error_code valerie_execute( valerie this, size_t size, char *format, ... return error; } +/** Execute a command. +*/ + +valerie_error_code valerie_receive( valerie this, char *doc, size_t size, char *format, ... ) +{ + valerie_error_code error = valerie_server_unavailable; + char *command = malloc( size ); + if ( this != NULL && command != NULL ) + { + va_list list; + va_start( list, format ); + if ( vsnprintf( command, size, format, list ) != 0 ) + { + valerie_response response = valerie_parser_received( this->parser, command, doc ); + valerie_set_last_response( this, response ); + error = valerie_get_error_code( this, response ); + } + else + { + error = valerie_invalid_command; + } + va_end( list ); + } + else + { + error = valerie_malloc_failed; + } + free( command ); + return error; +} + +/** Execute a command. +*/ + +valerie_error_code valerie_push( valerie this, mlt_service service, size_t size, char *format, ... ) +{ + valerie_error_code error = valerie_server_unavailable; + char *command = malloc( size ); + if ( this != NULL && command != NULL ) + { + va_list list; + va_start( list, format ); + if ( vsnprintf( command, size, format, list ) != 0 ) + { + valerie_response response = valerie_parser_push( this->parser, command, service ); + valerie_set_last_response( this, response ); + error = valerie_get_error_code( this, response ); + } + else + { + error = valerie_invalid_command; + } + va_end( list ); + } + else + { + error = valerie_malloc_failed; + } + free( command ); + return error; +} + /** Set a global property. */ @@ -184,7 +246,7 @@ valerie_error_code valerie_unit_add( valerie this, char *guid, int *unit ) if ( error == valerie_ok ) { int length = valerie_response_count( this->last_response ); - char *line = valerie_response_get_line( this->last_response, length - 2 ); + char *line = valerie_response_get_line( this->last_response, length - 1 ); if ( line == NULL || sscanf( line, "U%d", unit ) != 1 ) error = valerie_unit_creation_failed; } @@ -223,9 +285,9 @@ static void valerie_interpret_clip_offset( char *output, valerie_clip_offset off /** Load a file on the specified unit with the specified in/out points. */ -valerie_error_code valerie_unit_load_clipped( valerie this, int unit, char *file, int64_t in, int64_t out ) +valerie_error_code valerie_unit_load_clipped( valerie this, int unit, char *file, int32_t in, int32_t out ) { - return valerie_execute( this, 10240, "LOAD U%d \"%s\" %lld %lld", unit, file, in, out ); + return valerie_execute( this, 10240, "LOAD U%d \"%s\" %d %d", unit, file, in, out ); } /** Load a file on the specified unit at the end of the current pump. @@ -239,17 +301,33 @@ valerie_error_code valerie_unit_load_back( valerie this, int unit, char *file ) /** Load a file on the specified unit at the end of the pump with the specified in/out points. */ -valerie_error_code valerie_unit_load_back_clipped( valerie this, int unit, char *file, int64_t in, int64_t out ) +valerie_error_code valerie_unit_load_back_clipped( valerie this, int unit, char *file, int32_t in, int32_t out ) { - return valerie_execute( this, 10240, "LOAD U%d \"!%s\" %lld %lld", unit, file, in, out ); + return valerie_execute( this, 10240, "LOAD U%d \"!%s\" %d %d", unit, file, in, out ); } /** Append a file on the specified unit. */ -valerie_error_code valerie_unit_append( valerie this, int unit, char *file, int64_t in, int64_t out ) +valerie_error_code valerie_unit_append( valerie this, int unit, char *file, int32_t in, int32_t out ) +{ + return valerie_execute( this, 10240, "APND U%d \"%s\" %d %d", unit, file, in, out ); +} + +/** Push a service on to a unit. +*/ + +valerie_error_code valerie_unit_receive( valerie this, int unit, char *command, char *doc ) +{ + return valerie_receive( this, doc, 10240, "PUSH U%d %s", unit, command ); +} + +/** Push a service on to a unit. +*/ + +valerie_error_code valerie_unit_push( valerie this, int unit, char *command, mlt_service service ) { - return valerie_execute( this, 10240, "APND U%d \"%s\" %lld %lld", unit, file, in, out ); + return valerie_push( this, service, 10240, "PUSH U%d %s", unit, command ); } /** Clean the unit - this function removes all but the currently playing clip. @@ -260,6 +338,14 @@ valerie_error_code valerie_unit_clean( valerie this, int unit ) return valerie_execute( this, 1024, "CLEAN U%d", unit ); } +/** Clear the unit - this function removes all clips. +*/ + +valerie_error_code valerie_unit_clear( valerie this, int unit ) +{ + return valerie_execute( this, 1024, "CLEAR U%d", unit ); +} + /** Move clips on the units playlist. */ @@ -293,11 +379,11 @@ valerie_error_code valerie_unit_remove_current_clip( valerie this, int unit ) /** Insert clip at the specified position. */ -valerie_error_code valerie_unit_clip_insert( valerie this, int unit, valerie_clip_offset offset, int clip, char *file, int64_t in, int64_t out ) +valerie_error_code valerie_unit_clip_insert( valerie this, int unit, valerie_clip_offset offset, int clip, char *file, int32_t in, int32_t out ) { char temp[ 100 ]; valerie_interpret_clip_offset( temp, offset, clip ); - return valerie_execute( this, 1024, "INSERT U%d %s %s %lld %lld", unit, file, temp, in, out ); + return valerie_execute( this, 1024, "INSERT U%d \"%s\" %s %d %d", unit, file, temp, in, out ); } /** Play the unit at normal speed. @@ -351,63 +437,63 @@ valerie_error_code valerie_unit_fast_forward( valerie this, int unit ) /** Step by the number of frames on the specified unit. */ -valerie_error_code valerie_unit_step( valerie this, int unit, int64_t step ) +valerie_error_code valerie_unit_step( valerie this, int unit, int32_t step ) { - return valerie_execute( this, 1024, "STEP U%d %lld", unit, step ); + return valerie_execute( this, 1024, "STEP U%d %d", unit, step ); } /** Goto the specified frame on the specified unit. */ -valerie_error_code valerie_unit_goto( valerie this, int unit, int64_t position ) +valerie_error_code valerie_unit_goto( valerie this, int unit, int32_t position ) { - return valerie_execute( this, 1024, "GOTO U%d %lld", unit, position ); + return valerie_execute( this, 1024, "GOTO U%d %d", unit, position ); } /** Goto the specified frame in the clip on the specified unit. */ -valerie_error_code valerie_unit_clip_goto( valerie this, int unit, valerie_clip_offset offset, int clip, int64_t position ) +valerie_error_code valerie_unit_clip_goto( valerie this, int unit, valerie_clip_offset offset, int clip, int32_t position ) { char temp[ 100 ]; valerie_interpret_clip_offset( temp, offset, clip ); - return valerie_execute( this, 1024, "GOTO U%d %lld %s", unit, position, temp ); + return valerie_execute( this, 1024, "GOTO U%d %d %s", unit, position, temp ); } /** Set the in point of the loaded file on the specified unit. */ -valerie_error_code valerie_unit_set_in( valerie this, int unit, int64_t in ) +valerie_error_code valerie_unit_set_in( valerie this, int unit, int32_t in ) { - return valerie_execute( this, 1024, "SIN U%d %lld", unit, in ); + return valerie_execute( this, 1024, "SIN U%d %d", unit, in ); } /** Set the in point of the clip on the specified unit. */ -valerie_error_code valerie_unit_clip_set_in( valerie this, int unit, valerie_clip_offset offset, int clip, int64_t in ) +valerie_error_code valerie_unit_clip_set_in( valerie this, int unit, valerie_clip_offset offset, int clip, int32_t in ) { char temp[ 100 ]; valerie_interpret_clip_offset( temp, offset, clip ); - return valerie_execute( this, 1024, "SIN U%d %lld %s", unit, in, temp ); + return valerie_execute( this, 1024, "SIN U%d %d %s", unit, in, temp ); } /** Set the out point of the loaded file on the specified unit. */ -valerie_error_code valerie_unit_set_out( valerie this, int unit, int64_t out ) +valerie_error_code valerie_unit_set_out( valerie this, int unit, int32_t out ) { - return valerie_execute( this, 1024, "SOUT U%d %lld", unit, out ); + return valerie_execute( this, 1024, "SOUT U%d %d", unit, out ); } /** Set the out point of the clip on the specified unit. */ -valerie_error_code valerie_unit_clip_set_out( valerie this, int unit, valerie_clip_offset offset, int clip, int64_t in ) +valerie_error_code valerie_unit_clip_set_out( valerie this, int unit, valerie_clip_offset offset, int clip, int32_t in ) { char temp[ 100 ]; valerie_interpret_clip_offset( temp, offset, clip ); - return valerie_execute( this, 1024, "SOUT U%d %lld %s", unit, in, temp ); + return valerie_execute( this, 1024, "SOUT U%d %d %s", unit, in, temp ); } /** Clear the in point of the loaded file on the specified unit.