vlc for android record
Posted: 13 Aug 2015 08:56
Hello everyone, would like to ask a question that I want to achieve the above vlc on android video functions, but there ready to record when an error in the file "es_out.c" in "EsOutSetRecord" approach, I want to use "sout_NewInstance", but at compile time prompt "error: undefined reference to'sout_NewInstance '", the errors when I define settings "ENABLE_SOUT" will be reported for the same is true of this "error: undefined reference to" an error but there are other ways also reported this error, as this would like to ask how to solve, thank you
Code: Select all
static int EsOutSetRecord( es_out_t *out, bool b_record )
{
es_out_sys_t *p_sys = out->p_sys;
input_thread_t *p_input = p_sys->p_input;
assert( ( b_record && !p_sys->p_sout_record ) || ( !b_record && p_sys->p_sout_record ) );
if( b_record )
{
char *psz_path = var_CreateGetNonEmptyString( p_input, "input-record-path" );
if( !psz_path )
{
if( var_CountChoices( p_input, "video-es" ) )
psz_path = config_GetUserDir( VLC_VIDEOS_DIR );
else if( var_CountChoices( p_input, "audio-es" ) )
psz_path = config_GetUserDir( VLC_MUSIC_DIR );
else
psz_path = config_GetUserDir( VLC_DOWNLOAD_DIR );
}
char *psz_sout = NULL; // TODO conf
if( !psz_sout && psz_path )
{
char *psz_file = input_CreateFilename( p_input, psz_path, INPUT_RECORD_PREFIX, NULL );
if( psz_file )
{
if( asprintf( &psz_sout, "#record{dst-prefix='%s'}", psz_file ) < 0 )
psz_sout = NULL;
free( psz_file );
}
}
free( psz_path );
if( !psz_sout )
return VLC_EGENERIC;
#ifdef ENABLE_SOUT
p_sys->p_sout_record = sout_NewInstance( p_input, psz_sout );
#endif
free( psz_sout );
if( !p_sys->p_sout_record )
return VLC_EGENERIC;
for( int i = 0; i < p_sys->i_es; i++ )
{
es_out_id_t *p_es = p_sys->es[i];
if( !p_es->p_dec || p_es->p_master )
continue;
p_es->p_dec_record = input_DecoderNew( p_input, &p_es->fmt, p_es->p_pgrm->p_clock, p_sys->p_sout_record );
if( p_es->p_dec_record && p_sys->b_buffering )
input_DecoderStartWait( p_es->p_dec_record );
}
}
else
{
for( int i = 0; i < p_sys->i_es; i++ )
{
es_out_id_t *p_es = p_sys->es[i];
if( !p_es->p_dec_record )
continue;
input_DecoderDelete( p_es->p_dec_record );
p_es->p_dec_record = NULL;
}
#ifdef ENABLE_SOUT
sout_DeleteInstance( p_sys->p_sout_record );
#endif
p_sys->p_sout_record = NULL;
}
return VLC_SUCCESS;
}