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
14aec216
Commit
14aec216
authored
Oct 21, 2002
by
Laurent Aimar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* configure.ac.in Makefile.am: enable asf demuxer plugin
* modules/demux/asf/*: some clean up
parent
df45b8c5
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
78 additions
and
56 deletions
+78
-56
configure.ac.in
configure.ac.in
+10
-0
modules/Makefile.am
modules/Makefile.am
+1
-0
modules/demux/asf/asf.c
modules/demux/asf/asf.c
+59
-50
modules/demux/asf/libasf.c
modules/demux/asf/libasf.c
+3
-3
modules/demux/asf/libasf.h
modules/demux/asf/libasf.h
+5
-3
No files found.
configure.ac.in
View file @
14aec216
...
...
@@ -1042,6 +1042,16 @@ then
PLUGINS="${PLUGINS} avi"
fi
dnl
dnl ASF demux plugin
dnl
AC_ARG_ENABLE(asf,
[ --enable-asf ASF demux module (default enabled)])
if test "x${enable_asf}" != "xno"
then
PLUGINS="${PLUGINS} asf"
fi
dnl
dnl AAC demux plugin
dnl
...
...
modules/Makefile.am
View file @
14aec216
...
...
@@ -32,6 +32,7 @@ EXTRA_DIST = \
demux/Modules.am
\
demux/aac/Modules.am
\
demux/avi/Modules.am
\
demux/asf/Modules.am
\
demux/mp4/Modules.am
\
demux/mpeg/Modules.am
\
demux/util/Modules.am
\
...
...
modules/demux/asf/asf.c
View file @
14aec216
...
...
@@ -2,7 +2,7 @@
* asf.c : ASFv01 file input module for vlc
*****************************************************************************
* Copyright (C) 2001 VideoLAN
* $Id: asf.c,v 1.
1 2002/10/20 17:22:33
fenrir Exp $
* $Id: asf.c,v 1.
2 2002/10/21 09:18:37
fenrir Exp $
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
*
* This program is free software; you can redistribute it and/or modify
...
...
@@ -83,7 +83,7 @@ static int Activate( vlc_object_t * p_this )
p_input
->
pf_demux
=
Demux
;
/* a little test to see if it could be a asf stream */
if
(
input_Peek
(
p_input
,
&
p_peek
,
16
)
<
8
)
if
(
input_Peek
(
p_input
,
&
p_peek
,
16
)
<
16
)
{
msg_Warn
(
p_input
,
"ASF v1.0 plugin discarded (cannot peek)"
);
return
(
-
1
);
...
...
@@ -103,8 +103,6 @@ static int Activate( vlc_object_t * p_this )
return
(
-
1
);
}
memset
(
p_demux
,
0
,
sizeof
(
demux_sys_t
)
);
p_input
->
p_demux_data
=
p_demux
;
/* Now load all object ( except raw data ) */
if
(
!
ASF_ReadObjectRoot
(
p_input
,
&
p_demux
->
root
,
p_input
->
stream
.
b_seekable
)
)
...
...
@@ -122,7 +120,7 @@ static int Activate( vlc_object_t * p_this )
return
(
-
1
);
}
if
(
!
(
p_demux
->
p_fp
=
ASF_FindObject
(
(
asf_object_t
*
)
p_demux
->
root
.
p_hdr
,
if
(
!
(
p_demux
->
p_fp
=
ASF_FindObject
(
p_demux
->
root
.
p_hdr
,
&
asf_object_file_properties_guid
,
0
)
)
)
{
ASF_FreeObjectRoot
(
p_input
,
&
p_demux
->
root
);
...
...
@@ -139,7 +137,7 @@ static int Activate( vlc_object_t * p_this )
return
(
-
1
);
}
p_demux
->
i_streams
=
ASF_CountObject
(
(
asf_object_t
*
)
p_demux
->
root
.
p_hdr
,
p_demux
->
i_streams
=
ASF_CountObject
(
p_demux
->
root
.
p_hdr
,
&
asf_object_stream_properties_guid
);
if
(
!
p_demux
->
i_streams
)
{
...
...
@@ -176,12 +174,13 @@ static int Activate( vlc_object_t * p_this )
asf_stream_t
*
p_stream
;
asf_object_stream_properties_t
*
p_sp
;
p_sp
=
(
asf_object_stream_properties_t
*
)
ASF_FindObject
(
(
asf_object_t
*
)
p_demux
->
root
.
p_hdr
,
&
asf_object_stream_properties_guid
,
i_stream
);
p_sp
=
ASF_FindObject
(
p_demux
->
root
.
p_hdr
,
&
asf_object_stream_properties_guid
,
i_stream
);
p_stream
=
p_demux
->
stream
[
p_sp
->
i_stream_number
]
=
malloc
(
sizeof
(
asf_stream_t
)
);
p_stream
=
p_demux
->
stream
[
p_sp
->
i_stream_number
]
=
malloc
(
sizeof
(
asf_stream_t
)
);
memset
(
p_stream
,
0
,
sizeof
(
asf_stream_t
)
);
p_stream
->
p_sp
=
p_sp
;
...
...
@@ -218,6 +217,10 @@ static int Activate( vlc_object_t * p_this )
p_sp
->
i_stream_number
);
switch
(
i_codec
)
{
case
(
0x01
):
p_stream
->
p_es
->
i_fourcc
=
VLC_FOURCC
(
'a'
,
'r'
,
'a'
,
'w'
);
break
;
case
(
0x50
):
case
(
0x55
):
p_stream
->
p_es
->
i_fourcc
=
...
...
@@ -276,7 +279,6 @@ static int Activate( vlc_object_t * p_this )
p_input
->
stream
.
p_selected_program
->
b_is_ok
=
1
;
vlc_mutex_unlock
(
&
p_input
->
stream
.
stream_lock
);
// go to first packet
p_demux
->
i_data_begin
=
p_demux
->
root
.
p_data
->
i_object_pos
+
50
;
if
(
p_demux
->
root
.
p_data
->
i_object_size
!=
0
)
{
// local file
...
...
@@ -287,6 +289,9 @@ static int Activate( vlc_object_t * p_this )
{
// live/broacast
p_demux
->
i_data_end
=
-
1
;
}
// go to first packet
ASF_SeekAbsolute
(
p_input
,
p_demux
->
i_data_begin
);
return
(
0
);
}
...
...
@@ -295,7 +300,7 @@ static int Activate( vlc_object_t * p_this )
* Demux: read packet and send them to decoders
*****************************************************************************/
#define GETVALUE2b( bits, var, def ) \
switch(
bits
) \
switch(
(bits)&0x03
) \
{ \
case 1: var = p_peek[i_skip]; i_skip++; break; \
case 2: var = GetWLE( p_peek + i_skip ); i_skip+= 2; break; \
...
...
@@ -313,8 +318,9 @@ static int Demux( input_thread_t *p_input )
if
(
p_input
->
stream
.
p_selected_program
->
i_synchro_state
==
SYNCHRO_REINIT
)
{
off_t
i_offset
;
i_offset
=
ASF_TellAbsolute
(
p_input
)
-
p_demux
->
i_data_begin
;
if
(
i_offset
<
0
)
{
i_offset
=
0
;
...
...
@@ -324,7 +330,7 @@ static int Demux( input_thread_t *p_input )
ASF_SeekAbsolute
(
p_input
,
p_demux
->
i_data_begin
+
i_offset
);
p_demux
->
i_time
=
0
;
for
(
i
=
0
;
i
<
12
7
;
i
++
)
for
(
i
=
0
;
i
<
12
8
;
i
++
)
{
#define p_stream p_demux->stream[i]
if
(
p_stream
)
...
...
@@ -343,9 +349,6 @@ static int Demux( input_thread_t *p_input )
/* update pcr XXX in mpeg scale so in 90000 unit/s */
p_demux
->
i_pcr
=
p_demux
->
i_time
*
9
/
100
;
// /* we will read 100ms for each stream so */
// p_demux->i_time += 100 * 1000;
for
(
i
=
0
;
i
<
10
;
i
++
)
// parse 10 packets
{
...
...
@@ -409,9 +412,9 @@ static int Demux( input_thread_t *p_input )
b_packet_multiple_payload
=
i_packet_flags
&
0x01
;
/* read some value */
GETVALUE2b
(
(
i_packet_flags
>>
5
)
&
0x3
,
i_packet_length
,
i_data_packet_min
);
GETVALUE2b
(
(
i_packet_flags
>>
1
)
&
0x3
,
i_packet_sequence
,
0
);
GETVALUE2b
(
(
i_packet_flags
>>
3
)
&
0x
3
,
i_packet_padding_length
,
0
);
GETVALUE2b
(
i_packet_flags
>>
5
,
i_packet_length
,
i_data_packet_min
);
GETVALUE2b
(
i_packet_flags
>>
1
,
i_packet_sequence
,
0
);
GETVALUE2b
(
i_packet_flags
>>
3
,
i_packet_padding_length
,
0
);
i_packet_send_time
=
GetDWLE
(
p_peek
+
i_skip
);
i_skip
+=
4
;
i_packet_duration
=
GetWLE
(
p_peek
+
i_skip
);
i_skip
+=
2
;
...
...
@@ -449,9 +452,9 @@ static int Demux( input_thread_t *p_input )
i_stream_number
=
p_peek
[
i_skip
]
&
0x7f
;
i_skip
++
;
GETVALUE2b
(
(
i_packet_property
>>
4
)
&
0x03
,
i_media_object_number
,
0
);
GETVALUE2b
(
(
i_packet_property
>>
2
)
&
0x03
,
i_tmp
,
0
);
GETVALUE2b
(
i_packet_property
&
0x03
,
i_replicated_data_length
,
0
);
GETVALUE2b
(
i_packet_property
>>
4
,
i_media_object_number
,
0
);
GETVALUE2b
(
i_packet_property
>>
2
,
i_tmp
,
0
);
GETVALUE2b
(
i_packet_property
,
i_replicated_data_length
,
0
);
if
(
i_replicated_data_length
>
1
)
// should be at least 8 bytes
{
...
...
@@ -490,6 +493,7 @@ static int Demux( input_thread_t *p_input )
i_payload_data_length
=
i_packet_length
-
i_packet_padding_length
-
i_skip
;
}
#if 0
msg_Dbg( p_input,
"payload(%d/%d) stream_number:%d media_object_number:%d media_object_offset:%d replicated_data_length:%d payload_data_length %d",
i_payload + 1,
...
...
@@ -499,7 +503,7 @@ static int Demux( input_thread_t *p_input )
i_media_object_offset,
i_replicated_data_length,
i_payload_data_length );
#endif
if
(
!
(
p_stream
=
p_demux
->
stream
[
i_stream_number
]
)
)
{
...
...
@@ -515,7 +519,10 @@ static int Demux( input_thread_t *p_input )
}
for
(
i_payload_data_pos
=
0
;
i_payload_data_pos
<
i_payload_data_length
;
i_payload_data_pos
+=
i_sub_payload_data_length
)
for
(
i_payload_data_pos
=
0
;
i_payload_data_pos
<
i_payload_data_length
&&
i_packet_size_left
>
0
;
i_payload_data_pos
+=
i_sub_payload_data_length
)
{
data_packet_t
*
p_data
;
int
i_read
;
...
...
@@ -530,10 +537,9 @@ static int Demux( input_thread_t *p_input )
i_sub_payload_data_length
=
i_payload_data_length
;
}
if
(
p_stream
->
p_pes
&&
i_media_object_offset
==
0
)
// I don't use i_media_object_number, sould I ?
{
// send complete packet to decoder
/* FIXME I don't use i_media_object_number, sould I ? */
if
(
p_stream
->
p_pes
&&
i_media_object_offset
==
0
)
{
/* send complete packet to decoder */
if
(
p_stream
->
p_pes
->
i_pes_size
>
0
)
{
input_DecodePES
(
p_stream
->
p_es
->
p_decoder_fifo
,
p_stream
->
p_pes
);
...
...
@@ -543,7 +549,6 @@ static int Demux( input_thread_t *p_input )
if
(
!
p_stream
->
p_pes
)
// add a new PES
{
mtime_t
i_date
;
p_stream
->
i_time
=
(
(
mtime_t
)
i_pts
+
i_payload
*
(
mtime_t
)
i_pts_delta
);
p_stream
->
p_pes
=
input_NewPES
(
p_input
->
p_method_data
);
...
...
@@ -581,36 +586,27 @@ static int Demux( input_thread_t *p_input )
p_stream
->
p_pes
->
i_nb_data
++
;
i_skip
=
0
;
if
(
i_packet_size_left
<=
0
)
if
(
i_packet_size_left
>
0
)
{
break
;
}
if
(
input_Peek
(
p_input
,
&
p_peek
,
i_packet_size_left
)
<
i_packet_size_left
)
{
// EOF ?
msg_Err
(
p_input
,
"cannot peek, EOF ?"
);
return
(
0
);
if
(
input_Peek
(
p_input
,
&
p_peek
,
i_packet_size_left
)
<
i_packet_size_left
)
{
// EOF ?
msg_Warn
(
p_input
,
"cannot peek, EOF ?"
);
return
(
0
);
}
}
}
if
(
i_packet_size_left
<=
0
)
{
break
;
}
}
loop_ok:
if
(
i_packet_size_left
>
0
)
{
if
(
!
ASF_SkipBytes
(
p_input
,
i_packet_size_left
)
)
{
msg_
Err
(
p_input
,
"cannot skip data, EOF ?"
);
msg_
Warn
(
p_input
,
"cannot skip data, EOF ?"
);
return
(
0
);
}
}
continue
;
loop_error_recovery:
...
...
@@ -622,11 +618,10 @@ loop_error_recovery:
}
ASF_SkipBytes
(
p_input
,
i_data_packet_min
);
continue
;
}
// loop over packet
p_demux
->
i_time
=
0
;
for
(
i
=
0
;
i
<
12
7
;
i
++
)
for
(
i
=
0
;
i
<
12
8
;
i
++
)
{
#define p_stream p_demux->stream[i]
if
(
p_stream
&&
p_stream
->
p_es
&&
p_stream
->
p_es
->
p_decoder_fifo
)
...
...
@@ -649,9 +644,23 @@ static void Deactivate( vlc_object_t * p_this )
input_thread_t
*
p_input
=
(
input_thread_t
*
)
p_this
;
demux_sys_t
*
p_demux
=
p_input
->
p_demux_data
;
int
i_stream
;
msg_Dbg
(
p_input
,
"Freeing all memory"
);
ASF_FreeObjectRoot
(
p_input
,
&
p_demux
->
root
);
for
(
i_stream
=
0
;
i_stream
<
128
;
i_stream
++
)
{
#define p_stream p_demux->stream[i_stream]
if
(
p_stream
)
{
if
(
p_stream
->
p_pes
)
{
input_DeletePES
(
p_input
->
p_method_data
,
p_stream
->
p_pes
);
}
free
(
p_stream
);
}
#undef p_stream
}
#undef FREE
}
...
...
modules/demux/asf/libasf.c
View file @
14aec216
...
...
@@ -2,7 +2,7 @@
* libasf.c :
*****************************************************************************
* Copyright (C) 2001 VideoLAN
* $Id: libasf.c,v 1.
1 2002/10/20 17:22:33
fenrir Exp $
* $Id: libasf.c,v 1.
2 2002/10/21 09:18:37
fenrir Exp $
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
*
* This program is free software; you can redistribute it and/or modify
...
...
@@ -892,7 +892,7 @@ void ASF_FreeObjectRoot( input_thread_t *p_input,
}
int
ASF_CountObject
(
asf_object_t
*
p_obj
,
const
guid_t
*
p_guid
)
int
__
ASF_CountObject
(
asf_object_t
*
p_obj
,
const
guid_t
*
p_guid
)
{
int
i_count
;
asf_object_t
*
p_child
;
...
...
@@ -915,7 +915,7 @@ int ASF_CountObject( asf_object_t *p_obj, const guid_t *p_guid )
return
(
i_count
);
}
asf_object_t
*
ASF_FindObject
(
asf_object_t
*
p_obj
,
const
guid_t
*
p_guid
,
int
i_number
)
void
*
__
ASF_FindObject
(
asf_object_t
*
p_obj
,
const
guid_t
*
p_guid
,
int
i_number
)
{
asf_object_t
*
p_child
;
...
...
modules/demux/asf/libasf.h
View file @
14aec216
...
...
@@ -2,7 +2,7 @@
* libasf.h :
*****************************************************************************
* Copyright (C) 2001 VideoLAN
* $Id: libasf.h,v 1.
1 2002/10/20 17:22:33
fenrir Exp $
* $Id: libasf.h,v 1.
2 2002/10/21 09:18:37
fenrir Exp $
* Authors: Laurent Aimar <fenrir@via.ecp.fr>
*
* This program is free software; you can redistribute it and/or modify
...
...
@@ -440,8 +440,10 @@ int ASF_ReadObjectRoot( input_thread_t *p_input,
int
b_seekable
);
void
ASF_FreeObjectRoot
(
input_thread_t
*
p_input
,
asf_object_root_t
*
p_root
);
#define ASF_CountObject( a, b ) __ASF_CountObject( (asf_object_t*)(a), b )
int
__ASF_CountObject
(
asf_object_t
*
p_obj
,
const
guid_t
*
p_guid
);
int
ASF_CountObject
(
asf_object_t
*
p_obj
,
const
guid_t
*
p_guid
);
asf_object_t
*
ASF_FindObject
(
asf_object_t
*
p_obj
,
const
guid_t
*
p_guid
,
int
i_number
);
#define ASF_FindObject( a, b, c ) __ASF_FindObject( (asf_object_t*)(a), b, c )
void
*
__
ASF_FindObject
(
asf_object_t
*
p_obj
,
const
guid_t
*
p_guid
,
int
i_number
);
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