Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-1.1
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-1.1
Commits
f3f41176
Commit
f3f41176
authored
Jan 26, 2004
by
Laurent Aimar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* all: make stream_t using function pointers (needed to have multiple
implementations, not yet used).
parent
33464f10
Changes
6
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
236 additions
and
193 deletions
+236
-193
include/input_ext-intf.h
include/input_ext-intf.h
+3
-3
include/input_ext-plugins.h
include/input_ext-plugins.h
+4
-1
include/ninput.h
include/ninput.h
+98
-19
include/vlc_common.h
include/vlc_common.h
+3
-3
src/input/input.c
src/input/input.c
+4
-4
src/input/stream.c
src/input/stream.c
+124
-163
No files found.
include/input_ext-intf.h
View file @
f3f41176
...
...
@@ -4,7 +4,7 @@
* control the pace of reading.
*****************************************************************************
* Copyright (C) 1999, 2000, 2003 VideoLAN
* $Id: input_ext-intf.h,v 1.10
2 2003/12/03 13:27:51 rocky
Exp $
* $Id: input_ext-intf.h,v 1.10
3 2004/01/26 20:48:09 fenrir
Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
*
...
...
@@ -26,6 +26,7 @@
#ifndef _VLC_INPUT_EXT_INTF_H
#define _VLC_INPUT_EXT_INTF_H 1
#include "vlc_block.h"
#include "ninput.h"
/*
...
...
@@ -237,9 +238,8 @@ struct stream_descriptor_t
int
b_new_mute
;
/* int because it can be -1 */
vlc_cond_t
stream_wait
;
/* interface -> input in case of a
* status change request */
/* Demultiplexer data */
stream_sys_t
*
p_demux_data
;
void
*
p_demux_data
;
/* Programs descriptions */
unsigned
int
i_pgrm_number
;
/* size of the following array */
...
...
include/input_ext-plugins.h
View file @
f3f41176
...
...
@@ -3,7 +3,7 @@
* but exported to plug-ins
*****************************************************************************
* Copyright (C) 1999-2002 VideoLAN
* $Id: input_ext-plugins.h,v 1.4
6 2003/11/30 22:47:55 gbazin
Exp $
* $Id: input_ext-plugins.h,v 1.4
7 2004/01/26 20:48:09 fenrir
Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
*
...
...
@@ -71,6 +71,9 @@ void input_EscapeAudioDiscontinuity( input_thread_t * );
es_out_t
*
input_EsOutNew
(
input_thread_t
*
);
void
input_EsOutDelete
(
es_out_t
*
);
stream_t
*
input_StreamNew
(
input_thread_t
*
);
void
input_StreamDelete
(
stream_t
*
);
/*****************************************************************************
* Prototypes from input_clock.c
*****************************************************************************/
...
...
include/ninput.h
View file @
f3f41176
...
...
@@ -2,7 +2,7 @@
* ninput.h
*****************************************************************************
* Copyright (C) 1999-2001 VideoLAN
* $Id: ninput.h,v 1.2
5 2004/01/21 17:01:54
fenrir Exp $
* $Id: ninput.h,v 1.2
6 2004/01/26 20:48:09
fenrir Exp $
*
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
*
...
...
@@ -121,41 +121,121 @@ enum stream_query_e
STREAM_GET_MTU
,
/**< arg1= int * res=cannot fail (0 if no sense)*/
};
/* Stream */
VLC_EXPORT
(
stream_t
*
,
stream_OpenInput
,
(
input_thread_t
*
)
);
VLC_EXPORT
(
void
,
stream_Release
,
(
stream_t
*
)
);
VLC_EXPORT
(
int
,
stream_vaControl
,
(
stream_t
*
,
int
i_query
,
va_list
)
);
VLC_EXPORT
(
int
,
stream_Control
,
(
stream_t
*
,
int
i_query
,
...
)
);
VLC_EXPORT
(
int
,
stream_Read
,
(
stream_t
*
,
void
*
p_read
,
int
i_read
)
);
VLC_EXPORT
(
int
,
stream_Peek
,
(
stream_t
*
,
uint8_t
**
pp_peek
,
int
i_peek
)
);
VLC_EXPORT
(
char
*
,
stream_ReadLine
,
(
stream_t
*
)
);
VLC_EXPORT
(
block_t
*
,
stream_Block
,
(
stream_t
*
,
int
i_size
)
);
/**
* stream_t definition
*/
struct
stream_t
{
VLC_COMMON_MEMBERS
block_t
*
(
*
pf_block
)
(
stream_t
*
,
int
i_size
);
int
(
*
pf_read
)
(
stream_t
*
,
void
*
p_read
,
int
i_read
);
int
(
*
pf_peek
)
(
stream_t
*
,
uint8_t
**
pp_peek
,
int
i_peek
);
int
(
*
pf_control
)(
stream_t
*
,
int
i_query
,
va_list
);
static
int64_t
inline
stream_Tell
(
stream_t
*
s
)
stream_sys_t
*
p_sys
;
};
/**
* Try to read "i_read" bytes into a buffer pointed by "p_read". If
* "p_read" is NULL then data are skipped instead of read. The return
* value is the real numbers of bytes read/skip. If this value is less
* than i_read that means that it's the end of the stream.
*/
static
inline
int
stream_Read
(
stream_t
*
s
,
void
*
p_read
,
int
i_read
)
{
return
s
->
pf_read
(
s
,
p_read
,
i_read
);
}
/**
* Store in pp_peek a pointer to the next "i_peek" bytes in the stream
* \return The real numbers of valid bytes, if it's less
* or equal to 0, *pp_peek is invalid.
* \note pp_peek is a pointer to internal buffer and it will be invalid as
* soons as other stream_* functions are called.
* \note Due to input limitation, it could be less than i_peek without meaning
* the end of the stream (but only when you have i_peek >=
* p_input->i_bufsize)
*/
static
inline
int
stream_Peek
(
stream_t
*
s
,
uint8_t
**
pp_peek
,
int
i_peek
)
{
return
s
->
pf_peek
(
s
,
pp_peek
,
i_peek
);
}
/**
* Use to control the "stream_t *". Look at #stream_query_e for
* possible "i_query" value and format arguments. Return VLC_SUCCESS
* if ... succeed ;) and VLC_EGENERIC if failed or unimplemented
*/
static
inline
int
stream_vaControl
(
stream_t
*
s
,
int
i_query
,
va_list
args
)
{
return
s
->
pf_control
(
s
,
i_query
,
args
);
}
static
inline
int
stream_Control
(
stream_t
*
s
,
int
i_query
,
...
)
{
va_list
args
;
int
i_result
;
va_start
(
args
,
i_query
);
i_result
=
s
->
pf_control
(
s
,
i_query
,
args
);
va_end
(
args
);
return
i_result
;
}
static
inline
int64_t
stream_Tell
(
stream_t
*
s
)
{
int64_t
i_pos
;
stream_Control
(
s
,
STREAM_GET_POSITION
,
&
i_pos
);
return
i_pos
;
}
static
in
t64_t
inline
stream_Size
(
stream_t
*
s
)
static
in
line
int64_t
stream_Size
(
stream_t
*
s
)
{
int64_t
i_pos
;
stream_Control
(
s
,
STREAM_GET_SIZE
,
&
i_pos
);
return
i_pos
;
}
static
in
t
inline
stream_MTU
(
stream_t
*
s
)
static
in
line
int
stream_MTU
(
stream_t
*
s
)
{
int
i_mtu
;
return
stream_Control
(
s
,
STREAM_GET_POSITION
,
&
i_mtu
);
stream_Control
(
s
,
STREAM_GET_MTU
,
&
i_mtu
);
return
i_mtu
;
}
static
int
inline
stream_Seek
(
stream_t
*
s
,
int64_t
i_pos
)
static
inline
int
stream_Seek
(
stream_t
*
s
,
int64_t
i_pos
)
{
return
stream_Control
(
s
,
STREAM_SET_POSITION
,
i_pos
);
}
/**
* Read "i_size" bytes and store them in a block_t. If less than "i_size"
* bytes are available then return what is left and if nothing is availble,
* return NULL.
*/
static
inline
block_t
*
stream_Block
(
stream_t
*
s
,
int
i_size
)
{
if
(
i_size
<=
0
)
return
NULL
;
if
(
s
->
pf_block
)
{
return
s
->
pf_block
(
s
,
i_size
);
}
else
{
/* emulate block read */
block_t
*
p_bk
=
block_New
(
s
,
i_size
);
if
(
p_bk
)
{
p_bk
->
i_buffer
=
stream_Read
(
s
,
p_bk
->
p_buffer
,
i_size
);
if
(
p_bk
->
i_buffer
>
0
)
{
return
p_bk
;
}
}
if
(
p_bk
)
block_Release
(
p_bk
);
return
NULL
;
}
}
VLC_EXPORT
(
char
*
,
stream_ReadLine
,
(
stream_t
*
)
);
/**
* @}
*/
...
...
@@ -165,7 +245,6 @@ static int inline stream_Seek( stream_t *s, int64_t i_pos )
* @{
*/
struct
demux_t
{
VLC_COMMON_MEMBERS
...
...
include/vlc_common.h
View file @
f3f41176
...
...
@@ -3,7 +3,7 @@
* Collection of useful common types and macros definitions
*****************************************************************************
* Copyright (C) 1998, 1999, 2000 VideoLAN
* $Id: vlc_common.h,v 1.10
5 2004/01/25 21:39:37 gbazin
Exp $
* $Id: vlc_common.h,v 1.10
6 2004/01/26 20:48:09 fenrir
Exp $
*
* Authors: Samuel Hocevar <sam@via.ecp.fr>
* Vincent Seguin <seguin@via.ecp.fr>
...
...
@@ -222,7 +222,6 @@ typedef struct es_sys_t es_sys_t;
typedef
struct
pgrm_descriptor_t
pgrm_descriptor_t
;
typedef
struct
pgrm_sys_t
pgrm_sys_t
;
typedef
struct
stream_descriptor_t
stream_descriptor_t
;
typedef
struct
stream_sys_t
stream_sys_t
;
/* Format */
typedef
struct
audio_format_t
audio_format_t
;
...
...
@@ -232,6 +231,7 @@ typedef struct es_format_t es_format_t;
typedef
struct
video_palette_t
video_palette_t
;
/* NInput */
typedef
struct
stream_sys_t
stream_sys_t
;
typedef
struct
stream_t
stream_t
;
typedef
struct
es_out_t
es_out_t
;
typedef
struct
es_out_id_t
es_out_id_t
;
...
...
src/input/input.c
View file @
f3f41176
...
...
@@ -4,7 +4,7 @@
* decoders.
*****************************************************************************
* Copyright (C) 1998-2004 VideoLAN
* $Id: input.c,v 1.2
79 2004/01/26 20:26:54 gbazin
Exp $
* $Id: input.c,v 1.2
80 2004/01/26 20:48:10 fenrir
Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
*
...
...
@@ -736,7 +736,7 @@ static int InitThread( input_thread_t * p_input )
}
/* Create the stream_t facilities */
p_input
->
s
=
stream_OpenInput
(
p_input
);
p_input
->
s
=
input_StreamNew
(
p_input
);
if
(
p_input
->
s
==
NULL
)
{
/* should never occur yet */
...
...
@@ -768,7 +768,7 @@ static int InitThread( input_thread_t * p_input )
msg_Err
(
p_input
,
"no suitable demux module for `%s/%s://%s'"
,
p_input
->
psz_access
,
p_input
->
psz_demux
,
p_input
->
psz_name
);
stream_Releas
e
(
p_input
->
s
);
input_StreamDelet
e
(
p_input
->
s
);
module_Unneed
(
p_input
,
p_input
->
p_access
);
if
(
p_input
->
stream
.
p_sout
!=
NULL
)
{
...
...
@@ -945,7 +945,7 @@ static void EndThread( input_thread_t * p_input )
}
/* Destroy the stream_t facilities */
if
(
p_input
->
s
)
stream_Releas
e
(
p_input
->
s
);
if
(
p_input
->
s
)
input_StreamDelet
e
(
p_input
->
s
);
/* Destroy es out */
if
(
p_input
->
p_es_out
)
input_EsOutDelete
(
p_input
->
p_es_out
);
...
...
src/input/stream.c
View file @
f3f41176
This diff is collapsed.
Click to expand it.
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