-/****************************************************************************
- * ARecord*: record stream functions
- ****************************************************************************/
-static int ARecordStart( stream_t *s, const char *psz_extension )
-{
- stream_sys_t *p_sys = s->p_sys;
-
- char *psz_file;
- FILE *f;
-
- /* */
- if( !psz_extension )
- psz_extension = "dat";
-
- /* Retreive path */
- char *psz_path = var_CreateGetString( s, "input-record-path" );
- if( !psz_path || *psz_path == '\0' )
- {
- free( psz_path );
- psz_path = strdup( config_GetHomeDir() );
- }
-
- if( !psz_path )
- return VLC_ENOMEM;
-
- /* Create file name
- * TODO allow prefix configuration */
- psz_file = input_CreateFilename( VLC_OBJECT(s), psz_path, INPUT_RECORD_PREFIX, psz_extension );
-
- free( psz_path );
-
- if( !psz_file )
- return VLC_ENOMEM;
-
- f = utf8_fopen( psz_file, "wb" );
- if( !f )
- {
- free( psz_file );
- return VLC_EGENERIC;
- }
- msg_Dbg( s, "Recording into %s", psz_file );
- free( psz_file );
-
- /* */
- p_sys->record.f = f;
- p_sys->record.b_active = true;
- p_sys->record.b_error = false;
- return VLC_SUCCESS;
-}
-static int ARecordStop( stream_t *s )
-{
- stream_sys_t *p_sys = s->p_sys;
-
- assert( p_sys->record.b_active );
-
- msg_Dbg( s, "Recording completed" );
- fclose( p_sys->record.f );
- p_sys->record.b_active = false;
- return VLC_SUCCESS;
-}
-
-static int ARecordSetState( stream_t *s, bool b_record, const char *psz_extension )
-{
- stream_sys_t *p_sys = s->p_sys;
-
- if( !!p_sys->record.b_active == !!b_record )
- return VLC_SUCCESS;
-
- if( b_record )
- return ARecordStart( s, psz_extension );
- else
- return ARecordStop( s );
-}
-static void ARecordWrite( stream_t *s, const uint8_t *p_buffer, size_t i_buffer )
-{
- stream_sys_t *p_sys = s->p_sys;
-
- assert( p_sys->record.b_active );
-
- if( i_buffer > 0 )
- {
- const bool b_previous_error = p_sys->record.b_error;
- const size_t i_written = fwrite( p_buffer, 1, i_buffer, p_sys->record.f );
-
- p_sys->record.b_error = i_written != i_buffer;
-
- /* TODO maybe a intf_UserError or something like that ? */
- if( p_sys->record.b_error && !b_previous_error )
- msg_Err( s, "Failed to record data (begin)" );
- else if( !p_sys->record.b_error && b_previous_error )
- msg_Err( s, "Failed to record data (end)" );
- }
-}
-