Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
videolan
vlc
Commits
41c38426
Commit
41c38426
authored
May 29, 2004
by
Laurent Aimar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* all: begin to introduce access_t (nothing working yet).
parent
6cdc9671
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
333 additions
and
25 deletions
+333
-25
include/input_ext-intf.h
include/input_ext-intf.h
+1
-0
include/ninput.h
include/ninput.h
+77
-3
include/vlc_common.h
include/vlc_common.h
+1
-0
include/vlc_objects.h
include/vlc_objects.h
+1
-0
src/input/access.c
src/input/access.c
+204
-0
src/input/es_out.c
src/input/es_out.c
+44
-22
src/misc/messages.c
src/misc/messages.c
+1
-0
src/misc/objects.c
src/misc/objects.c
+4
-0
No files found.
include/input_ext-intf.h
View file @
41c38426
...
@@ -300,6 +300,7 @@ struct input_thread_t
...
@@ -300,6 +300,7 @@ struct input_thread_t
int
(
*
pf_set_program
)(
input_thread_t
*
,
pgrm_descriptor_t
*
);
int
(
*
pf_set_program
)(
input_thread_t
*
,
pgrm_descriptor_t
*
);
int
(
*
pf_set_area
)(
input_thread_t
*
,
input_area_t
*
);
int
(
*
pf_set_area
)(
input_thread_t
*
,
input_area_t
*
);
void
(
*
pf_seek
)
(
input_thread_t
*
,
off_t
);
void
(
*
pf_seek
)
(
input_thread_t
*
,
off_t
);
int
(
*
pf_access_control
)(
input_thread_t
*
,
int
,
va_list
);
access_sys_t
*
p_access_data
;
access_sys_t
*
p_access_data
;
size_t
i_mtu
;
size_t
i_mtu
;
int
i_pts_delay
;
/* internal caching */
int
i_pts_delay
;
/* internal caching */
...
...
include/ninput.h
View file @
41c38426
...
@@ -51,10 +51,15 @@ enum es_out_query_e
...
@@ -51,10 +51,15 @@ enum es_out_query_e
ES_OUT_SET_ES_STATE
,
/* arg1= es_out_id_t* arg2=vlc_bool_t */
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* */
ES_OUT_GET_ES_STATE
,
/* arg1= es_out_id_t* arg2=vlc_bool_t* */
/*
XXX XXX XXX Don't use them YET !!!
*/
/*
PCR handling, by default dts/pts will be automatically computed using thoses PCR
*/
ES_OUT_SET_PCR
,
/* arg1=int64_t i_pcr(microsecond!) (using default group 0)*/
ES_OUT_SET_PCR
,
/* arg1=int64_t i_pcr(microsecond!) (using default group 0)*/
ES_OUT_SET_GROUP_PCR
,
/* arg1= int i_group, arg2=int64_t i_pcr(microsecond!)*/
ES_OUT_SET_GROUP_PCR
,
/* arg1= int i_group, arg2=int64_t i_pcr(microsecond!)*/
ES_OUT_RESET_PCR
/* no arg */
ES_OUT_RESET_PCR
,
/* no arg */
/* ByBass automatic stream timestamp to absolute timestamp using pcr (and disable the automatic mode XXX:for all groups) */
ES_OUT_CONVERT_TIMESTAMP
,
/* arg1=int64_t *pi_ts(microsecond!) */
ES_OUT_CONVERT_GROUP_TIMESTAMP
,
/* arg1=int i_group, arg2=int64_t *pi_ts(microsecond!)*/
};
};
struct
es_out_t
struct
es_out_t
...
@@ -95,6 +100,71 @@ static inline int es_out_Control( es_out_t *out, int i_query, ... )
...
@@ -95,6 +100,71 @@ static inline int es_out_Control( es_out_t *out, int i_query, ... )
va_end
(
args
);
va_end
(
args
);
return
i_result
;
return
i_result
;
}
}
/**
* \defgroup access Access
* @{
*/
enum
access_query_e
{
/* capabilities */
ACCESS_CAN_FASTSEEK
,
/* arg1= vlc_bool_t* cannot fail */
ACCESS_CAN_PAUSE
,
/* arg1= vlc_bool_t* cannot fail */
ACCESS_CAN_CONTROL_PACE
,
/* arg1= vlc_bool_t* cannot fail */
/* */
ACCESS_GET_MTU
,
/* arg1= int* cannot fail (0 if no sense) */
ACCESS_GET_SIZE
,
/* arg1= int64_t* cannot fail (0 if unknown) */
ACCESS_GET_POS
,
/* arg1= int64_t* cannot fail */
/* */
ACCESS_SET_PAUSE_STATE
/* arg1= vlc_bool_t can fail if unsuported */
};
struct
access_t
{
VLC_COMMON_MEMBERS
/* Module properties */
module_t
*
p_module
;
/* Access name (empty if non forced) */
char
*
psz_access
;
char
*
psz_path
;
/* Access can fill this entry to force a deluxer */
char
*
psz_demux
;
/* set by access (only one of pf_read/pf_block may be filled) */
int
(
*
pf_read
)
(
access_t
*
,
uint8_t
*
,
int
);
/* Return -1 if no data yet, 0 if no more data, else real data read */
block_t
*
(
*
pf_block
)(
access_t
*
);
/* return a block of data in his 'natural' size */
int
(
*
pf_seek
)
(
access_t
*
,
int64_t
);
int
(
*
pf_control
)(
access_t
*
,
int
i_query
,
va_list
args
);
access_sys_t
*
p_sys
;
};
#define access2_New( a, b, c, d ) __acess2_New(VLC_OBJECT(a), b, c, d)
VLC_EXPORT
(
demux_t
*
,
__access2_New
,
(
vlc_object_t
*
p_obj
,
char
*
psz_mrl
,
stream_t
*
s
,
es_out_t
*
out
)
);
VLC_EXPORT
(
void
,
access2_Delete
,
(
demux_t
*
)
);
static
inline
int
access2_vaControl
(
access_t
*
p_access
,
int
i_query
,
va_list
args
)
{
return
p_access
->
pf_control
(
p_access
,
i_query
,
args
);
}
static
inline
int
access2_Control
(
access_t
*
p_access
,
int
i_query
,
...
)
{
va_list
args
;
int
i_result
;
va_start
(
args
,
i_query
);
i_result
=
access2_vaControl
(
p_access
,
i_query
,
args
);
va_end
(
args
);
return
i_result
;
}
/**
* @}
*/
/**
/**
* \defgroup stream Stream
* \defgroup stream Stream
...
@@ -328,8 +398,12 @@ VLC_EXPORT( int, demux_Control, ( input_thread_t *, int i_query, ... )
...
@@ -328,8 +398,12 @@ VLC_EXPORT( int, demux_Control, ( input_thread_t *, int i_query, ... )
VLC_EXPORT
(
int
,
demux_vaControlDefault
,
(
input_thread_t
*
,
int
i_query
,
va_list
)
);
VLC_EXPORT
(
int
,
demux_vaControlDefault
,
(
input_thread_t
*
,
int
i_query
,
va_list
)
);
/* Access */
VLC_EXPORT
(
int
,
access_vaControl
,
(
input_thread_t
*
,
int
i_query
,
va_list
)
);
VLC_EXPORT
(
int
,
access_Control
,
(
input_thread_t
*
,
int
i_query
,
...
)
);
VLC_EXPORT
(
int
,
access_vaControlDefault
,(
input_thread_t
*
,
int
i_query
,
va_list
)
);
/* New demux arch: don't touch that */
/* stream_t *s could be null and then it mean a access+demux in one */
/* stream_t *s could be null and then it mean a access+demux in one */
#define demux2_New( a, b, c, d ) __demux2_New(VLC_OBJECT(a), b, c, d)
#define demux2_New( a, b, c, d ) __demux2_New(VLC_OBJECT(a), b, c, d)
VLC_EXPORT
(
demux_t
*
,
__demux2_New
,
(
vlc_object_t
*
p_obj
,
char
*
psz_mrl
,
stream_t
*
s
,
es_out_t
*
out
)
);
VLC_EXPORT
(
demux_t
*
,
__demux2_New
,
(
vlc_object_t
*
p_obj
,
char
*
psz_mrl
,
stream_t
*
s
,
es_out_t
*
out
)
);
...
...
include/vlc_common.h
View file @
41c38426
...
@@ -240,6 +240,7 @@ typedef struct es_out_t es_out_t;
...
@@ -240,6 +240,7 @@ typedef struct es_out_t es_out_t;
typedef
struct
es_out_id_t
es_out_id_t
;
typedef
struct
es_out_id_t
es_out_id_t
;
typedef
struct
es_out_sys_t
es_out_sys_t
;
typedef
struct
es_out_sys_t
es_out_sys_t
;
typedef
struct
demux_t
demux_t
;
typedef
struct
demux_t
demux_t
;
typedef
struct
access_t
access_t
;
/* Audio */
/* Audio */
typedef
struct
aout_instance_t
aout_instance_t
;
typedef
struct
aout_instance_t
aout_instance_t
;
...
...
include/vlc_objects.h
View file @
41c38426
...
@@ -50,6 +50,7 @@
...
@@ -50,6 +50,7 @@
#define VLC_OBJECT_VLM (-16)
#define VLC_OBJECT_VLM (-16)
#define VLC_OBJECT_ANNOUNCE (-17)
#define VLC_OBJECT_ANNOUNCE (-17)
#define VLC_OBJECT_DEMUX (-18)
#define VLC_OBJECT_DEMUX (-18)
#define VLC_OBJECT_ACCESS (-19)
#define VLC_OBJECT_GENERIC (-666)
#define VLC_OBJECT_GENERIC (-666)
...
...
src/input/access.c
0 → 100644
View file @
41c38426
/*****************************************************************************
* access.c
*****************************************************************************
* Copyright (C) 1999-2004 VideoLAN
* $Id: demux.c 7546 2004-04-29 13:53:29Z gbazin $
*
* Author: Laurent Aimar <fenrir@via.ecp.fr>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111, USA.
*****************************************************************************/
#include <stdlib.h>
#include <vlc/vlc.h>
#include <vlc/input.h>
#include "ninput.h"
int
access_vaControl
(
input_thread_t
*
p_input
,
int
i_query
,
va_list
args
)
{
if
(
p_input
->
pf_access_control
)
{
return
p_input
->
pf_access_control
(
p_input
,
i_query
,
args
);
}
return
VLC_EGENERIC
;
}
int
access_Control
(
input_thread_t
*
p_input
,
int
i_query
,
...
)
{
va_list
args
;
int
i_result
;
va_start
(
args
,
i_query
);
i_result
=
access_vaControl
(
p_input
,
i_query
,
args
);
va_end
(
args
);
return
i_result
;
}
int
access_vaControlDefault
(
input_thread_t
*
p_input
,
int
i_query
,
va_list
args
)
{
return
VLC_EGENERIC
;
}
/*****************************************************************************
* access2_New:
*****************************************************************************/
access_t
*
__access2_New
(
vlc_object_t
*
p_obj
,
char
*
psz_mrl
,
stream_t
*
s
,
es_out_t
*
out
)
{
msg_Err
(
p_obj
,
"access2_New not yet implemented"
);
return
NULL
;
#if 0
access_t *p_access = vlc_object_create( p_obj, VLC_OBJECT_ACCESS );
char *psz_dup = strdup( psz_mrl ? psz_mrl : "" );
char *psz = strchr( psz_dup, ':' );
char *psz_module;
if( p_demux == NULL )
{
free( psz_dup );
return NULL;
}
/* Parse URL */
p_demux->psz_access = NULL;
p_demux->psz_demux = NULL;
p_demux->psz_path = NULL;
if( psz )
{
*psz++ = '\0';
if( psz[0] == '/' && psz[1] == '/' )
{
psz += 2;
}
p_demux->psz_path = strdup( psz );
psz = strchr( psz_dup, '/' );
if( psz )
{
*psz++ = '\0';
p_demux->psz_access = strdup( psz_dup );
p_demux->psz_demux = strdup( psz );
}
}
else
{
p_demux->psz_path = strdup( psz_mrl );
}
free( psz_dup );
if( p_demux->psz_access == NULL )
{
p_demux->psz_access = strdup( "" );
}
if( p_demux->psz_demux == NULL )
{
p_demux->psz_demux = strdup( "" );
}
if( p_demux->psz_path == NULL )
{
p_demux->psz_path = strdup( "" );
}
msg_Dbg( p_obj, "demux2_New: '%s' -> access='%s' demux='%s' path='%s'",
psz_mrl,
p_demux->psz_access, p_demux->psz_demux, p_demux->psz_path );
p_demux->s = s;
p_demux->out = out;
p_demux->pf_demux = NULL;
p_demux->pf_control = NULL;
p_demux->p_sys = NULL;
psz_module = p_demux->psz_demux;
if( *psz_module == '\0' && strrchr( p_demux->psz_path, '.' ) )
{
/* XXX: add only file without any problem here and with strong detection.
* - no .mp3, .a52, ... (aac is added as it works only by file ext anyway
* - wav can't be added 'cause of a52 and dts in them as raw audio
*/
static struct { char *ext; char *demux; } exttodemux[] =
{
{ "aac", "aac" },
{ "aiff", "aiff" },
{ "asf", "asf" }, { "wmv", "asf" }, { "wma", "asf" },
{ "avi", "avi" },
{ "au", "au" },
{ "flac", "flac" },
{ "dv", "dv" },
{ "m3u", "m3u" },
{ "mkv", "mkv" }, { "mka", "mkv" }, { "mks", "mkv" },
{ "mp4", "mp4" }, { "m4a", "mp4" }, { "mov", "mp4" }, { "moov", "mp4" },
{ "mod", "mod" }, { "xm", "mod" },
{ "nsv", "nsv" },
{ "ogg", "ogg" }, { "ogm", "ogg" },
{ "pva", "pva" },
{ "rm", "rm" },
{ "", "" },
};
char *psz_ext = strrchr( p_demux->psz_path, '.' ) + 1;
int i;
for( i = 0; exttodemux[i].ext != NULL; i++ )
{
if( !strcasecmp( psz_ext, exttodemux[i].ext ) )
{
psz_module = exttodemux[i].demux;
break;
}
}
}
/* Before module_Need (for var_Create...) */
vlc_object_attach( p_demux, p_obj );
p_demux->p_module =
module_Need( p_demux, "demux2", psz_module,
!strcmp( psz_module, p_demux->psz_demux ) ? VLC_TRUE : VLC_FALSE );
if( p_demux->p_module == NULL )
{
vlc_object_detach( p_demux );
free( p_demux->psz_path );
free( p_demux->psz_demux );
free( p_demux->psz_access );
vlc_object_destroy( p_demux );
return NULL;
}
return p_demux;
#endif
}
/*****************************************************************************
* demux2_Delete:
*****************************************************************************/
void
access2_Delete
(
access_t
*
p_access
)
{
module_Unneed
(
p_access
,
p_access
->
p_module
);
vlc_object_detach
(
p_access
);
free
(
p_access
->
psz_access
);
free
(
p_access
->
psz_path
);
free
(
p_access
->
psz_demux
);
vlc_object_destroy
(
p_access
);
}
src/input/es_out.c
View file @
41c38426
...
@@ -46,7 +46,7 @@ struct es_out_id_t
...
@@ -46,7 +46,7 @@ struct es_out_id_t
struct
es_out_sys_t
struct
es_out_sys_t
{
{
input_thread_t
*
p_input
;
input_thread_t
*
p_input
;
vlc_bool_t
b_
pcr_set
;
vlc_bool_t
b_
convert_ts_auto
;
/* automatically convert TimeStamp */
/* all es */
/* all es */
int
i_id
;
int
i_id
;
...
@@ -99,7 +99,7 @@ es_out_t *input_EsOutNew( input_thread_t *p_input )
...
@@ -99,7 +99,7 @@ es_out_t *input_EsOutNew( input_thread_t *p_input )
out
->
p_sys
=
p_sys
;
out
->
p_sys
=
p_sys
;
p_sys
->
p_input
=
p_input
;
p_sys
->
p_input
=
p_input
;
p_sys
->
b_
pcr_set
=
VLC_FALS
E
;
p_sys
->
b_
convert_ts_auto
=
VLC_TRU
E
;
p_sys
->
b_active
=
VLC_FALSE
;
p_sys
->
b_active
=
VLC_FALSE
;
p_sys
->
i_mode
=
ES_OUT_MODE_AUTO
;
p_sys
->
i_mode
=
ES_OUT_MODE_AUTO
;
...
@@ -159,7 +159,7 @@ void input_EsOutDelete( es_out_t *out )
...
@@ -159,7 +159,7 @@ void input_EsOutDelete( es_out_t *out )
static
pgrm_descriptor_t
*
EsOutAddProgram
(
es_out_t
*
out
,
int
i_group
)
static
pgrm_descriptor_t
*
EsOutAddProgram
(
es_out_t
*
out
,
int
i_group
)
{
{
input_thread_t
*
p_input
=
out
->
p_sys
->
p_input
;
input_thread_t
*
p_input
=
out
->
p_sys
->
p_input
;
pgrm_descriptor_t
*
p_p
rg
m
;
pgrm_descriptor_t
*
p_p
gr
m
;
es_descriptor_t
*
p_pmt
;
es_descriptor_t
*
p_pmt
;
/* FIXME we should use a object variable but a lot of place in src/input
/* FIXME we should use a object variable but a lot of place in src/input
...
@@ -167,23 +167,23 @@ static pgrm_descriptor_t *EsOutAddProgram( es_out_t *out, int i_group )
...
@@ -167,23 +167,23 @@ static pgrm_descriptor_t *EsOutAddProgram( es_out_t *out, int i_group )
int
i_select
=
config_GetInt
(
p_input
,
"program"
);
int
i_select
=
config_GetInt
(
p_input
,
"program"
);
/* create it */
/* create it */
p_p
rg
m
=
input_AddProgram
(
p_input
,
i_group
,
0
);
p_p
gr
m
=
input_AddProgram
(
p_input
,
i_group
,
0
);
/* XXX welcome to kludge, add a dummy es, if you want to understand
/* XXX welcome to kludge, add a dummy es, if you want to understand
* why have a look at input_SetProgram. Basicaly, it assume the first
* why have a look at input_SetProgram. Basicaly, it assume the first
* es to be the PMT, how that is stupid, nevertheless it is needed for
* es to be the PMT, how that is stupid, nevertheless it is needed for
* the old ts demuxer */
* the old ts demuxer */
p_pmt
=
input_AddES
(
p_input
,
p_p
rg
m
,
0
,
UNKNOWN_ES
,
NULL
,
0
);
p_pmt
=
input_AddES
(
p_input
,
p_p
gr
m
,
0
,
UNKNOWN_ES
,
NULL
,
0
);
p_pmt
->
i_fourcc
=
VLC_FOURCC
(
'n'
,
'u'
,
'l'
,
'l'
);
p_pmt
->
i_fourcc
=
VLC_FOURCC
(
'n'
,
'u'
,
'l'
,
'l'
);
/* Select i_select or the first by default */
/* Select i_select or the first by default */
if
(
p_input
->
stream
.
p_selected_program
==
NULL
&&
if
(
p_input
->
stream
.
p_selected_program
==
NULL
&&
(
i_select
<=
0
||
i_select
==
i_group
)
)
(
i_select
<=
0
||
i_select
==
i_group
)
)
{
{
p_input
->
stream
.
p_selected_program
=
p_p
rg
m
;
p_input
->
stream
.
p_selected_program
=
p_p
gr
m
;
}
}
return
p_p
rg
m
;
return
p_p
gr
m
;
}
}
/**
/**
...
@@ -297,7 +297,7 @@ static es_out_id_t *EsOutAdd( es_out_t *out, es_format_t *fmt )
...
@@ -297,7 +297,7 @@ static es_out_id_t *EsOutAdd( es_out_t *out, es_format_t *fmt )
es_out_sys_t
*
p_sys
=
out
->
p_sys
;
es_out_sys_t
*
p_sys
=
out
->
p_sys
;
input_thread_t
*
p_input
=
p_sys
->
p_input
;
input_thread_t
*
p_input
=
p_sys
->
p_input
;
es_out_id_t
*
es
=
malloc
(
sizeof
(
es_out_id_t
)
);
es_out_id_t
*
es
=
malloc
(
sizeof
(
es_out_id_t
)
);
pgrm_descriptor_t
*
p_p
rg
m
=
NULL
;
pgrm_descriptor_t
*
p_p
gr
m
=
NULL
;
char
psz_cat
[
sizeof
(
_
(
"Stream "
)
)
+
10
];
char
psz_cat
[
sizeof
(
_
(
"Stream "
)
)
+
10
];
char
*
psz_description
;
char
*
psz_description
;
...
@@ -305,12 +305,12 @@ static es_out_id_t *EsOutAdd( es_out_t *out, es_format_t *fmt )
...
@@ -305,12 +305,12 @@ static es_out_id_t *EsOutAdd( es_out_t *out, es_format_t *fmt )
if
(
fmt
->
i_group
>=
0
)
if
(
fmt
->
i_group
>=
0
)
{
{
/* search program */
/* search program */
p_p
rg
m
=
input_FindProgram
(
p_input
,
fmt
->
i_group
);
p_p
gr
m
=
input_FindProgram
(
p_input
,
fmt
->
i_group
);
if
(
p_p
rg
m
==
NULL
)
if
(
p_p
gr
m
==
NULL
)
{
{
/* Create it */
/* Create it */
p_p
rg
m
=
EsOutAddProgram
(
out
,
fmt
->
i_group
);
p_p
gr
m
=
EsOutAddProgram
(
out
,
fmt
->
i_group
);
}
}
}
}
if
(
fmt
->
i_id
<
0
)
if
(
fmt
->
i_id
<
0
)
...
@@ -319,7 +319,7 @@ static es_out_id_t *EsOutAdd( es_out_t *out, es_format_t *fmt )
...
@@ -319,7 +319,7 @@ static es_out_id_t *EsOutAdd( es_out_t *out, es_format_t *fmt )
}
}
psz_description
=
LanguageGetName
(
fmt
->
psz_language
);
psz_description
=
LanguageGetName
(
fmt
->
psz_language
);
es
->
p_es
=
input_AddES
(
p_input
,
p_p
rg
m
,
fmt
->
i_id
+
1
,
es
->
p_es
=
input_AddES
(
p_input
,
p_p
gr
m
,
fmt
->
i_id
+
1
,
fmt
->
i_cat
,
psz_description
,
0
);
fmt
->
i_cat
,
psz_description
,
0
);
es
->
p_es
->
i_stream_id
=
fmt
->
i_id
;
es
->
p_es
->
i_stream_id
=
fmt
->
i_id
;
es
->
p_es
->
i_fourcc
=
fmt
->
i_codec
;
es
->
p_es
->
i_fourcc
=
fmt
->
i_codec
;
...
@@ -451,7 +451,7 @@ static int EsOutSend( es_out_t *out, es_out_id_t *es, block_t *p_block )
...
@@ -451,7 +451,7 @@ static int EsOutSend( es_out_t *out, es_out_id_t *es, block_t *p_block )
{
{
es_out_sys_t
*
p_sys
=
out
->
p_sys
;
es_out_sys_t
*
p_sys
=
out
->
p_sys
;
if
(
p_sys
->
b_
pcr_set
)
if
(
p_sys
->
b_
convert_ts_auto
)
{
{
pgrm_descriptor_t
*
p_pgrm
=
es
->
p_es
->
p_pgrm
;
pgrm_descriptor_t
*
p_pgrm
=
es
->
p_es
->
p_pgrm
;
input_thread_t
*
p_input
=
p_sys
->
p_input
;
input_thread_t
*
p_input
=
p_sys
->
p_input
;
...
@@ -665,31 +665,30 @@ static int EsOutControl( es_out_t *out, int i_query, va_list args )
...
@@ -665,31 +665,30 @@ static int EsOutControl( es_out_t *out, int i_query, va_list args )
case
ES_OUT_SET_PCR
:
case
ES_OUT_SET_PCR
:
case
ES_OUT_SET_GROUP_PCR
:
case
ES_OUT_SET_GROUP_PCR
:
{
{
pgrm_descriptor_t
*
p_p
rg
m
=
NULL
;
pgrm_descriptor_t
*
p_p
gr
m
=
NULL
;
int64_t
i_pcr
;
int64_t
i_pcr
;
if
(
i_query
==
ES_OUT_SET_PCR
)
if
(
i_query
==
ES_OUT_SET_PCR
)
{
{
p_p
rg
m
=
p_sys
->
p_input
->
stream
.
p_selected_program
;
p_p
gr
m
=
p_sys
->
p_input
->
stream
.
p_selected_program
;
}
}
else
else
{
{
int
i_group
=
(
int
)
va_arg
(
args
,
int
);
int
i_group
=
(
int
)
va_arg
(
args
,
int
);
p_p
rg
m
=
input_FindProgram
(
p_sys
->
p_input
,
i_group
);
p_p
gr
m
=
input_FindProgram
(
p_sys
->
p_input
,
i_group
);
if
(
p_p
rg
m
==
NULL
)
if
(
p_p
gr
m
==
NULL
)
{
{
/* we create the requested program */
/* we create the requested program */
p_p
rg
m
=
EsOutAddProgram
(
out
,
i_group
);
p_p
gr
m
=
EsOutAddProgram
(
out
,
i_group
);
}
}
}
}
i_pcr
=
(
int64_t
)
va_arg
(
args
,
int64_t
);
i_pcr
=
(
int64_t
)
va_arg
(
args
,
int64_t
);
/* search program */
/* search program */
if
(
p_p
rg
m
)
if
(
p_p
gr
m
)
{
{
/* 11 is a vodoo trick to avoid non_pcr*9/100 to be null */
/* 11 is a vodoo trick to avoid non_pcr*9/100 to be null */
input_ClockManageRef
(
p_sys
->
p_input
,
p_p
rg
m
,
(
i_pcr
+
11
)
*
9
/
100
);
input_ClockManageRef
(
p_sys
->
p_input
,
p_p
gr
m
,
(
i_pcr
+
11
)
*
9
/
100
);
}
}
p_sys
->
b_pcr_set
=
VLC_TRUE
;
return
VLC_SUCCESS
;
return
VLC_SUCCESS
;
}
}
...
@@ -700,9 +699,32 @@ static int EsOutControl( es_out_t *out, int i_query, va_list args )
...
@@ -700,9 +699,32 @@ static int EsOutControl( es_out_t *out, int i_query, va_list args )
SYNCHRO_REINIT
;
SYNCHRO_REINIT
;
p_sys
->
p_input
->
stream
.
pp_programs
[
i
]
->
last_pts
=
0
;
p_sys
->
p_input
->
stream
.
pp_programs
[
i
]
->
last_pts
=
0
;
}
}
p_sys
->
b_pcr_set
=
VLC_TRUE
;
return
VLC_SUCCESS
;
return
VLC_SUCCESS
;
case
ES_OUT_CONVERT_TIMESTAMP
:
case
ES_OUT_CONVERT_GROUP_TIMESTAMP
:
{
pgrm_descriptor_t
*
p_pgrm
=
NULL
;
if
(
i_query
==
ES_OUT_CONVERT_TIMESTAMP
)
{
p_pgrm
=
p_sys
->
p_input
->
stream
.
p_selected_program
;
}
else
{
int
i_group
=
(
int
)
va_arg
(
args
,
int
);
p_pgrm
=
input_FindProgram
(
p_sys
->
p_input
,
i_group
);
}
if
(
p_pgrm
)
{
int64_t
*
pi_ts
=
(
int64_t
*
)
va_arg
(
args
,
int64_t
*
);
*
pi_ts
=
input_ClockGetTS
(
p_sys
->
p_input
,
p_pgrm
,
(
*
pi_ts
+
11
)
*
9
/
100
);
}
p_sys
->
b_convert_ts_auto
=
VLC_FALSE
;
return
VLC_SUCCESS
;
}
default:
default:
msg_Err
(
p_sys
->
p_input
,
"unknown query in es_out_Control"
);
msg_Err
(
p_sys
->
p_input
,
"unknown query in es_out_Control"
);
return
VLC_EGENERIC
;
return
VLC_EGENERIC
;
...
...
src/misc/messages.c
View file @
41c38426
...
@@ -496,6 +496,7 @@ static void PrintMsg ( vlc_object_t * p_this, msg_item_t * p_item )
...
@@ -496,6 +496,7 @@ static void PrintMsg ( vlc_object_t * p_this, msg_item_t * p_item )
case
VLC_OBJECT_VLM
:
psz_object
=
"vlm"
;
break
;
case
VLC_OBJECT_VLM
:
psz_object
=
"vlm"
;
break
;
case
VLC_OBJECT_ANNOUNCE
:
psz_object
=
"announce handler"
;
break
;
case
VLC_OBJECT_ANNOUNCE
:
psz_object
=
"announce handler"
;
break
;
case
VLC_OBJECT_DEMUX
:
psz_object
=
"demuxer"
;
break
;
case
VLC_OBJECT_DEMUX
:
psz_object
=
"demuxer"
;
break
;
case
VLC_OBJECT_ACCESS
:
psz_object
=
"access"
;
break
;
}
}
#ifdef UNDER_CE
#ifdef UNDER_CE
...
...
src/misc/objects.c
View file @
41c38426
...
@@ -132,6 +132,10 @@ void * __vlc_object_create( vlc_object_t *p_this, int i_type )
...
@@ -132,6 +132,10 @@ void * __vlc_object_create( vlc_object_t *p_this, int i_type )
i_size
=
sizeof
(
demux_t
);
i_size
=
sizeof
(
demux_t
);
psz_type
=
"demux"
;
psz_type
=
"demux"
;
break
;
break
;
case
VLC_OBJECT_ACCESS
:
i_size
=
sizeof
(
access_t
);
psz_type
=
"access"
;
break
;
case
VLC_OBJECT_DECODER
:
case
VLC_OBJECT_DECODER
:
i_size
=
sizeof
(
decoder_t
);
i_size
=
sizeof
(
decoder_t
);
psz_type
=
"decoder"
;
psz_type
=
"decoder"
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment