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
cb45b4c5
Commit
cb45b4c5
authored
Jun 23, 2004
by
Gildas Bazin
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
* modules/demux/m3u.c: allocate buffer for stream_Read().
* src/input/stream.c: fixed detection of EOF.
parent
9ef9462d
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
65 additions
and
51 deletions
+65
-51
modules/demux/m3u.c
modules/demux/m3u.c
+1
-3
src/input/stream.c
src/input/stream.c
+64
-48
No files found.
modules/demux/m3u.c
View file @
cb45b4c5
...
@@ -597,7 +597,7 @@ static int Demux( demux_t *p_demux )
...
@@ -597,7 +597,7 @@ static int Demux( demux_t *p_demux )
demux_sys_t
*
p_m3u
=
p_demux
->
p_sys
;
demux_sys_t
*
p_m3u
=
p_demux
->
p_sys
;
char
psz_line
[
MAX_LINE
];
char
psz_line
[
MAX_LINE
];
char
*
p_buf
=
0
,
eol_tok
;
char
p_buf
[
MAX_LINE
]
,
eol_tok
;
int
i_size
,
i_bufpos
,
i_linepos
=
0
;
int
i_size
,
i_bufpos
,
i_linepos
=
0
;
playlist_t
*
p_playlist
;
playlist_t
*
p_playlist
;
vlc_bool_t
b_discard
=
VLC_FALSE
;
vlc_bool_t
b_discard
=
VLC_FALSE
;
...
@@ -669,8 +669,6 @@ static int Demux( demux_t *p_demux )
...
@@ -669,8 +669,6 @@ static int Demux( demux_t *p_demux )
ProcessLine
(
p_demux
,
p_playlist
,
psz_line
,
&
psz_uri
,
&
psz_name
,
ProcessLine
(
p_demux
,
p_playlist
,
psz_line
,
&
psz_uri
,
&
psz_name
,
&
i_options
,
&
ppsz_options
,
&
i_position
);
&
i_options
,
&
ppsz_options
,
&
i_position
);
}
}
free
(
p_buf
);
}
}
if
(
i_linepos
&&
b_discard
!=
VLC_TRUE
&&
eol_tok
==
'\n'
)
if
(
i_linepos
&&
b_discard
!=
VLC_TRUE
&&
eol_tok
==
'\n'
)
...
...
src/input/stream.c
View file @
cb45b4c5
...
@@ -251,7 +251,6 @@ stream_t *stream_AccessNew( access_t *p_access )
...
@@ -251,7 +251,6 @@ stream_t *stream_AccessNew( access_t *p_access )
}
}
}
}
return
s
;
return
s
;
error:
error:
...
@@ -420,8 +419,7 @@ static void AStreamPrebufferBlock( stream_t *s )
...
@@ -420,8 +419,7 @@ static void AStreamPrebufferBlock( stream_t *s )
int64_t
i_date
=
mdate
();
int64_t
i_date
=
mdate
();
block_t
*
b
;
block_t
*
b
;
if
(
s
->
b_die
||
if
(
s
->
b_die
||
p_sys
->
block
.
i_size
>
STREAM_CACHE_PREBUFFER_SIZE
||
p_sys
->
block
.
i_size
>
STREAM_CACHE_PREBUFFER_SIZE
||
(
i_first
>
0
&&
i_first
+
STREAM_CACHE_PREBUFFER_LENGTH
<
i_date
)
)
(
i_first
>
0
&&
i_first
+
STREAM_CACHE_PREBUFFER_LENGTH
<
i_date
)
)
{
{
int64_t
i_byterate
;
int64_t
i_byterate
;
...
@@ -430,9 +428,10 @@ static void AStreamPrebufferBlock( stream_t *s )
...
@@ -430,9 +428,10 @@ static void AStreamPrebufferBlock( stream_t *s )
p_sys
->
stat
.
i_bytes
=
p_sys
->
block
.
i_size
;
p_sys
->
stat
.
i_bytes
=
p_sys
->
block
.
i_size
;
p_sys
->
stat
.
i_read_time
=
i_date
-
i_start
;
p_sys
->
stat
.
i_read_time
=
i_date
-
i_start
;
i_byterate
=
(
I64C
(
1000000
)
*
p_sys
->
stat
.
i_bytes
)
/
i_byterate
=
(
I64C
(
1000000
)
*
p_sys
->
stat
.
i_bytes
)
/
(
p_sys
->
stat
.
i_read_time
+
1
);
(
p_sys
->
stat
.
i_read_time
+
1
);
msg_Dbg
(
s
,
"prebuffering done %lld bytes in %llds - %lld kbytes/s"
,
msg_Dbg
(
s
,
"prebuffering done "
I64Fd
" bytes in "
I64Fd
"s - "
I64Fd
" kbytes/s"
,
p_sys
->
stat
.
i_bytes
,
p_sys
->
stat
.
i_bytes
,
p_sys
->
stat
.
i_read_time
/
I64C
(
1000000
),
p_sys
->
stat
.
i_read_time
/
I64C
(
1000000
),
i_byterate
/
1024
);
i_byterate
/
1024
);
...
@@ -518,8 +517,7 @@ static int AStreamPeekBlock( stream_t *s, uint8_t **pp_peek, int i_read )
...
@@ -518,8 +517,7 @@ static int AStreamPeekBlock( stream_t *s, uint8_t **pp_peek, int i_read )
block_t
*
b
;
block_t
*
b
;
int
i_offset
;
int
i_offset
;
if
(
p_sys
->
block
.
p_current
==
NULL
)
if
(
p_sys
->
block
.
p_current
==
NULL
)
return
0
;
/* EOF */
return
0
;
/* EOF */
/* We can directly give a pointer over our buffer */
/* We can directly give a pointer over our buffer */
if
(
i_read
<=
p_sys
->
block
.
p_current
->
i_buffer
-
p_sys
->
block
.
i_offset
)
if
(
i_read
<=
p_sys
->
block
.
p_current
->
i_buffer
-
p_sys
->
block
.
i_offset
)
...
@@ -627,7 +625,8 @@ static int AStreamSeekBlock( stream_t *s, int64_t i_pos )
...
@@ -627,7 +625,8 @@ static int AStreamSeekBlock( stream_t *s, int64_t i_pos )
if
(
!
b_aseek
)
if
(
!
b_aseek
)
{
{
b_seek
=
VLC_FALSE
;
b_seek
=
VLC_FALSE
;
msg_Warn
(
s
,
"%lld bytes need to be skipped (access non seekable)"
,
msg_Warn
(
s
,
I64Fd
" bytes need to be skipped "
"(access non seekable)"
,
i_offset
-
p_sys
->
block
.
i_size
);
i_offset
-
p_sys
->
block
.
i_size
);
}
}
else
else
...
@@ -645,7 +644,7 @@ static int AStreamSeekBlock( stream_t *s, int64_t i_pos )
...
@@ -645,7 +644,7 @@ static int AStreamSeekBlock( stream_t *s, int64_t i_pos )
else
else
b_seek
=
VLC_TRUE
;
b_seek
=
VLC_TRUE
;
msg_Dbg
(
s
,
"b_seek=%d th*avg=%d skip=
%lld"
,
msg_Dbg
(
s
,
"b_seek=%d th*avg=%d skip=
"
I64Fd
,
b_seek
,
i_th
*
i_avg
,
i_skip
);
b_seek
,
i_th
*
i_avg
,
i_skip
);
}
}
}
}
...
@@ -783,26 +782,32 @@ static int AStreamReadStream( stream_t *s, void *p_read, int i_read )
...
@@ -783,26 +782,32 @@ static int AStreamReadStream( stream_t *s, void *p_read, int i_read )
stream_sys_t
*
p_sys
=
s
->
p_sys
;
stream_sys_t
*
p_sys
=
s
->
p_sys
;
stream_track_t
*
tk
=
&
p_sys
->
stream
.
tk
[
p_sys
->
stream
.
i_tk
];
stream_track_t
*
tk
=
&
p_sys
->
stream
.
tk
[
p_sys
->
stream
.
i_tk
];
uint8_t
*
p_data
=
(
uint8_t
*
)
p_read
;
uint8_t
*
p_data
=
(
uint8_t
*
)
p_read
;
int
i_data
=
0
;
int
i_data
=
0
;
if
(
tk
->
i_start
>=
tk
->
i_end
)
if
(
tk
->
i_start
>=
tk
->
i_end
)
return
0
;
/* EOF */
return
0
;
/* EOF */
/*msg_Dbg( s, "AStreamReadStream: %d pos=%lld tk=%d start=%lld offset=%d end=%lld",
#if 0
i_read,
msg_Dbg( s, "AStreamReadStream: %d pos="I64Fd" tk=%d start="I64Fd
p_sys->i_pos,
" offset=%d end="I64Fd,
p_sys->stream.i_tk,
i_read, p_sys->i_pos, p_sys->stream.i_tk,
tk->i_start, p_sys->stream.i_offset, tk->i_end );*/
tk->i_start, p_sys->stream.i_offset, tk->i_end );
#endif
while
(
i_data
<
i_read
)
while
(
i_data
<
i_read
)
{
{
int
i_off
=
(
tk
->
i_start
+
p_sys
->
stream
.
i_offset
)
%
STREAM_CACHE_TRACK_SIZE
;
int
i_off
=
(
tk
->
i_start
+
p_sys
->
stream
.
i_offset
)
%
int
i_current
=
__MIN
(
tk
->
i_end
-
tk
->
i_start
-
p_sys
->
stream
.
i_offset
,
STREAM_CACHE_TRACK_SIZE
-
i_off
);
STREAM_CACHE_TRACK_SIZE
;
int
i_current
=
__MIN
(
tk
->
i_end
-
tk
->
i_start
-
p_sys
->
stream
.
i_offset
,
STREAM_CACHE_TRACK_SIZE
-
i_off
);
int
i_copy
=
__MIN
(
i_current
,
i_read
-
i_data
);
int
i_copy
=
__MIN
(
i_current
,
i_read
-
i_data
);
if
(
i_copy
<=
0
)
break
;
/* EOF */
/* Copy data */
/* Copy data */
/
/msg_Dbg( s, "AStreamReadStream: copy %d", i_copy );
/
* msg_Dbg( s, "AStreamReadStream: copy %d", i_copy ); */
if
(
p_data
)
if
(
p_data
)
{
{
memcpy
(
p_data
,
&
tk
->
p_buffer
[
i_off
],
i_copy
);
memcpy
(
p_data
,
&
tk
->
p_buffer
[
i_off
],
i_copy
);
...
@@ -821,9 +826,8 @@ static int AStreamReadStream( stream_t *s, void *p_read, int i_read )
...
@@ -821,9 +826,8 @@ static int AStreamReadStream( stream_t *s, void *p_read, int i_read )
{
{
if
(
AStreamRefillStream
(
s
)
)
if
(
AStreamRefillStream
(
s
)
)
{
{
/* Eof */
/* EOF */
if
(
tk
->
i_start
>=
tk
->
i_end
)
if
(
tk
->
i_start
>=
tk
->
i_end
)
break
;
break
;
}
}
}
}
}
}
...
@@ -837,14 +841,14 @@ static int AStreamPeekStream( stream_t *s, uint8_t **pp_peek, int i_read )
...
@@ -837,14 +841,14 @@ static int AStreamPeekStream( stream_t *s, uint8_t **pp_peek, int i_read )
stream_track_t
*
tk
=
&
p_sys
->
stream
.
tk
[
p_sys
->
stream
.
i_tk
];
stream_track_t
*
tk
=
&
p_sys
->
stream
.
tk
[
p_sys
->
stream
.
i_tk
];
int64_t
i_off
;
int64_t
i_off
;
if
(
tk
->
i_start
>=
tk
->
i_end
)
if
(
tk
->
i_start
>=
tk
->
i_end
)
return
0
;
/* EOF */
return
0
;
/* EOF */
/*msg_Dbg( s, "AStreamPeekStream: %d pos=%lld tk=%d start=%lld offset=%d end=%lld",
#if 0
i_read,
msg_Dbg( s, "AStreamPeekStream: %d pos="I64Fd" tk=%d "
p_sys->i_pos,
"start="I64Fd" offset=%d end="I64Fd,
p_sys->stream.i_tk,
i_read, p_sys->i_pos, p_sys->stream.i_tk,
tk->i_start, p_sys->stream.i_offset, tk->i_end );*/
tk->i_start, p_sys->stream.i_offset, tk->i_end );
#endif
/* Avoid problem, but that should *never* happen */
/* Avoid problem, but that should *never* happen */
if
(
i_read
>
STREAM_CACHE_TRACK_SIZE
/
2
)
if
(
i_read
>
STREAM_CACHE_TRACK_SIZE
/
2
)
...
@@ -852,8 +856,7 @@ static int AStreamPeekStream( stream_t *s, uint8_t **pp_peek, int i_read )
...
@@ -852,8 +856,7 @@ static int AStreamPeekStream( stream_t *s, uint8_t **pp_peek, int i_read )
while
(
tk
->
i_end
-
tk
->
i_start
-
p_sys
->
stream
.
i_offset
<
i_read
)
while
(
tk
->
i_end
-
tk
->
i_start
-
p_sys
->
stream
.
i_offset
<
i_read
)
{
{
if
(
AStreamRefillStream
(
s
)
)
if
(
AStreamRefillStream
(
s
)
)
break
;
break
;
}
}
if
(
tk
->
i_end
-
tk
->
i_start
-
p_sys
->
stream
.
i_offset
<
i_read
)
if
(
tk
->
i_end
-
tk
->
i_start
-
p_sys
->
stream
.
i_offset
<
i_read
)
...
@@ -874,8 +877,10 @@ static int AStreamPeekStream( stream_t *s, uint8_t **pp_peek, int i_read )
...
@@ -874,8 +877,10 @@ static int AStreamPeekStream( stream_t *s, uint8_t **pp_peek, int i_read )
p_sys
->
p_peek
=
malloc
(
i_read
);
p_sys
->
p_peek
=
malloc
(
i_read
);
}
}
memcpy
(
p_sys
->
p_peek
,
&
tk
->
p_buffer
[
i_off
],
STREAM_CACHE_TRACK_SIZE
-
i_off
);
memcpy
(
p_sys
->
p_peek
,
&
tk
->
p_buffer
[
i_off
],
memcpy
(
&
p_sys
->
p_peek
[
STREAM_CACHE_TRACK_SIZE
-
i_off
],
&
tk
->
p_buffer
[
0
],
i_read
-
(
STREAM_CACHE_TRACK_SIZE
-
i_off
)
);
STREAM_CACHE_TRACK_SIZE
-
i_off
);
memcpy
(
&
p_sys
->
p_peek
[
STREAM_CACHE_TRACK_SIZE
-
i_off
],
&
tk
->
p_buffer
[
0
],
i_read
-
(
STREAM_CACHE_TRACK_SIZE
-
i_off
)
);
*
pp_peek
=
p_sys
->
p_peek
;
*
pp_peek
=
p_sys
->
p_peek
;
return
i_read
;
return
i_read
;
...
@@ -891,12 +896,14 @@ static int AStreamSeekStream( stream_t *s, int64_t i_pos )
...
@@ -891,12 +896,14 @@ static int AStreamSeekStream( stream_t *s, int64_t i_pos )
int
i_new
;
int
i_new
;
int
i
;
int
i
;
/*
#if 0
msg_Dbg( s, "AStreamSeekStream: to %lld pos=%lld tk=%d start=%lld offset=%d end=%lld",
msg_Dbg( s, "AStreamSeekStream: to "I64Fd" pos="I64Fd
i_pos,
"tk=%d start="I64Fd" offset=%d end="I64Fd,
p_sys->i_pos,
i_pos, p_sys->i_pos, p_sys->stream.i_tk,
p_sys->stream.i_tk,
p_sys->stream.tk[p_sys->stream.i_tk].i_start,
p_sys->stream.tk[p_sys->stream.i_tk].i_start, p_sys->stream.i_offset, p_sys->stream.tk[p_sys->stream.i_tk].i_end );*/
p_sys->stream.i_offset,
p_sys->stream.tk[p_sys->stream.i_tk].i_end );
#endif
/* Seek in our current track ? */
/* Seek in our current track ? */
...
@@ -926,9 +933,10 @@ static int AStreamSeekStream( stream_t *s, int64_t i_pos )
...
@@ -926,9 +933,10 @@ static int AStreamSeekStream( stream_t *s, int64_t i_pos )
if
(
i_pos
>=
tk
->
i_start
&&
i_pos
<=
tk
->
i_end
)
if
(
i_pos
>=
tk
->
i_start
&&
i_pos
<=
tk
->
i_end
)
{
{
/*msg_Dbg( s, "AStreamSeekStream: reusing %d start=%lld end=%lld",
#if 0
i,
msg_Dbg( s, "AStreamSeekStream: reusing %d start="I64Fd
tk->i_start, tk->i_end );*/
" end="I64Fd, i, tk->i_start, tk->i_end );
#endif
/* Seek at the end of the buffer */
/* Seek at the end of the buffer */
if
(
p_access
->
pf_seek
(
p_access
,
tk
->
i_end
)
)
if
(
p_access
->
pf_seek
(
p_access
,
tk
->
i_end
)
)
return
VLC_EGENERIC
;
return
VLC_EGENERIC
;
...
@@ -1005,11 +1013,15 @@ static int AStreamRefillStream( stream_t *s )
...
@@ -1005,11 +1013,15 @@ static int AStreamRefillStream( stream_t *s )
stream_sys_t
*
p_sys
=
s
->
p_sys
;
stream_sys_t
*
p_sys
=
s
->
p_sys
;
access_t
*
p_access
=
p_sys
->
p_access
;
access_t
*
p_access
=
p_sys
->
p_access
;
stream_track_t
*
tk
=
&
p_sys
->
stream
.
tk
[
p_sys
->
stream
.
i_tk
];
stream_track_t
*
tk
=
&
p_sys
->
stream
.
tk
[
p_sys
->
stream
.
i_tk
];
/* We read but won't increase i_start after initial start+offset */
int
i_toread
=
__MIN
(
p_sys
->
stream
.
i_used
,
STREAM_CACHE_TRACK_SIZE
-
(
tk
->
i_end
-
tk
->
i_start
-
p_sys
->
stream
.
i_offset
)
);
/* We read but won't increase i_start after initial start + offset */
int
i_toread
=
__MIN
(
p_sys
->
stream
.
i_used
,
STREAM_CACHE_TRACK_SIZE
-
(
tk
->
i_end
-
tk
->
i_start
-
p_sys
->
stream
.
i_offset
)
);
int64_t
i_start
,
i_stop
;
int64_t
i_start
,
i_stop
;
//msg_Dbg( s, "AStreamRefillStream: toread=%d", i_toread );
if
(
i_toread
<=
0
)
return
VLC_EGENERIC
;
/* EOF */
/* msg_Dbg( s, "AStreamRefillStream: toread=%d", i_toread ); */
i_start
=
mdate
();
i_start
=
mdate
();
while
(
i_toread
>
0
)
while
(
i_toread
>
0
)
...
@@ -1022,7 +1034,8 @@ static int AStreamRefillStream( stream_t *s )
...
@@ -1022,7 +1034,8 @@ static int AStreamRefillStream( stream_t *s )
i_read
=
__MIN
(
i_toread
,
STREAM_CACHE_TRACK_SIZE
-
i_off
);
i_read
=
__MIN
(
i_toread
,
STREAM_CACHE_TRACK_SIZE
-
i_off
);
i_read
=
p_access
->
pf_read
(
p_access
,
&
tk
->
p_buffer
[
i_off
],
i_read
);
i_read
=
p_access
->
pf_read
(
p_access
,
&
tk
->
p_buffer
[
i_off
],
i_read
);
//msg_Dbg( s, "AStreamRefillStream: read=%d", i_read );
/* msg_Dbg( s, "AStreamRefillStream: read=%d", i_read ); */
if
(
i_read
<
0
)
if
(
i_read
<
0
)
{
{
msleep
(
STREAM_DATA_WAIT
);
msleep
(
STREAM_DATA_WAIT
);
...
@@ -1088,7 +1101,8 @@ static void AStreamPrebufferStream( stream_t *s )
...
@@ -1088,7 +1101,8 @@ static void AStreamPrebufferStream( stream_t *s )
i_byterate
=
(
I64C
(
1000000
)
*
p_sys
->
stat
.
i_bytes
)
/
i_byterate
=
(
I64C
(
1000000
)
*
p_sys
->
stat
.
i_bytes
)
/
(
p_sys
->
stat
.
i_read_time
+
1
);
(
p_sys
->
stat
.
i_read_time
+
1
);
msg_Dbg
(
s
,
"prebuffering done %lld bytes in %llds - %lld kbytes/s"
,
msg_Dbg
(
s
,
"prebuffering done "
I64Fd
" bytes in "
I64Fd
"s - "
I64Fd
" kbytes/s"
,
p_sys
->
stat
.
i_bytes
,
p_sys
->
stat
.
i_bytes
,
p_sys
->
stat
.
i_read_time
/
I64C
(
1000000
),
p_sys
->
stat
.
i_read_time
/
I64C
(
1000000
),
i_byterate
/
1024
);
i_byterate
/
1024
);
...
@@ -1096,8 +1110,10 @@ static void AStreamPrebufferStream( stream_t *s )
...
@@ -1096,8 +1110,10 @@ static void AStreamPrebufferStream( stream_t *s )
}
}
/* */
/* */
i_read
=
__MIN
(
p_sys
->
stream
.
i_read_size
,
STREAM_CACHE_TRACK_SIZE
-
tk
->
i_end
);
i_read
=
__MIN
(
p_sys
->
stream
.
i_read_size
,
i_read
=
p_access
->
pf_read
(
p_access
,
&
tk
->
p_buffer
[
tk
->
i_end
],
i_read
);
STREAM_CACHE_TRACK_SIZE
-
tk
->
i_end
);
i_read
=
p_access
->
pf_read
(
p_access
,
&
tk
->
p_buffer
[
tk
->
i_end
],
i_read
);
if
(
i_read
<
0
)
if
(
i_read
<
0
)
{
{
msleep
(
STREAM_DATA_WAIT
);
msleep
(
STREAM_DATA_WAIT
);
...
...
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