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
31fa9d1e
Commit
31fa9d1e
authored
Feb 16, 2003
by
Laurent Aimar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* all: split muxer and access into independant part.
parent
8da3bb94
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
161 additions
and
81 deletions
+161
-81
include/stream_output.h
include/stream_output.h
+26
-6
include/vlc_common.h
include/vlc_common.h
+3
-1
modules/access_output/dummy.c
modules/access_output/dummy.c
+15
-17
modules/access_output/file.c
modules/access_output/file.c
+29
-34
modules/mux/avi.c
modules/mux/avi.c
+7
-7
modules/mux/dummy.c
modules/mux/dummy.c
+2
-2
modules/mux/mpeg/ps.c
modules/mux/mpeg/ps.c
+5
-5
modules/mux/mpeg/ts.c
modules/mux/mpeg/ts.c
+2
-2
src/stream_output/stream_output.c
src/stream_output/stream_output.c
+72
-7
No files found.
include/stream_output.h
View file @
31fa9d1e
...
...
@@ -2,7 +2,7 @@
* stream_output.h : stream output module
*****************************************************************************
* Copyright (C) 2002 VideoLAN
* $Id: stream_output.h,v 1.
4 2003/01/13 02:33:13
fenrir Exp $
* $Id: stream_output.h,v 1.
5 2003/02/16 14:10:44
fenrir Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
* Laurent Aimar <fenrir@via.ecp.fr>
...
...
@@ -90,6 +90,24 @@ struct sout_input_t
#define SOUT_METHOD_FILE 0x10
#define SOUT_METHOD_NETWORK 0x20
struct
sout_access_out_t
{
VLC_COMMON_MEMBERS
module_t
*
p_module
;
sout_instance_t
*
p_sout
;
char
*
psz_access
;
char
*
psz_name
;
sout_access_out_sys_t
*
p_sys
;
int
(
*
pf_seek
)(
sout_access_out_t
*
,
off_t
);
int
(
*
pf_write
)(
sout_access_out_t
*
,
sout_buffer_t
*
);
};
struct
sout_instance_t
{
VLC_COMMON_MEMBERS
...
...
@@ -99,12 +117,9 @@ struct sout_instance_t
char
*
psz_mux
;
char
*
psz_name
;
module_t
*
p_access
;
int
i_method
;
void
*
p_access_data
;
int
i_access_preheader
;
int
(
*
pf_write
)(
sout_instance_t
*
,
sout_buffer_t
*
);
int
(
*
pf_seek
)(
sout_instance_t
*
,
off_t
);
sout_access_out_t
*
p_access
;
module_t
*
p_mux
;
void
*
p_mux_data
;
...
...
@@ -153,3 +168,8 @@ VLC_EXPORT( int, sout_BufferDelete, ( sout_instance_t *, sout_buffer_
VLC_EXPORT
(
sout_buffer_t
*
,
sout_BufferDuplicate
,(
sout_instance_t
*
,
sout_buffer_t
*
)
);
VLC_EXPORT
(
void
,
sout_BufferChain
,
(
sout_buffer_t
**
,
sout_buffer_t
*
)
);
VLC_EXPORT
(
sout_access_out_t
*
,
sout_AccessOutNew
,
(
sout_instance_t
*
,
char
*
psz_access
,
char
*
psz_name
)
);
VLC_EXPORT
(
void
,
sout_AccessDelete
,
(
sout_access_out_t
*
)
);
VLC_EXPORT
(
int
,
sout_AccessSeek
,
(
sout_access_out_t
*
,
off_t
)
);
VLC_EXPORT
(
int
,
sout_AccessWrite
,
(
sout_access_out_t
*
,
sout_buffer_t
*
)
);
include/vlc_common.h
View file @
31fa9d1e
...
...
@@ -3,7 +3,7 @@
* Collection of useful common types and macros definitions
*****************************************************************************
* Copyright (C) 1998, 1999, 2000 VideoLAN
* $Id: vlc_common.h,v 1.5
3 2003/02/08 22:20:28 massiot
Exp $
* $Id: vlc_common.h,v 1.5
4 2003/02/16 14:10:44 fenrir
Exp $
*
* Authors: Samuel Hocevar <sam@via.ecp.fr>
* Vincent Seguin <seguin@via.ecp.fr>
...
...
@@ -245,6 +245,8 @@ typedef struct sout_fifo_t sout_fifo_t;
typedef
struct
sout_input_t
sout_input_t
;
typedef
struct
sout_buffer_t
sout_buffer_t
;
typedef
struct
sout_packet_format_t
sout_packet_format_t
;
typedef
struct
sout_access_out_t
sout_access_out_t
;
typedef
struct
sout_access_out_sys_t
sout_access_out_sys_t
;
/* Decoders */
typedef
struct
decoder_fifo_t
decoder_fifo_t
;
...
...
modules/access_output/dummy.c
View file @
31fa9d1e
...
...
@@ -2,7 +2,7 @@
* dummy.c
*****************************************************************************
* Copyright (C) 2001, 2002 VideoLAN
* $Id: dummy.c,v 1.
1 2002/12/14 21:32:41
fenrir Exp $
* $Id: dummy.c,v 1.
2 2003/02/16 14:10:44
fenrir Exp $
*
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
* Eric Petit <titer@videolan.org>
...
...
@@ -48,8 +48,8 @@
static
int
Open
(
vlc_object_t
*
);
static
void
Close
(
vlc_object_t
*
);
static
int
Write
(
sout_
instance
_t
*
,
sout_buffer_t
*
);
static
int
Seek
(
sout_instance
_t
*
,
off_t
);
static
int
Write
(
sout_
access_out
_t
*
,
sout_buffer_t
*
);
static
int
Seek
(
sout_access_out
_t
*
,
off_t
);
/*****************************************************************************
* Module descriptor
...
...
@@ -67,14 +67,13 @@ vlc_module_end();
*****************************************************************************/
static
int
Open
(
vlc_object_t
*
p_this
)
{
sout_
instance_t
*
p_sout
=
(
sout_instance
_t
*
)
p_this
;
sout_
access_out_t
*
p_access
=
(
sout_access_out
_t
*
)
p_this
;
p_sout
->
i_method
=
SOUT_METHOD_NONE
;
p_sout
->
p_access_data
=
NULL
;
p_sout
->
pf_write
=
Write
;
p_sout
->
pf_seek
=
Seek
;
p_access
->
p_sys
=
NULL
;
p_access
->
pf_write
=
Write
;
p_access
->
pf_seek
=
Seek
;
msg_Info
(
p_
sout
,
"dummy stream output access launched"
);
msg_Info
(
p_
access
,
"dummy stream output access launched"
);
return
VLC_SUCCESS
;
}
...
...
@@ -83,14 +82,14 @@ static int Open( vlc_object_t *p_this )
*****************************************************************************/
static
void
Close
(
vlc_object_t
*
p_this
)
{
sout_
instance_t
*
p_sout
=
(
sout_instance
_t
*
)
p_this
;
msg_Info
(
p_
sout
,
"Close"
);
sout_
access_out_t
*
p_access
=
(
sout_access_out
_t
*
)
p_this
;
msg_Info
(
p_
access
,
"Close"
);
}
/*****************************************************************************
* Read: standard read on a file descriptor.
*****************************************************************************/
static
int
Write
(
sout_
instance_t
*
p_sout
,
sout_buffer_t
*
p_buffer
)
static
int
Write
(
sout_
access_out_t
*
p_access
,
sout_buffer_t
*
p_buffer
)
{
size_t
i_write
=
0
;
...
...
@@ -99,11 +98,11 @@ static int Write( sout_instance_t *p_sout, sout_buffer_t *p_buffer )
sout_buffer_t
*
p_next
;
i_write
+=
p_buffer
->
i_size
;
p_next
=
p_buffer
->
p_next
;
sout_BufferDelete
(
p_sout
,
p_buffer
);
sout_BufferDelete
(
p_
access
->
p_
sout
,
p_buffer
);
p_buffer
=
p_next
;
}
while
(
p_buffer
);
msg_Dbg
(
p_
sout
,
"Dummy Skipped: len:%d"
,
(
uint32
_t
)
i_write
);
msg_Dbg
(
p_
access
,
"Dummy Skipped: len:"
I64Fd
,
(
int64
_t
)
i_write
);
return
(
i_write
);
}
...
...
@@ -111,11 +110,10 @@ static int Write( sout_instance_t *p_sout, sout_buffer_t *p_buffer )
/*****************************************************************************
* Seek: seek to a specific location in a file
*****************************************************************************/
static
int
Seek
(
sout_
instance_t
*
p_sout
,
off_t
i_pos
)
static
int
Seek
(
sout_
access_out_t
*
p_access
,
off_t
i_pos
)
{
msg_Dbg
(
p_
sout
,
"Seek: pos:%lld"
,
(
int64_t
)
i_pos
);
msg_Dbg
(
p_
access
,
"Seek: pos:"
I64Fd
,
(
int64_t
)
i_pos
);
return
(
0
);
}
modules/access_output/file.c
View file @
31fa9d1e
...
...
@@ -2,7 +2,7 @@
* file.c
*****************************************************************************
* Copyright (C) 2001, 2002 VideoLAN
* $Id: file.c,v 1.
2 2003/01/08 10:40:10
fenrir Exp $
* $Id: file.c,v 1.
3 2003/02/16 14:10:44
fenrir Exp $
*
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
* Eric Petit <titer@videolan.org>
...
...
@@ -48,8 +48,8 @@
static
int
Open
(
vlc_object_t
*
);
static
void
Close
(
vlc_object_t
*
);
static
int
Write
(
sout_
instance
_t
*
,
sout_buffer_t
*
);
static
int
Seek
(
sout_instance
_t
*
,
off_t
);
static
int
Write
(
sout_
access_out
_t
*
,
sout_buffer_t
*
);
static
int
Seek
(
sout_access_out
_t
*
,
off_t
);
/*****************************************************************************
* Module descriptor
...
...
@@ -61,36 +61,36 @@ vlc_module_begin();
set_callbacks
(
Open
,
Close
);
vlc_module_end
();
typedef
struct
sout_access_data_s
struct
sout_access_out_sys_t
{
FILE
*
p_file
;
}
sout_access_data_t
;
};
/*****************************************************************************
* Open: open the file
*****************************************************************************/
static
int
Open
(
vlc_object_t
*
p_this
)
{
sout_instance_t
*
p_sout
=
(
sout_instance_t
*
)
p_this
;
sout_access_data_t
*
p_access
;
char
*
psz_name
=
p_sout
->
psz_name
;
sout_access_out_t
*
p_access
=
(
sout_access_out_t
*
)
p_this
;
p_access
=
malloc
(
sizeof
(
sout_access_data_t
)
);
if
(
!
(
p_access
->
p_sys
=
malloc
(
sizeof
(
sout_access_out_sys_t
)
)
)
)
{
msg_Err
(
p_access
,
"out of memory"
);
return
(
VLC_EGENERIC
);
}
if
(
!
(
p_access
->
p_
file
=
fopen
(
psz_name
,
"wb"
)
)
)
if
(
!
(
p_access
->
p_
sys
->
p_file
=
fopen
(
p_access
->
psz_name
,
"wb"
)
)
)
{
msg_Err
(
p_
sout
,
"cannot open `%s'"
,
psz_name
);
free
(
p_access
);
return
(
-
1
);
msg_Err
(
p_
access
,
"cannot open `%s'"
,
p_access
->
psz_name
);
free
(
p_access
->
p_sys
);
return
(
VLC_EGENERIC
);
}
p_sout
->
i_method
=
SOUT_METHOD_FILE
;
p_sout
->
p_access_data
=
p_access
;
p_sout
->
pf_write
=
Write
;
p_sout
->
pf_seek
=
Seek
;
p_access
->
pf_write
=
Write
;
p_access
->
pf_seek
=
Seek
;
msg_Info
(
p_
sout
,
"Open: name:`%s'"
,
psz_name
);
msg_Info
(
p_
access
,
"Open: name:`%s'"
,
p_access
->
psz_name
);
return
VLC_SUCCESS
;
}
...
...
@@ -99,23 +99,22 @@ static int Open( vlc_object_t *p_this )
*****************************************************************************/
static
void
Close
(
vlc_object_t
*
p_this
)
{
sout_instance_t
*
p_sout
=
(
sout_instance_t
*
)
p_this
;
sout_access_data_t
*
p_access
=
(
sout_access_data_t
*
)
p_sout
->
p_access_data
;
sout_access_out_t
*
p_access
=
(
sout_access_out_t
*
)
p_this
;
if
(
p_access
->
p_file
)
if
(
p_access
->
p_
sys
->
p_
file
)
{
fclose
(
p_access
->
p_file
);
fclose
(
p_access
->
p_
sys
->
p_
file
);
}
free
(
p_access
->
p_sys
);
msg_Info
(
p_
sout
,
"Close"
);
msg_Info
(
p_
access
,
"Close"
);
}
/*****************************************************************************
* Read: standard read on a file descriptor.
*****************************************************************************/
static
int
Write
(
sout_
instance_t
*
p_sout
,
sout_buffer_t
*
p_buffer
)
static
int
Write
(
sout_
access_out_t
*
p_access
,
sout_buffer_t
*
p_buffer
)
{
sout_access_data_t
*
p_access
=
(
sout_access_data_t
*
)
p_sout
->
p_access_data
;
size_t
i_write
=
0
;
do
...
...
@@ -123,28 +122,24 @@ static int Write( sout_instance_t *p_sout, sout_buffer_t *p_buffer )
sout_buffer_t
*
p_next
;
i_write
+=
fwrite
(
p_buffer
->
p_buffer
,
1
,
p_buffer
->
i_size
,
p_access
->
p_file
);
p_access
->
p_
sys
->
p_
file
);
p_next
=
p_buffer
->
p_next
;
sout_BufferDelete
(
p_sout
,
p_buffer
);
sout_BufferDelete
(
p_
access
->
p_
sout
,
p_buffer
);
p_buffer
=
p_next
;
}
while
(
p_buffer
);
// msg_Dbg( p_sout, "Write: len:%d", (uint32_t)i_write );
return
(
i_write
);
}
/*****************************************************************************
* Seek: seek to a specific location in a file
*****************************************************************************/
static
int
Seek
(
sout_
instance_t
*
p_sout
,
off_t
i_pos
)
static
int
Seek
(
sout_
access_out_t
*
p_access
,
off_t
i_pos
)
{
sout_access_data_t
*
p_access
=
(
sout_access_data_t
*
)
p_sout
->
p_access_data
;
msg_Dbg
(
p_sout
,
"Seek: pos:%lld"
,
(
int64_t
)
i_pos
);
return
(
fseek
(
p_access
->
p_file
,
i_pos
,
SEEK_SET
)
);
msg_Dbg
(
p_access
,
"Seek: pos:"
I64Fd
,
(
int64_t
)
i_pos
);
return
(
fseek
(
p_access
->
p_sys
->
p_file
,
i_pos
,
SEEK_SET
)
);
}
...
...
modules/mux/avi.c
View file @
31fa9d1e
...
...
@@ -2,7 +2,7 @@
* avi.c
*****************************************************************************
* Copyright (C) 2001, 2002 VideoLAN
* $Id: avi.c,v 1.
4 2003/01/19 08:28:02
fenrir Exp $
* $Id: avi.c,v 1.
5 2003/02/16 14:10:44
fenrir Exp $
*
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
*
...
...
@@ -179,7 +179,7 @@ static int Open( vlc_object_t *p_this )
/* room to add header at the end */
p_hdr
=
sout_BufferNew
(
p_sout
,
HDR_SIZE
);
memset
(
p_hdr
->
p_buffer
,
0
,
HDR_SIZE
);
p_sout
->
pf_write
(
p_sout
,
p_hdr
);
sout_AccessWrite
(
p_sout
->
p_access
,
p_hdr
);
return
VLC_SUCCESS
;
}
...
...
@@ -200,7 +200,7 @@ static void Close( vlc_object_t * p_this )
/* first create idx1 chunk (write at the end of the stream */
p_idx1
=
avi_HeaderCreateidx1
(
p_sout
);
p_mux
->
i_idx1_size
=
p_idx1
->
i_size
;
p_sout
->
pf_write
(
p_sout
,
p_idx1
);
sout_AccessWrite
(
p_sout
->
p_access
,
p_idx1
);
/* calculate some value for headers creations */
for
(
i_stream
=
0
;
i_stream
<
p_mux
->
i_streams
;
i_stream
++
)
...
...
@@ -232,8 +232,8 @@ static void Close( vlc_object_t * p_this )
}
p_hdr
=
avi_HeaderCreateRIFF
(
p_sout
);
p_sout
->
pf_seek
(
p_sout
,
0
);
p_sout
->
pf_write
(
p_sout
,
p_hdr
);
sout_AccessSeek
(
p_sout
->
p_access
,
0
);
sout_AccessWrite
(
p_sout
->
p_access
,
p_hdr
);
}
...
...
@@ -374,7 +374,7 @@ static int Mux ( sout_instance_t *p_sout )
SetFCC
(
p_hdr
->
p_buffer
,
p_stream
->
fcc
);
SetDWLE
(
p_hdr
->
p_buffer
+
4
,
p_data
->
i_size
);
p_sout
->
pf_write
(
p_sout
,
p_hdr
);
sout_AccessWrite
(
p_sout
->
p_access
,
p_hdr
);
p_mux
->
i_movi_size
+=
p_hdr
->
i_size
;
}
...
...
@@ -390,7 +390,7 @@ static int Mux ( sout_instance_t *p_sout )
p_data
->
i_size
+=
1
;
}
p_sout
->
pf_write
(
p_sout
,
p_data
);
sout_AccessWrite
(
p_sout
->
p_access
,
p_data
);
p_mux
->
i_movi_size
+=
p_data
->
i_size
;
i_count
--
;
...
...
modules/mux/dummy.c
View file @
31fa9d1e
...
...
@@ -2,7 +2,7 @@
* dummy.c
*****************************************************************************
* Copyright (C) 2001, 2002 VideoLAN
* $Id: dummy.c,v 1.
1 2002/12/14 21:32:41
fenrir Exp $
* $Id: dummy.c,v 1.
2 2003/02/16 14:10:44
fenrir Exp $
*
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
* Eric Petit <titer@videolan.org>
...
...
@@ -120,7 +120,7 @@ static int Mux ( sout_instance_t *p_sout )
p_data
=
sout_FifoGet
(
p_fifo
);
p_sout
->
pf_write
(
p_sout
,
p_data
);
sout_AccessWrite
(
p_sout
->
p_access
,
p_data
);
i_count
--
;
}
...
...
modules/mux/mpeg/ps.c
View file @
31fa9d1e
...
...
@@ -2,7 +2,7 @@
* ps.c
*****************************************************************************
* Copyright (C) 2001, 2002 VideoLAN
* $Id: ps.c,v 1.
5 2003/01/13 02:33:13
fenrir Exp $
* $Id: ps.c,v 1.
6 2003/02/16 14:10:44
fenrir Exp $
*
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
* Eric Petit <titer@videolan.org>
...
...
@@ -148,7 +148,7 @@ static void Close( vlc_object_t * p_this )
p_end
=
sout_BufferNew
(
p_sout
,
4
);
SetDWBE
(
p_end
->
p_buffer
,
0x01b9
);
p_sout
->
pf_write
(
p_sout
,
p_end
);
sout_AccessWrite
(
p_sout
->
p_access
,
p_end
);
free
(
p_mux
);
...
...
@@ -247,7 +247,7 @@ static int MuxWritePackHeader( sout_instance_t *p_sout,
bits_write
(
&
bits
,
5
,
0x1f
);
// FIXME reserved
bits_write
(
&
bits
,
3
,
0
);
// stuffing bytes
p_hdr
->
i_size
=
14
;
p_sout
->
pf_write
(
p_sout
,
p_hdr
);
sout_AccessWrite
(
p_sout
->
p_access
,
p_hdr
);
return
(
0
);
}
...
...
@@ -281,7 +281,7 @@ static int MuxWriteSystemHeader( sout_instance_t *p_sout )
/* FIXME missing stream_id ... */
p_sout
->
pf_write
(
p_sout
,
p_hdr
);
sout_AccessWrite
(
p_sout
->
p_access
,
p_hdr
);
return
(
0
);
}
...
...
@@ -365,7 +365,7 @@ static int Mux ( sout_instance_t *p_sout )
p_data
=
sout_FifoGet
(
p_fifo
);
E_
(
EStoPES
)(
p_sout
,
&
p_data
,
p_data
,
p_stream
->
i_stream_id
,
1
);
p_sout
->
pf_write
(
p_sout
,
p_data
);
sout_AccessWrite
(
p_sout
->
p_access
,
p_data
);
p_mux
->
i_pes_count
++
;
...
...
modules/mux/mpeg/ts.c
View file @
31fa9d1e
...
...
@@ -2,7 +2,7 @@
* ts.c
*****************************************************************************
* Copyright (C) 2001, 2002 VideoLAN
* $Id: ts.c,v 1.
7 2003/01/13 02:33:13
fenrir Exp $
* $Id: ts.c,v 1.
8 2003/02/16 14:10:44
fenrir Exp $
*
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
* Eric Petit <titer@videolan.org>
...
...
@@ -574,7 +574,7 @@ static int Mux( sout_instance_t *p_sout )
p_mux
->
i_ts_packet
++
;
SetTSDate
(
p_ts
,
i_dts
,
i_length
);
p_sout
->
pf_write
(
p_sout
,
p_ts
);
sout_AccessWrite
(
p_sout
->
p_access
,
p_ts
);
}
return
(
0
);
...
...
src/stream_output/stream_output.c
View file @
31fa9d1e
...
...
@@ -2,7 +2,7 @@
* stream_output.c : stream output module
*****************************************************************************
* Copyright (C) 2002 VideoLAN
* $Id: stream_output.c,v 1.1
2 2003/01/17 15:26:2
4 fenrir Exp $
* $Id: stream_output.c,v 1.1
3 2003/02/16 14:10:4
4 fenrir Exp $
*
* Authors: Christophe Massiot <massiot@via.ecp.fr>
* Laurent Aimar <fenrir@via.ecp.fr>
...
...
@@ -82,7 +82,6 @@ static int InitInstance( sout_instance_t * p_sout )
p_sout
->
psz_name
=
""
;
p_sout
->
p_access
=
NULL
;
p_sout
->
p_mux
=
NULL
;
p_sout
->
i_access_preheader
=
0
;
p_sout
->
i_mux_preheader
=
0
;
p_sout
->
i_nb_inputs
=
0
;
p_sout
->
pp_inputs
=
NULL
;
...
...
@@ -165,8 +164,7 @@ static int InitInstance( sout_instance_t * p_sout )
/* Find and open appropriate access module */
p_sout
->
p_access
=
module_Need
(
p_sout
,
"sout access"
,
p_sout
->
psz_access
);
sout_AccessOutNew
(
p_sout
,
p_sout
->
psz_access
,
p_sout
->
psz_name
);
if
(
p_sout
->
p_access
==
NULL
)
{
msg_Err
(
p_sout
,
"no suitable sout access module for `%s/%s://%s'"
,
...
...
@@ -174,6 +172,7 @@ static int InitInstance( sout_instance_t * p_sout )
return
-
1
;
}
/* Find and open appropriate mux module */
p_sout
->
p_mux
=
module_Need
(
p_sout
,
"sout mux"
,
p_sout
->
psz_mux
);
...
...
@@ -182,7 +181,8 @@ static int InitInstance( sout_instance_t * p_sout )
{
msg_Err
(
p_sout
,
"no suitable mux module for `%s/%s://%s'"
,
p_sout
->
psz_access
,
p_sout
->
psz_mux
,
p_sout
->
psz_name
);
module_Unneed
(
p_sout
,
p_sout
->
p_access
);
sout_AccessDelete
(
p_sout
->
p_access
);
return
-
1
;
}
...
...
@@ -206,7 +206,7 @@ void sout_DeleteInstance( sout_instance_t * p_sout )
}
if
(
p_sout
->
p_access
)
{
module_Unneed
(
p_sout
,
p_sout
->
p_access
);
sout_AccessDelete
(
p_sout
->
p_access
);
}
vlc_mutex_destroy
(
&
p_sout
->
lock
);
...
...
@@ -215,6 +215,71 @@ void sout_DeleteInstance( sout_instance_t * p_sout )
vlc_object_destroy
(
p_sout
);
}
/*****************************************************************************
* sout_AccessOutNew: allocate a new access out
*****************************************************************************/
sout_access_out_t
*
sout_AccessOutNew
(
sout_instance_t
*
p_sout
,
char
*
psz_access
,
char
*
psz_name
)
{
sout_access_out_t
*
p_access
;
if
(
!
(
p_access
=
vlc_object_create
(
p_sout
,
sizeof
(
sout_access_out_t
)
)
)
)
{
msg_Err
(
p_sout
,
"out of memory"
);
return
NULL
;
}
p_access
->
psz_access
=
strdup
(
psz_access
?
psz_access
:
""
);
p_access
->
psz_name
=
strdup
(
psz_name
?
psz_name
:
""
);
p_access
->
p_sout
=
p_sout
;
p_access
->
p_sys
=
NULL
;
p_access
->
pf_seek
=
NULL
;
p_access
->
pf_write
=
NULL
;
p_access
->
p_module
=
module_Need
(
p_access
,
"sout access"
,
p_access
->
psz_access
);;
if
(
!
p_access
->
p_module
)
{
vlc_object_destroy
(
p_access
);
p_access
=
NULL
;
}
return
p_access
;
}
/*****************************************************************************
* sout_AccessDelete: delete an access out
*****************************************************************************/
void
sout_AccessDelete
(
sout_access_out_t
*
p_access
)
{
if
(
p_access
->
p_module
)
{
module_Unneed
(
p_access
,
p_access
->
p_module
);
}
free
(
p_access
->
psz_access
);
free
(
p_access
->
psz_name
);
vlc_object_destroy
(
p_access
);
}
/*****************************************************************************
* sout_AccessSeek:
*****************************************************************************/
int
sout_AccessSeek
(
sout_access_out_t
*
p_access
,
off_t
i_pos
)
{
return
(
p_access
->
pf_seek
(
p_access
,
i_pos
)
);
}
/*****************************************************************************
* sout_AccessWrite:
*****************************************************************************/
int
sout_AccessWrite
(
sout_access_out_t
*
p_access
,
sout_buffer_t
*
p_buffer
)
{
return
(
p_access
->
pf_write
(
p_access
,
p_buffer
)
);
}
/*****************************************************************************
*
...
...
@@ -494,7 +559,7 @@ sout_buffer_t *sout_BufferNew( sout_instance_t *p_sout, size_t i_size )
#endif
p_buffer
=
malloc
(
sizeof
(
sout_buffer_t
)
);
i_prehader
=
p_sout
->
i_
access_preheader
+
p_sout
->
i_
mux_preheader
;
i_prehader
=
p_sout
->
i_mux_preheader
;
if
(
i_size
>
0
)
{
...
...
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