Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
V
vlc-2-2
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-2-2
Commits
211100f4
Commit
211100f4
authored
May 15, 2004
by
Laurent Aimar
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* all: improved perfs (using block_ChainLastAppend).
parent
62b37956
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
46 additions
and
12 deletions
+46
-12
include/vlc_block.h
include/vlc_block.h
+1
-0
modules/demux/ts.c
modules/demux/ts.c
+24
-6
modules/packetizer/mpegvideo.c
modules/packetizer/mpegvideo.c
+9
-5
src/misc/block.c
src/misc/block.c
+12
-1
No files found.
include/vlc_block.h
View file @
211100f4
...
...
@@ -112,6 +112,7 @@ static inline block_t *block_Realloc( block_t *p_block, int i_pre, int i_body )
return
p_block
->
pf_realloc
(
p_block
,
i_pre
,
i_body
);
}
VLC_EXPORT
(
void
,
block_ChainAppend
,
(
block_t
**
,
block_t
*
)
);
VLC_EXPORT
(
void
,
block_ChainLastAppend
,
(
block_t
***
ppp_last
,
block_t
*
)
);
VLC_EXPORT
(
void
,
block_ChainRelease
,
(
block_t
*
)
);
VLC_EXPORT
(
int
,
block_ChainExtract
,
(
block_t
*
,
void
*
,
int
)
);
VLC_EXPORT
(
block_t
*
,
block_ChainGather
,
(
block_t
*
)
);
...
...
modules/demux/ts.c
View file @
211100f4
...
...
@@ -186,8 +186,10 @@ typedef struct
es_format_t
fmt
;
es_out_id_t
*
id
;
block_t
*
p_pes
;
block_t
**
pp_last
;
es_mpeg4_descriptor_t
*
p_mpeg4desc
;
int
b_gather
;
}
ts_es_t
;
typedef
struct
...
...
@@ -790,7 +792,9 @@ static void PIDInit( ts_pid_t *pid, vlc_bool_t b_psi, ts_psi_t *p_owner )
es_format_Init
(
&
pid
->
es
->
fmt
,
UNKNOWN_ES
,
0
);
pid
->
es
->
id
=
NULL
;
pid
->
es
->
p_pes
=
NULL
;
pid
->
es
->
pp_last
=
&
pid
->
es
->
p_pes
;
pid
->
es
->
p_mpeg4desc
=
NULL
;
pid
->
es
->
b_gather
=
VLC_FALSE
;
}
}
...
...
@@ -857,6 +861,7 @@ static void ParsePES ( demux_t *p_demux, ts_pid_t *pid )
/* remove the pes from pid */
pid
->
es
->
p_pes
=
NULL
;
pid
->
es
->
pp_last
=
&
pid
->
es
->
p_pes
;
/* FIXME find real max size */
i_max
=
block_ChainExtract
(
p_pes
,
header
,
30
);
...
...
@@ -1003,9 +1008,16 @@ static void ParsePES ( demux_t *p_demux, ts_pid_t *pid )
p_pes
->
i_pts
=
i_pts
*
100
/
9
;
}
if
(
pid
->
es
->
b_gather
)
{
/* For mpeg4/mscodec we first gather the packet.
* This will make ffmpeg a lot happier */
p_block
=
block_ChainGather
(
p_pes
);
}
else
{
p_block
=
p_pes
;
}
for
(
i
=
0
;
i
<
pid
->
i_extra_es
;
i
++
)
{
...
...
@@ -1154,7 +1166,7 @@ static vlc_bool_t GatherPES( demux_t *p_demux, ts_pid_t *pid, block_t *p_bk )
i_ret
=
VLC_TRUE
;
}
pid
->
es
->
p_pes
=
p_bk
;
block_ChainLastAppend
(
&
pid
->
es
->
pp_last
,
p_bk
)
;
}
else
{
...
...
@@ -1167,7 +1179,7 @@ static vlc_bool_t GatherPES( demux_t *p_demux, ts_pid_t *pid, block_t *p_bk )
{
/* TODO check if when have gathered enough packets to form a
* PES (ie read PES size)*/
block_Chain
Append
(
&
pid
->
es
->
p_pes
,
p_bk
);
block_Chain
LastAppend
(
&
pid
->
es
->
pp_last
,
p_bk
);
}
}
}
...
...
@@ -1196,6 +1208,7 @@ static int PIDFillFormat( ts_pid_t *pid, int i_stream_type )
break
;
case
0x10
:
/* MPEG4 (video) */
es_format_Init
(
fmt
,
VIDEO_ES
,
VLC_FOURCC
(
'm'
,
'p'
,
'4'
,
'v'
)
);
pid
->
es
->
b_gather
=
VLC_TRUE
;
break
;
case
0x1B
:
/* H264 <- check transport syntax/needed descriptor */
es_format_Init
(
fmt
,
VIDEO_ES
,
VLC_FOURCC
(
'h'
,
'2'
,
'6'
,
'4'
)
);
...
...
@@ -1230,8 +1243,12 @@ static int PIDFillFormat( ts_pid_t *pid, int i_stream_type )
es_format_Init
(
fmt
,
AUDIO_ES
,
VLC_FOURCC
(
's'
,
'd'
,
'd'
,
'b'
)
);
break
;
case
0x06
:
/* PES_PRIVATE (fixed later) */
case
0xa0
:
/* MSCODEC vlc (video) (fixed later) */
es_format_Init
(
fmt
,
UNKNOWN_ES
,
0
);
pid
->
es
->
b_gather
=
VLC_TRUE
;
break
;
case
0x06
:
/* PES_PRIVATE (fixed later) */
default:
es_format_Init
(
fmt
,
UNKNOWN_ES
,
0
);
break
;
...
...
@@ -1849,6 +1866,7 @@ static void PMTCallBack( demux_t *p_demux, dvbpsi_pmt_t *p_pmt )
p_es
->
fmt
=
pid
->
es
->
fmt
;
p_es
->
id
=
NULL
;
p_es
->
p_pes
=
NULL
;
p_es
->
pp_last
=
&
p_es
->
p_pes
;
p_es
->
p_mpeg4desc
=
NULL
;
p_es
->
fmt
.
psz_language
=
malloc
(
4
);
...
...
modules/packetizer/mpegvideo.c
View file @
211100f4
...
...
@@ -82,6 +82,8 @@ struct decoder_sys_t
/* Current frame being built */
block_t
*
p_frame
;
block_t
**
pp_last
;
vlc_bool_t
b_frame_slice
;
mtime_t
i_pts
;
mtime_t
i_dts
;
...
...
@@ -147,6 +149,7 @@ static int Open( vlc_object_t *p_this )
p_sys
->
p_seq
=
NULL
;
p_sys
->
p_ext
=
NULL
;
p_sys
->
p_frame
=
NULL
;
p_sys
->
pp_last
=
&
p_sys
->
p_frame
;
p_sys
->
b_frame_slice
=
VLC_FALSE
;
p_sys
->
i_dts
=
p_sys
->
i_pts
=
0
;
...
...
@@ -216,6 +219,7 @@ static block_t *Packetize( decoder_t *p_dec, block_t **pp_block )
p_sys
->
i_state
=
STATE_NOSYNC
;
if
(
p_sys
->
p_frame
)
block_ChainRelease
(
p_sys
->
p_frame
);
p_sys
->
p_frame
=
NULL
;
p_sys
->
pp_last
=
&
p_sys
->
p_frame
;
p_sys
->
b_frame_slice
=
VLC_FALSE
;
block_Release
(
*
pp_block
);
return
NULL
;
...
...
@@ -332,6 +336,7 @@ static block_t *ParseMPEGBlock( decoder_t *p_dec, block_t *p_frag )
msg_Dbg
(
p_dec
,
"waiting for sequence start"
);
if
(
p_sys
->
p_frame
)
block_ChainRelease
(
p_sys
->
p_frame
);
p_sys
->
p_frame
=
NULL
;
p_sys
->
pp_last
=
&
p_sys
->
p_frame
;
p_sys
->
b_frame_slice
=
VLC_FALSE
;
}
...
...
@@ -440,6 +445,7 @@ static block_t *ParseMPEGBlock( decoder_t *p_dec, block_t *p_frag )
/* Reset context */
p_sys
->
p_frame
=
NULL
;
p_sys
->
pp_last
=
&
p_sys
->
p_frame
;
p_sys
->
b_frame_slice
=
VLC_FALSE
;
}
...
...
@@ -453,12 +459,10 @@ static block_t *ParseMPEGBlock( decoder_t *p_dec, block_t *p_frag )
p_sys
->
i_seq_old
>
p_sys
->
i_frame_rate
/
p_sys
->
i_frame_rate_base
)
{
/* Usefull for mpeg1: repeat sequence header every second */
block_ChainAppend
(
&
p_sys
->
p_frame
,
block_Duplicate
(
p_sys
->
p_seq
)
);
block_ChainLastAppend
(
&
p_sys
->
pp_last
,
block_Duplicate
(
p_sys
->
p_seq
)
);
if
(
p_sys
->
p_ext
)
{
block_ChainAppend
(
&
p_sys
->
p_frame
,
block_Duplicate
(
p_sys
->
p_ext
)
);
block_ChainLastAppend
(
&
p_sys
->
pp_last
,
block_Duplicate
(
p_sys
->
p_ext
)
);
}
p_sys
->
i_seq_old
=
0
;
...
...
@@ -572,7 +576,7 @@ static block_t *ParseMPEGBlock( decoder_t *p_dec, block_t *p_frag )
}
/* Append the block */
block_Chain
Append
(
&
p_sys
->
p_frame
,
p_frag
);
block_Chain
LastAppend
(
&
p_sys
->
pp_last
,
p_frag
);
return
p_pic
;
}
src/misc/block.c
View file @
211100f4
...
...
@@ -239,7 +239,6 @@ block_t *__block_New( vlc_object_t *p_obj, int i_size )
void
block_ChainAppend
(
block_t
**
pp_list
,
block_t
*
p_block
)
{
if
(
*
pp_list
==
NULL
)
{
*
pp_list
=
p_block
;
...
...
@@ -256,6 +255,18 @@ void block_ChainAppend( block_t **pp_list, block_t *p_block )
}
}
void
block_ChainLastAppend
(
block_t
***
ppp_last
,
block_t
*
p_block
)
{
block_t
*
p_last
=
p_block
;
/* Append the block */
**
ppp_last
=
p_block
;
/* Update last pointer */
while
(
p_last
->
p_next
)
p_last
=
p_last
->
p_next
;
*
ppp_last
=
&
p_last
->
p_next
;
}
void
block_ChainRelease
(
block_t
*
p_block
)
{
while
(
p_block
)
...
...
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