#ifndef VLC_CODEC_H
#define VLC_CODEC_H 1
-#include <vlc_atomic.h>
#include <vlc_block.h>
#include <vlc_es.h>
#include <vlc_picture.h>
/* Private structure for the owner of the decoder */
decoder_owner_sys_t *p_owner;
- atomic_bool b_error;
+ bool b_error;
};
/**
/* force selection/unselection of the ES (bypass current mode) */
ES_OUT_SET_ES_STATE,/* arg1= es_out_id_t* arg2=bool */
- ES_OUT_GET_ES_STATE,/* arg1= es_out_id_t* arg2=bool* arg3=bool* res=can fail
- * arg2 is true if es has been selected, false otherwise,
- * arg3 is true if es has an error, false otherwise */
+ ES_OUT_GET_ES_STATE,/* arg1= es_out_id_t* arg2=bool* */
/* */
ES_OUT_SET_GROUP, /* arg1= int */
ERROR_S,
} input_state_e;
-/* same order as es_out_state_es_e enum in vlc_es_out.h */
-typedef enum input_es_state_e
-{
- INPUT_ES_STATE_DISABLED = 0,
- INPUT_ES_STATE_ENABLED,
- INPUT_ES_STATE_ERROR,
-} input_es_state_e;
-
/**
* Input rate.
*
/* External clock managments */
INPUT_GET_PCR_SYSTEM, /* arg1=mtime_t *, arg2=mtime_t * res=can fail */
INPUT_MODIFY_PCR_SYSTEM,/* arg1=int absolute, arg2=mtime_t res=can fail */
-
- /* Ask status of main ES objects */
- INPUT_GET_ES_STATE, /* arg1=int (AUDIO/VIDEO/SPU_ES), arg2=es_out state * res=can fail */
};
/** @}*/
{
return input_Control( p_input, INPUT_GET_PCR_SYSTEM, pi_system, pi_delay );
}
-
-/**
- * It will return the state of the current selected elementary streams for this input.
- */
-static inline input_es_state_e input_GetEsState( input_thread_t *p_input, const int i_cat )
-{
- input_es_state_e state = INPUT_ES_STATE_DISABLED;
- input_Control( p_input, INPUT_GET_ES_STATE, i_cat, &state );
- return state;
-}
-
/**
* \see input_clock_ChangeSystemOrigin
*/
case STATE_SEND_DATA:
if( !(p_buf = GetOutBuffer( p_dec, &p_out_buffer )) )
{
- //atomic_store( &p_dec->b_error, true );
+ //p_dec->b_error = true;
return NULL;
}
const char *name = av_get_pix_fmt_name( p_sys->p_context->pix_fmt );
msg_Err( p_dec, "Unsupported decoded output format %d (%s)",
p_sys->p_context->pix_fmt, name ? name : "unknown" );
- atomic_store( &p_dec->b_error, true );
+ p_dec->b_error = 1;
}
}
if( !(p_buf = GetOutBuffer( p_dec, &p_out_buffer )) )
{
- //atomic_store( &p_dec->b_error, true );
+ //p_dec->b_error = true;
return NULL;
}
case STATE_SEND_DATA:
if( !(p_buf = GetOutBuffer( p_dec, &p_out_buffer )) )
{
- //atomic_store( &p_dec->b_error, true );
+ //p_dec->b_error = true;
return NULL;
}
if( OpenAudio( p_dec ) )
{
/* Fatal */
- atomic_store( &p_dec->b_error, true );
+ p_dec->b_error = true;
return NULL;
}
if( OpenVideo( p_dec ) )
{
/* Fatal */
- atomic_store( &p_dec->b_error, true );
+ p_dec->b_error = true;
return NULL;
}
p_sys = p_dec->p_sys;
p_out_buffer = block_Alloc(p_sys->i_frame_size);
if (!p_out_buffer) {
- //atomic_store( &p_dec->b_error, true );
+ //p_dec->b_error = true;
return NULL;
}
p_buf = p_out_buffer->p_buffer;
#include "resource.h"
#include "es_out.h"
-typedef enum input_es_state_e input_es_state_e;
static void UpdateBookmarksOption( input_thread_t * );
return es_out_ControlModifyPcrSystem( p_input->p->p_es_out_display, b_absolute, i_system );
}
- case INPUT_GET_ES_STATE:
- {
- int i_cat = (int)va_arg( args, int );
- input_es_state_e *pi_state = (input_es_state_e *)va_arg( args, input_es_state_e* );
-
- bool b_selected = false, b_error = false;
- int ret = es_out_GetEsState( p_input->p->p_es_out_display, i_cat, &b_selected, &b_error);
- if (ret != VLC_SUCCESS)
- {
- *pi_state = INPUT_ES_STATE_DISABLED;
- return VLC_EGENERIC;
- }
-
- *pi_state = b_error ? INPUT_ES_STATE_ERROR :
- ( b_selected ? INPUT_ES_STATE_ENABLED : INPUT_ES_STATE_DISABLED );
- return ret;
- }
-
default:
msg_Err( p_input, "unknown query in input_vaControl" );
return VLC_EGENERIC;
input_SendEventBookmark( p_input );
}
+
p_dec->pf_get_cc = NULL;
p_dec->pf_packetize = NULL;
- atomic_init( &p_dec->b_error, false );
-
/* Initialize the decoder */
p_dec->p_module = NULL;
{
msg_Err( p_dec, "cannot create packetizer output (%4.4s)",
(char *)&p_owner->sout.i_codec );
- atomic_store( &p_dec->b_error, true );
+ p_dec->b_error = true;
block_ChainRelease(p_sout_block);
break;
decoder_owner_sys_t *p_owner = (decoder_owner_sys_t *)p_dec->p_owner;
const bool b_flush_request = p_block && (p_block->i_flags & BLOCK_FLAG_CORE_FLUSH);
- if( atomic_load( &p_dec->b_error ) )
+ if( p_dec->b_error )
{
if( p_block )
block_Release( p_block );
else
{
msg_Err( p_dec, "unknown ES format" );
- atomic_store( &p_dec->b_error, true );
+ p_dec->b_error = true;
}
}
if( p_aout == NULL )
{
msg_Err( p_dec, "failed to create audio output" );
- atomic_store( &p_dec->b_error, true );
+ p_dec->b_error = true;
return -1;
}
if( p_vout == NULL )
{
msg_Err( p_dec, "failed to create video output" );
- atomic_store( &p_dec->b_error, true );
+ p_dec->b_error = true;
return NULL;
}
}
*/
for( ;; )
{
- if( DecoderIsExitRequested( p_dec ) || atomic_load( &p_dec->b_error ) )
+ if( DecoderIsExitRequested( p_dec ) || p_dec->b_error )
return NULL;
picture_t *p_picture = vout_GetPicture( p_owner->p_vout );
while( i_attempts-- )
{
- if( DecoderIsExitRequested( p_dec ) || atomic_load( &p_dec->b_error ) )
+ if( DecoderIsExitRequested( p_dec ) || p_dec->b_error )
break;
p_vout = input_resource_HoldVout( p_owner->p_resource );
p_sys->b_active = false;
p_sys->i_mode = ES_OUT_MODE_NONE;
+
TAB_INIT( p_sys->i_pgrm, p_sys->pgrm );
TAB_INIT( p_sys->i_es, p_sys->es );
return out;
}
-int es_out_GetEsState( es_out_t *out, const int i_cat, bool *b_selected, bool *b_error)
-{
- if( !out && !out->p_sys )
- return VLC_EGENERIC;
-
- es_out_id_t *p_es;
- switch( i_cat )
- {
- case VIDEO_ES:
- p_es = out->p_sys->p_es_video;
- break;
- case AUDIO_ES:
- p_es = out->p_sys->p_es_audio;
- break;
- case SPU_ES:
- p_es = out->p_sys->p_es_sub;
- break;
- default:
- p_es = NULL;
- return VLC_EGENERIC;
- }
- if( !p_es )
- return VLC_EGENERIC;
-
- return es_out_Control( out, ES_OUT_GET_ES_STATE, p_es, b_selected, b_error );
-}
-
/*****************************************************************************
*
*****************************************************************************/
p_sys->i_preroll_end = -1;
}
+
+
static void EsOutDecodersStopBuffering( es_out_t *out, bool b_forced )
{
es_out_sys_t *p_sys = out->p_sys;
EsOutDecoderChangeDelay( out, p_es );
}
-
static void EsDestroyDecoder( es_out_t *out, es_out_id_t *p_es )
{
VLC_UNUSED(out);
{
es_out_id_t *es = va_arg( args, es_out_id_t * );
bool *pb = va_arg( args, bool * );
- bool *pb_error = va_arg( args, bool *);
*pb = EsIsSelected( es );
- *pb_error = (es->p_dec ? atomic_load( &es->p_dec->b_error ) : false);
return VLC_SUCCESS;
}
return VLC_EGENERIC;
}
}
-
static int EsOutControl( es_out_t *out, int i_query, va_list args )
{
es_out_sys_t *p_sys = out->p_sys;
assert( !i_ret );
}
-int es_out_GetEsState( es_out_t *p_out, const int i_cat, bool *b_selected, bool *b_error);
-
es_out_t *input_EsOutNew( input_thread_t *, int i_rate );
#endif
{
es_out_id_t *p_es = (es_out_id_t*)va_arg( args, es_out_id_t * );
bool *pb_enabled = (bool*)va_arg( args, bool* );
- bool *pb_error = (bool*)va_arg( args, bool* );
if( p_sys->b_delayed )
{
*pb_enabled = true;
return VLC_SUCCESS;
}
- return es_out_Control( p_sys->p_out, ES_OUT_GET_ES_STATE, p_es->p_es,
- pb_enabled, pb_error );
+ return es_out_Control( p_sys->p_out, ES_OUT_GET_ES_STATE, p_es->p_es, pb_enabled );
}
/* Special internal input control */
case ES_OUT_GET_EMPTY: