Commit 46e872e4 authored by Laurent Aimar's avatar Laurent Aimar

* all: implement more es_out_* control, audio-channel and spu-channel are

 implemented.
parent fc1221c1
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* ninput.h * ninput.h
***************************************************************************** *****************************************************************************
* Copyright (C) 1999-2001 VideoLAN * Copyright (C) 1999-2001 VideoLAN
* $Id: ninput.h,v 1.18 2003/11/21 00:38:01 gbazin Exp $ * $Id: ninput.h,v 1.19 2003/11/27 04:11:40 fenrir Exp $
* *
* Authors: Laurent Aimar <fenrir@via.ecp.fr> * Authors: Laurent Aimar <fenrir@via.ecp.fr>
* *
...@@ -26,17 +26,36 @@ ...@@ -26,17 +26,36 @@
#include "vlc_es.h" #include "vlc_es.h"
enum es_out_mode_e
{
ES_OUT_MODE_NONE, /* don't select anything */
ES_OUT_MODE_ALL, /* eg for stream output */
ES_OUT_MODE_AUTO /* best audio/video or for input follow audio-channel, spu-channel */
};
enum es_out_query_e enum es_out_query_e
{ {
ES_OUT_SET_SELECT, /* arg1= es_out_id_t* arg2=vlc_bool_t */ /* activate apply of mode */
ES_OUT_GET_SELECT /* arg1= es_out_id_t* arg2=vlc_bool_t* */ ES_OUT_SET_ACTIVE, /* arg1= vlc_bool_t */
/* see if mode is currently aplied or not */
ES_OUT_GET_ACTIVE, /* arg1= vlc_bool_t* */
/* set/get mode */
ES_OUT_SET_MODE, /* arg1= int */
ES_OUT_GET_MODE, /* arg2= int* */
/* set es selected for the es category(audio/video/spu) */
ES_OUT_SET_ES, /* arg1= es_out_id_t* */
/* force selection/unselection of the ES (bypass current mode)*/
ES_OUT_SET_ES_STATE,/* arg1= es_out_id_t* arg2=vlc_bool_t */
ES_OUT_GET_ES_STATE,/* arg1= es_out_id_t* arg2=vlc_bool_t* */
}; };
struct es_out_t struct es_out_t
{ {
es_out_id_t *(*pf_add) ( es_out_t *, es_format_t * ); es_out_id_t *(*pf_add) ( es_out_t *, es_format_t * );
int (*pf_send) ( es_out_t *, es_out_id_t *, block_t * ); int (*pf_send) ( es_out_t *, es_out_id_t *, block_t * );
int (*pf_send_pes)( es_out_t *, es_out_id_t *, pes_packet_t * );
void (*pf_del) ( es_out_t *, es_out_id_t * ); void (*pf_del) ( es_out_t *, es_out_id_t * );
int (*pf_control)( es_out_t *, int i_query, va_list ); int (*pf_control)( es_out_t *, int i_query, va_list );
...@@ -52,15 +71,11 @@ static inline void es_out_Del( es_out_t *out, es_out_id_t *id ) ...@@ -52,15 +71,11 @@ static inline void es_out_Del( es_out_t *out, es_out_id_t *id )
out->pf_del( out, id ); out->pf_del( out, id );
} }
static inline int es_out_Send( es_out_t *out, es_out_id_t *id, static inline int es_out_Send( es_out_t *out, es_out_id_t *id,
block_t *p_block ) block_t *p_block )
{ {
return out->pf_send( out, id, p_block ); return out->pf_send( out, id, p_block );
} }
static inline int es_out_SendPES( es_out_t *out, es_out_id_t *id,
pes_packet_t *p_pes )
{
return out->pf_send_pes( out, id, p_pes );
}
static inline int es_out_vaControl( es_out_t *out, int i_query, va_list args ) static inline int es_out_vaControl( es_out_t *out, int i_query, va_list args )
{ {
return out->pf_control( out, i_query, args ); return out->pf_control( out, i_query, args );
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* avi.c : AVI file Stream input module for vlc * avi.c : AVI file Stream input module for vlc
***************************************************************************** *****************************************************************************
* Copyright (C) 2001 VideoLAN * Copyright (C) 2001 VideoLAN
* $Id: avi.c,v 1.77 2003/11/26 08:18:09 gbazin Exp $ * $Id: avi.c,v 1.78 2003/11/27 04:11:40 fenrir Exp $
* Authors: Laurent Aimar <fenrir@via.ecp.fr> * Authors: Laurent Aimar <fenrir@via.ecp.fr>
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
...@@ -469,7 +469,7 @@ static int Demux_Seekable( input_thread_t *p_input ) ...@@ -469,7 +469,7 @@ static int Demux_Seekable( input_thread_t *p_input )
avi_track_t *tk = p_sys->track[i_track]; avi_track_t *tk = p_sys->track[i_track];
vlc_bool_t b; vlc_bool_t b;
es_out_Control( p_input->p_es_out, ES_OUT_GET_SELECT, tk->p_es, &b ); es_out_Control( p_input->p_es_out, ES_OUT_GET_ES_STATE, tk->p_es, &b );
if( b && !tk->b_activated ) if( b && !tk->b_activated )
{ {
if( p_sys->b_seekable) if( p_sys->b_seekable)
...@@ -794,7 +794,7 @@ static int Demux_UnSeekable( input_thread_t *p_input ) ...@@ -794,7 +794,7 @@ static int Demux_UnSeekable( input_thread_t *p_input )
avi_track_t *tk = p_sys->track[i_stream]; avi_track_t *tk = p_sys->track[i_stream];
vlc_bool_t b; vlc_bool_t b;
es_out_Control( p_input->p_es_out, ES_OUT_GET_SELECT, tk->p_es, &b ); es_out_Control( p_input->p_es_out, ES_OUT_GET_ES_STATE, tk->p_es, &b );
if( b && tk->i_cat == VIDEO_ES ) if( b && tk->i_cat == VIDEO_ES )
{ {
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* mkv.cpp : matroska demuxer * mkv.cpp : matroska demuxer
***************************************************************************** *****************************************************************************
* Copyright (C) 2001 VideoLAN * Copyright (C) 2001 VideoLAN
* $Id: mkv.cpp,v 1.44 2003/11/23 13:15:27 gbazin Exp $ * $Id: mkv.cpp,v 1.45 2003/11/27 04:11:40 fenrir Exp $
* *
* Authors: Laurent Aimar <fenrir@via.ecp.fr> * Authors: Laurent Aimar <fenrir@via.ecp.fr>
* *
...@@ -1401,7 +1401,7 @@ static void BlockDecode( input_thread_t *p_input, KaxBlock *block, mtime_t i_pts ...@@ -1401,7 +1401,7 @@ static void BlockDecode( input_thread_t *p_input, KaxBlock *block, mtime_t i_pts
return; return;
} }
es_out_Control( p_input->p_es_out, ES_OUT_GET_SELECT, tk.p_es, &b ); es_out_Control( p_input->p_es_out, ES_OUT_GET_ES_STATE, tk.p_es, &b );
if( !b ) if( !b )
{ {
tk.b_inited = VLC_FALSE; tk.b_inited = VLC_FALSE;
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* ogg.c : ogg stream input module for vlc * ogg.c : ogg stream input module for vlc
***************************************************************************** *****************************************************************************
* Copyright (C) 2001-2003 VideoLAN * Copyright (C) 2001-2003 VideoLAN
* $Id: ogg.c,v 1.47 2003/11/26 08:18:09 gbazin Exp $ * $Id: ogg.c,v 1.48 2003/11/27 04:11:40 fenrir Exp $
* *
* Authors: Gildas Bazin <gbazin@netcourrier.com> * Authors: Gildas Bazin <gbazin@netcourrier.com>
* *
...@@ -359,7 +359,7 @@ static void Ogg_DecodePacket( input_thread_t *p_input, ...@@ -359,7 +359,7 @@ static void Ogg_DecodePacket( input_thread_t *p_input,
} }
/* Check the ES is selected */ /* Check the ES is selected */
es_out_Control( p_input->p_es_out, ES_OUT_GET_SELECT, es_out_Control( p_input->p_es_out, ES_OUT_GET_ES_STATE,
p_stream->p_es, &b_selected ); p_stream->p_es, &b_selected );
if( b_selected && !p_stream->b_activated ) if( b_selected && !p_stream->b_activated )
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* rawdv.c : raw dv input module for vlc * rawdv.c : raw dv input module for vlc
***************************************************************************** *****************************************************************************
* Copyright (C) 2001 VideoLAN * Copyright (C) 2001 VideoLAN
* $Id: rawdv.c,v 1.12 2003/11/24 19:19:02 fenrir Exp $ * $Id: rawdv.c,v 1.13 2003/11/27 04:11:40 fenrir Exp $
* *
* Authors: Gildas Bazin <gbazin@netcourrier.com> * Authors: Gildas Bazin <gbazin@netcourrier.com>
* *
...@@ -297,9 +297,9 @@ static int Demux( input_thread_t * p_input ) ...@@ -297,9 +297,9 @@ static int Demux( input_thread_t * p_input )
return 0; return 0;
} }
es_out_Control( p_input->p_es_out, ES_OUT_GET_SELECT, es_out_Control( p_input->p_es_out, ES_OUT_GET_ES_STATE,
p_sys->p_es_audio, &b_audio ); p_sys->p_es_audio, &b_audio );
es_out_Control( p_input->p_es_out, ES_OUT_GET_SELECT, es_out_Control( p_input->p_es_out, ES_OUT_GET_ES_STATE,
p_sys->p_es_video, &b_video ); p_sys->p_es_video, &b_video );
p_block->i_dts = p_block->i_dts =
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
* sub.c * sub.c
***************************************************************************** *****************************************************************************
* Copyright (C) 1999-2003 VideoLAN * Copyright (C) 1999-2003 VideoLAN
* $Id: sub.c,v 1.38 2003/11/21 00:38:01 gbazin Exp $ * $Id: sub.c,v 1.39 2003/11/27 04:11:40 fenrir Exp $
* *
* Authors: Laurent Aimar <fenrir@via.ecp.fr> * Authors: Laurent Aimar <fenrir@via.ecp.fr>
* *
...@@ -502,7 +502,7 @@ static int sub_demux( subtitle_demux_t *p_sub, mtime_t i_maxdate ) ...@@ -502,7 +502,7 @@ static int sub_demux( subtitle_demux_t *p_sub, mtime_t i_maxdate )
input_thread_t *p_input = p_sub->p_input; input_thread_t *p_input = p_sub->p_input;
vlc_bool_t b; vlc_bool_t b;
es_out_Control( p_input->p_es_out, ES_OUT_GET_SELECT, p_sub->p_es, &b ); es_out_Control( p_input->p_es_out, ES_OUT_GET_ES_STATE, p_sub->p_es, &b );
if( b && !p_sub->i_previously_selected ) if( b && !p_sub->i_previously_selected )
{ {
p_sub->i_previously_selected = 1; p_sub->i_previously_selected = 1;
......
This diff is collapsed.
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
* decoders. * decoders.
***************************************************************************** *****************************************************************************
* Copyright (C) 1998-2002 VideoLAN * Copyright (C) 1998-2002 VideoLAN
* $Id: input.c,v 1.264 2003/11/26 18:48:24 gbazin Exp $ * $Id: input.c,v 1.265 2003/11/27 04:11:40 fenrir Exp $
* *
* Authors: Christophe Massiot <massiot@via.ecp.fr> * Authors: Christophe Massiot <massiot@via.ecp.fr>
* *
...@@ -622,6 +622,8 @@ static int InitThread( input_thread_t * p_input ) ...@@ -622,6 +622,8 @@ static int InitThread( input_thread_t * p_input )
} }
p_input->p_es_out = input_EsOutNew( p_input ); p_input->p_es_out = input_EsOutNew( p_input );
es_out_Control( p_input->p_es_out, ES_OUT_SET_ACTIVE, VLC_FALSE );
es_out_Control( p_input->p_es_out, ES_OUT_SET_MODE, ES_OUT_MODE_NONE );
/* Find and open appropriate access module */ /* Find and open appropriate access module */
p_input->p_access = module_Need( p_input, "access", p_input->p_access = module_Need( p_input, "access",
...@@ -744,7 +746,7 @@ static int InitThread( input_thread_t * p_input ) ...@@ -744,7 +746,7 @@ static int InitThread( input_thread_t * p_input )
if( ( p_sub = subtitle_New( p_input, strdup(val.psz_string), i_microsecondperframe, 0 ) ) ) if( ( p_sub = subtitle_New( p_input, strdup(val.psz_string), i_microsecondperframe, 0 ) ) )
{ {
/* Select this ES by default */ /* Select this ES by default */
es_out_Control( p_input->p_es_out, ES_OUT_SET_SELECT, p_sub->p_es, VLC_TRUE ); es_out_Control( p_input->p_es_out, ES_OUT_SET_ES_STATE, p_sub->p_es, VLC_TRUE );
TAB_APPEND( p_input->p_sys->i_sub, p_input->p_sys->sub, p_sub ); TAB_APPEND( p_input->p_sys->i_sub, p_input->p_sys->sub, p_sub );
} }
...@@ -767,6 +769,9 @@ static int InitThread( input_thread_t * p_input ) ...@@ -767,6 +769,9 @@ static int InitThread( input_thread_t * p_input )
free(tmp); free(tmp);
} }
es_out_Control( p_input->p_es_out, ES_OUT_SET_ACTIVE, VLC_TRUE );
es_out_Control( p_input->p_es_out, ES_OUT_SET_MODE, ES_OUT_MODE_AUTO );
return VLC_SUCCESS; return VLC_SUCCESS;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment