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 @@
* ninput.h
*****************************************************************************
* 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>
*
......@@ -26,17 +26,36 @@
#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
{
ES_OUT_SET_SELECT, /* arg1= es_out_id_t* arg2=vlc_bool_t */
ES_OUT_GET_SELECT /* arg1= es_out_id_t* arg2=vlc_bool_t* */
/* activate apply of mode */
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
{
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_pes)( es_out_t *, es_out_id_t *, pes_packet_t * );
void (*pf_del) ( es_out_t *, es_out_id_t * );
int (*pf_control)( es_out_t *, int i_query, va_list );
......@@ -56,11 +75,7 @@ static inline int es_out_Send( es_out_t *out, es_out_id_t *id,
{
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 )
{
return out->pf_control( out, i_query, args );
......
......@@ -2,7 +2,7 @@
* avi.c : AVI file Stream input module for vlc
*****************************************************************************
* 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>
*
* 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 )
avi_track_t *tk = p_sys->track[i_track];
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( p_sys->b_seekable)
......@@ -794,7 +794,7 @@ static int Demux_UnSeekable( input_thread_t *p_input )
avi_track_t *tk = p_sys->track[i_stream];
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 )
{
......
......@@ -2,7 +2,7 @@
* mkv.cpp : matroska demuxer
*****************************************************************************
* 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>
*
......@@ -1401,7 +1401,7 @@ static void BlockDecode( input_thread_t *p_input, KaxBlock *block, mtime_t i_pts
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 )
{
tk.b_inited = VLC_FALSE;
......
......@@ -2,7 +2,7 @@
* ogg.c : ogg stream input module for vlc
*****************************************************************************
* 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>
*
......@@ -359,7 +359,7 @@ static void Ogg_DecodePacket( input_thread_t *p_input,
}
/* 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 );
if( b_selected && !p_stream->b_activated )
......
......@@ -2,7 +2,7 @@
* rawdv.c : raw dv input module for vlc
*****************************************************************************
* 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>
*
......@@ -297,9 +297,9 @@ static int Demux( input_thread_t * p_input )
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 );
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_block->i_dts =
......
......@@ -2,7 +2,7 @@
* sub.c
*****************************************************************************
* 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>
*
......@@ -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;
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 )
{
p_sub->i_previously_selected = 1;
......
This diff is collapsed.
......@@ -4,7 +4,7 @@
* decoders.
*****************************************************************************
* 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>
*
......@@ -622,6 +622,8 @@ static int InitThread( input_thread_t * 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 */
p_input->p_access = module_Need( p_input, "access",
......@@ -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 ) ) )
{
/* 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 );
}
......@@ -767,6 +769,9 @@ static int InitThread( input_thread_t * p_input )
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;
}
......
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