Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
8978feda
Commit
8978feda
authored
Mar 05, 2011
by
Anton Khirnov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
avio: introduce an AVIOContext.seekable field
Use it instead of url_is_streamed and AVIOContext.is_streamed.
parent
79997def
Hide whitespace changes
Inline
Side-by-side
Showing
40 changed files
with
91 additions
and
72 deletions
+91
-72
ffserver.c
ffserver.c
+4
-4
aiffdec.c
libavformat/aiffdec.c
+1
-1
aiffenc.c
libavformat/aiffenc.c
+1
-1
ape.c
libavformat/ape.c
+1
-1
asfenc.c
libavformat/asfenc.c
+2
-2
au.c
libavformat/au.c
+1
-1
avidec.c
libavformat/avidec.c
+2
-2
avienc.c
libavformat/avienc.c
+9
-9
avio.h
libavformat/avio.h
+16
-3
aviobuf.c
libavformat/aviobuf.c
+7
-1
bink.c
libavformat/bink.c
+1
-1
cafdec.c
libavformat/cafdec.c
+2
-2
ffmdec.c
libavformat/ffmdec.c
+1
-1
filmstripdec.c
libavformat/filmstripdec.c
+1
-1
flacenc.c
libavformat/flacenc.c
+1
-1
flvdec.c
libavformat/flvdec.c
+2
-2
gxfenc.c
libavformat/gxfenc.c
+1
-1
id3v1.c
libavformat/id3v1.c
+1
-1
matroskadec.c
libavformat/matroskadec.c
+1
-1
matroskaenc.c
libavformat/matroskaenc.c
+6
-6
mmf.c
libavformat/mmf.c
+1
-1
mov.c
libavformat/mov.c
+6
-6
movenc.c
libavformat/movenc.c
+2
-2
mpc.c
libavformat/mpc.c
+1
-1
mpeg.c
libavformat/mpeg.c
+1
-1
mxfenc.c
libavformat/mxfenc.c
+1
-1
nutdec.c
libavformat/nutdec.c
+1
-1
oggdec.c
libavformat/oggdec.c
+1
-1
r3d.c
libavformat/r3d.c
+1
-1
rmdec.c
libavformat/rmdec.c
+1
-1
rmenc.c
libavformat/rmenc.c
+3
-3
rsoenc.c
libavformat/rsoenc.c
+1
-1
soxenc.c
libavformat/soxenc.c
+1
-1
swfenc.c
libavformat/swfenc.c
+1
-1
tty.c
libavformat/tty.c
+1
-1
utils.c
libavformat/utils.c
+1
-1
vc1testenc.c
libavformat/vc1testenc.c
+1
-1
vocdec.c
libavformat/vocdec.c
+1
-1
wav.c
libavformat/wav.c
+2
-2
wv.c
libavformat/wv.c
+2
-2
No files found.
ffserver.c
View file @
8978feda
...
...
@@ -2260,7 +2260,7 @@ static int http_prepare_data(HTTPContext *c)
/* XXX: potential leak */
return
-
1
;
}
c
->
fmt_ctx
.
pb
->
is_streamed
=
1
;
c
->
fmt_ctx
.
pb
->
seekable
=
0
;
/*
* HACK to avoid mpeg ps muxer to spit many underflow errors
...
...
@@ -2399,7 +2399,7 @@ static int http_prepare_data(HTTPContext *c)
}
ost
=
ctx
->
streams
[
pkt
.
stream_index
];
ctx
->
pb
->
is_streamed
=
1
;
ctx
->
pb
->
seekable
=
0
;
if
(
pkt
.
dts
!=
AV_NOPTS_VALUE
)
pkt
.
dts
=
av_rescale_q
(
pkt
.
dts
,
ist
->
time_base
,
ost
->
time_base
);
if
(
pkt
.
pts
!=
AV_NOPTS_VALUE
)
...
...
@@ -2436,7 +2436,7 @@ static int http_prepare_data(HTTPContext *c)
/* XXX: potential leak */
return
-
1
;
}
c
->
fmt_ctx
.
pb
->
is_streamed
=
1
;
c
->
fmt_ctx
.
pb
->
seekable
=
0
;
av_write_trailer
(
ctx
);
len
=
url_close_dyn_buf
(
ctx
->
pb
,
&
c
->
pb_buffer
);
c
->
buffer_ptr
=
c
->
pb_buffer
;
...
...
@@ -2723,7 +2723,7 @@ static int http_receive_data(HTTPContext *c)
pb
=
avio_alloc_context
(
c
->
buffer
,
c
->
buffer_end
-
c
->
buffer
,
0
,
NULL
,
NULL
,
NULL
,
NULL
);
pb
->
is_streamed
=
1
;
pb
->
seekable
=
0
;
if
(
av_open_input_stream
(
&
s
,
pb
,
c
->
stream
->
feed_filename
,
fmt_in
,
NULL
)
<
0
)
{
av_free
(
pb
);
...
...
libavformat/aiffdec.c
View file @
8978feda
...
...
@@ -238,7 +238,7 @@ static int aiff_read_header(AVFormatContext *s,
offset
+=
avio_tell
(
pb
);
/* Compute absolute data offset */
if
(
st
->
codec
->
block_align
)
/* Assume COMM already parsed */
goto
got_sound
;
if
(
url_is_streamed
(
pb
)
)
{
if
(
!
pb
->
seekable
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"file is not seekable
\n
"
);
return
-
1
;
}
...
...
libavformat/aiffenc.c
View file @
8978feda
...
...
@@ -124,7 +124,7 @@ static int aiff_write_trailer(AVFormatContext *s)
end_size
++
;
}
if
(
!
url_is_streamed
(
s
->
pb
)
)
{
if
(
s
->
pb
->
seekable
)
{
/* File length */
avio_seek
(
pb
,
aiff
->
form
,
SEEK_SET
);
avio_wb32
(
pb
,
file_size
-
aiff
->
form
-
4
);
...
...
libavformat/ape.c
View file @
8978feda
...
...
@@ -296,7 +296,7 @@ static int ape_read_header(AVFormatContext * s, AVFormatParameters * ap)
ape_dumpinfo
(
s
,
ape
);
/* try to read APE tags */
if
(
!
url_is_streamed
(
pb
)
)
{
if
(
pb
->
seekable
)
{
ff_ape_parse_tag
(
s
);
avio_seek
(
pb
,
0
,
SEEK_SET
);
}
...
...
libavformat/asfenc.c
View file @
8978feda
...
...
@@ -347,7 +347,7 @@ static int asf_write_header1(AVFormatContext *s, int64_t file_size, int64_t data
avio_wl64
(
pb
,
duration
);
/* end time stamp (in 100ns units) */
avio_wl64
(
pb
,
asf
->
duration
);
/* duration (in 100ns units) */
avio_wl64
(
pb
,
PREROLL_TIME
);
/* start time stamp */
avio_wl32
(
pb
,
(
asf
->
is_streamed
||
url_is_streamed
(
pb
)
)
?
3
:
2
);
/* ??? */
avio_wl32
(
pb
,
(
asf
->
is_streamed
||
!
pb
->
seekable
)
?
3
:
2
);
/* ??? */
avio_wl32
(
pb
,
s
->
packet_size
);
/* packet size */
avio_wl32
(
pb
,
s
->
packet_size
);
/* packet size */
avio_wl32
(
pb
,
bit_rate
);
/* Nominal data rate in bps */
...
...
@@ -866,7 +866,7 @@ static int asf_write_trailer(AVFormatContext *s)
}
avio_flush
(
s
->
pb
);
if
(
asf
->
is_streamed
||
url_is_streamed
(
s
->
pb
)
)
{
if
(
asf
->
is_streamed
||
!
s
->
pb
->
seekable
)
{
put_chunk
(
s
,
0x4524
,
0
,
0
);
/* end of stream */
}
else
{
/* rewrite an updated header */
...
...
libavformat/au.c
View file @
8978feda
...
...
@@ -91,7 +91,7 @@ static int au_write_trailer(AVFormatContext *s)
AVIOContext
*
pb
=
s
->
pb
;
int64_t
file_size
;
if
(
!
url_is_streamed
(
s
->
pb
)
)
{
if
(
s
->
pb
->
seekable
)
{
/* update file size */
file_size
=
avio_tell
(
pb
);
...
...
libavformat/avidec.c
View file @
8978feda
...
...
@@ -665,7 +665,7 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap)
break
;
case
MKTAG
(
'i'
,
'n'
,
'd'
,
'x'
):
i
=
avio_tell
(
pb
);
if
(
!
url_is_streamed
(
pb
)
&&
!
(
s
->
flags
&
AVFMT_FLAG_IGNIDX
)){
if
(
pb
->
seekable
&&
!
(
s
->
flags
&
AVFMT_FLAG_IGNIDX
)){
read_braindead_odml_indx
(
s
,
0
);
}
avio_seek
(
pb
,
i
+
size
,
SEEK_SET
);
...
...
@@ -721,7 +721,7 @@ static int avi_read_header(AVFormatContext *s, AVFormatParameters *ap)
return
-
1
;
}
if
(
!
avi
->
index_loaded
&&
!
url_is_streamed
(
pb
)
)
if
(
!
avi
->
index_loaded
&&
pb
->
seekable
)
avi_load_index
(
s
);
avi
->
index_loaded
=
1
;
avi
->
non_interleaved
|=
guess_ni_flag
(
s
);
...
...
libavformat/avienc.c
View file @
8978feda
...
...
@@ -197,7 +197,7 @@ static int avi_write_header(AVFormatContext *s)
}
avio_wl32
(
pb
,
bitrate
/
8
);
/* XXX: not quite exact */
avio_wl32
(
pb
,
0
);
/* padding */
if
(
url_is_streamed
(
pb
)
)
if
(
!
pb
->
seekable
)
avio_wl32
(
pb
,
AVIF_TRUSTCKTYPE
|
AVIF_ISINTERLEAVED
);
/* flags */
else
avio_wl32
(
pb
,
AVIF_TRUSTCKTYPE
|
AVIF_HASINDEX
|
AVIF_ISINTERLEAVED
);
/* flags */
...
...
@@ -259,7 +259,7 @@ static int avi_write_header(AVFormatContext *s)
avio_wl32
(
pb
,
0
);
/* start */
avist
->
frames_hdr_strm
=
avio_tell
(
pb
);
/* remember this offset to fill later */
if
(
url_is_streamed
(
pb
)
)
if
(
!
pb
->
seekable
)
avio_wl32
(
pb
,
AVI_MAX_RIFF_SIZE
);
/* FIXME: this may be broken, but who cares */
else
avio_wl32
(
pb
,
0
);
/* length, XXX: filled later */
...
...
@@ -303,7 +303,7 @@ static int avi_write_header(AVFormatContext *s)
}
}
if
(
!
url_is_streamed
(
pb
)
)
{
if
(
pb
->
seekable
)
{
unsigned
char
tag
[
5
];
int
j
;
...
...
@@ -362,7 +362,7 @@ static int avi_write_header(AVFormatContext *s)
ff_end_tag
(
pb
,
list2
);
}
if
(
!
url_is_streamed
(
pb
)
)
{
if
(
pb
->
seekable
)
{
/* AVI could become an OpenDML one, if it grows beyond 2Gb range */
avi
->
odml_list
=
ff_start_tag
(
pb
,
"JUNK"
);
ffio_wfourcc
(
pb
,
"odml"
);
...
...
@@ -406,7 +406,7 @@ static int avi_write_ix(AVFormatContext *s)
char
ix_tag
[]
=
"ix00"
;
int
i
,
j
;
assert
(
!
url_is_streamed
(
pb
)
);
assert
(
pb
->
seekable
);
if
(
avi
->
riff_id
>
AVI_MASTER_INDEX_SIZE
)
return
-
1
;
...
...
@@ -464,7 +464,7 @@ static int avi_write_idx1(AVFormatContext *s)
int
i
;
char
tag
[
5
];
if
(
!
url_is_streamed
(
pb
)
)
{
if
(
pb
->
seekable
)
{
AVIStream
*
avist
;
AVIIentry
*
ie
=
0
,
*
tie
;
int
empty
,
stream_id
=
-
1
;
...
...
@@ -532,7 +532,7 @@ static int avi_write_packet(AVFormatContext *s, AVPacket *pkt)
avist
->
packet_count
++
;
// Make sure to put an OpenDML chunk when the file size exceeds the limits
if
(
!
url_is_streamed
(
pb
)
&&
if
(
pb
->
seekable
&&
(
avio_tell
(
pb
)
-
avi
->
riff_start
>
AVI_MAX_RIFF_SIZE
))
{
avi_write_ix
(
s
);
...
...
@@ -552,7 +552,7 @@ static int avi_write_packet(AVFormatContext *s, AVPacket *pkt)
avist
->
audio_strm_length
+=
size
;
}
if
(
!
url_is_streamed
(
s
->
pb
)
)
{
if
(
s
->
pb
->
seekable
)
{
AVIIndex
*
idx
=
&
avist
->
indexes
;
int
cl
=
idx
->
entry
/
AVI_INDEX_CLUSTER_SIZE
;
int
id
=
idx
->
entry
%
AVI_INDEX_CLUSTER_SIZE
;
...
...
@@ -590,7 +590,7 @@ static int avi_write_trailer(AVFormatContext *s)
int
i
,
j
,
n
,
nb_frames
;
int64_t
file_size
;
if
(
!
url_is_streamed
(
pb
)
){
if
(
pb
->
seekable
){
if
(
avi
->
riff_id
==
1
)
{
ff_end_tag
(
pb
,
avi
->
movi_list
);
res
=
avi_write_idx1
(
s
);
...
...
libavformat/avio.h
View file @
8978feda
...
...
@@ -332,6 +332,8 @@ attribute_deprecated int av_register_protocol(URLProtocol *protocol);
*/
int
av_register_protocol2
(
URLProtocol
*
protocol
,
int
size
);
#define AVIO_SEEKABLE_NORMAL 0x0001
/**< Seeking works like for a local file */
/**
* Bytestream IO Context.
* New fields can be added to the end with minor version bumps.
...
...
@@ -351,7 +353,9 @@ typedef struct {
int
must_flush
;
/**< true if the next seek should flush */
int
eof_reached
;
/**< true if eof reached */
int
write_flag
;
/**< true if open for writing */
int
is_streamed
;
#if FF_API_OLD_AVIO
attribute_deprecated
int
is_streamed
;
#endif
int
max_packet_size
;
unsigned
long
checksum
;
unsigned
char
*
checksum_ptr
;
...
...
@@ -360,6 +364,10 @@ typedef struct {
int
(
*
read_pause
)(
void
*
opaque
,
int
pause
);
int64_t
(
*
read_seek
)(
void
*
opaque
,
int
stream_index
,
int64_t
timestamp
,
int
flags
);
/**
* A combination of AVIO_SEEKABLE_ flags or 0 when the stream is not seekable.
*/
int
seekable
;
}
AVIOContext
;
#if FF_API_OLD_AVIO
...
...
@@ -604,10 +612,15 @@ unsigned int avio_rb24(AVIOContext *s);
unsigned
int
avio_rb32
(
AVIOContext
*
s
);
uint64_t
avio_rb64
(
AVIOContext
*
s
);
static
inline
int
url_is_streamed
(
AVIOContext
*
s
)
#if FF_API_OLD_AVIO
/**
* @deprecated Use AVIOContext.seekable field directly.
*/
attribute_deprecated
static
inline
int
url_is_streamed
(
AVIOContext
*
s
)
{
return
s
->
is_streamed
;
return
!
s
->
seekable
;
}
#endif
/**
* Create and initialize a AVIOContext for accessing the
...
...
libavformat/aviobuf.c
View file @
8978feda
...
...
@@ -62,7 +62,10 @@ int ffio_init_context(AVIOContext *s,
s
->
must_flush
=
0
;
s
->
eof_reached
=
0
;
s
->
error
=
0
;
#if FF_API_OLD_AVIO
s
->
is_streamed
=
0
;
#endif
s
->
seekable
=
AVIO_SEEKABLE_NORMAL
;
s
->
max_packet_size
=
0
;
s
->
update_checksum
=
NULL
;
if
(
!
read_packet
&&
!
write_flag
){
...
...
@@ -202,7 +205,7 @@ int64_t avio_seek(AVIOContext *s, int64_t offset, int whence)
offset1
>=
0
&&
offset1
<=
(
s
->
buf_end
-
s
->
buffer
))
{
/* can do the seek inside the buffer */
s
->
buf_ptr
=
s
->
buffer
+
offset1
;
}
else
if
((
s
->
is_streamed
||
}
else
if
((
!
s
->
seekable
||
offset1
<=
s
->
buf_end
+
SHORT_SEEK_THRESHOLD
-
s
->
buffer
)
&&
!
s
->
write_flag
&&
offset1
>=
0
&&
(
whence
!=
SEEK_END
||
force
))
{
...
...
@@ -831,7 +834,10 @@ int url_fdopen(AVIOContext **s, URLContext *h)
av_freep
(
s
);
return
AVERROR
(
EIO
);
}
#if FF_API_OLD_AVIO
(
*
s
)
->
is_streamed
=
h
->
is_streamed
;
#endif
(
*
s
)
->
seekable
=
h
->
is_streamed
?
0
:
AVIO_SEEKABLE_NORMAL
;
(
*
s
)
->
max_packet_size
=
max_packet_size
;
if
(
h
->
prot
)
{
(
*
s
)
->
read_pause
=
(
int
(
*
)(
void
*
,
int
))
h
->
prot
->
url_read_pause
;
...
...
libavformat/bink.c
View file @
8978feda
...
...
@@ -247,7 +247,7 @@ static int read_seek(AVFormatContext *s, int stream_index, int64_t timestamp, in
BinkDemuxContext
*
bink
=
s
->
priv_data
;
AVStream
*
vst
=
s
->
streams
[
0
];
if
(
url_is_streamed
(
s
->
pb
)
)
if
(
!
s
->
pb
->
seekable
)
return
-
1
;
/* seek to the first frame */
...
...
libavformat/cafdec.c
View file @
8978feda
...
...
@@ -223,7 +223,7 @@ static int read_header(AVFormatContext *s,
/* stop at data chunk if seeking is not supported or
data chunk size is unknown */
if
(
found_data
&&
(
caf
->
data_size
<
0
||
url_is_streamed
(
pb
)
))
if
(
found_data
&&
(
caf
->
data_size
<
0
||
!
pb
->
seekable
))
break
;
tag
=
avio_rb32
(
pb
);
...
...
@@ -236,7 +236,7 @@ static int read_header(AVFormatContext *s,
avio_skip
(
pb
,
4
);
/* edit count */
caf
->
data_start
=
avio_tell
(
pb
);
caf
->
data_size
=
size
<
0
?
-
1
:
size
-
4
;
if
(
caf
->
data_size
>
0
&&
!
url_is_streamed
(
pb
)
)
if
(
caf
->
data_size
>
0
&&
pb
->
seekable
)
avio_skip
(
pb
,
caf
->
data_size
);
found_data
=
1
;
break
;
...
...
libavformat/ffmdec.c
View file @
8978feda
...
...
@@ -281,7 +281,7 @@ static int ffm_read_header(AVFormatContext *s, AVFormatParameters *ap)
goto
fail
;
ffm
->
write_index
=
avio_rb64
(
pb
);
/* get also filesize */
if
(
!
url_is_streamed
(
pb
)
)
{
if
(
pb
->
seekable
)
{
ffm
->
file_size
=
avio_size
(
pb
);
if
(
ffm
->
write_index
)
adjust_write_index
(
s
);
...
...
libavformat/filmstripdec.c
View file @
8978feda
...
...
@@ -40,7 +40,7 @@ static int read_header(AVFormatContext *s,
AVIOContext
*
pb
=
s
->
pb
;
AVStream
*
st
;
if
(
url_is_streamed
(
s
->
pb
)
)
if
(
!
s
->
pb
->
seekable
)
return
AVERROR
(
EIO
);
avio_seek
(
pb
,
avio_size
(
pb
)
-
36
,
SEEK_SET
);
...
...
libavformat/flacenc.c
View file @
8978feda
...
...
@@ -98,7 +98,7 @@ static int flac_write_trailer(struct AVFormatContext *s)
if
(
!
ff_flac_is_extradata_valid
(
s
->
streams
[
0
]
->
codec
,
&
format
,
&
streaminfo
))
return
-
1
;
if
(
!
url_is_streamed
(
pb
)
)
{
if
(
pb
->
seekable
)
{
/* rewrite the STREAMINFO header block data */
file_size
=
avio_tell
(
pb
);
avio_seek
(
pb
,
8
,
SEEK_SET
);
...
...
libavformat/flvdec.c
View file @
8978feda
...
...
@@ -437,7 +437,7 @@ static int flv_read_packet(AVFormatContext *s, AVPacket *pkt)
}
// if not streamed and no duration from metadata then seek to end to find the duration from the timestamps
if
(
!
url_is_streamed
(
s
->
pb
)
&&
(
!
s
->
duration
||
s
->
duration
==
AV_NOPTS_VALUE
)){
if
(
s
->
pb
->
seekable
&&
(
!
s
->
duration
||
s
->
duration
==
AV_NOPTS_VALUE
)){
int
size
;
const
int64_t
pos
=
avio_tell
(
s
->
pb
);
const
int64_t
fsize
=
avio_size
(
s
->
pb
);
...
...
@@ -539,7 +539,7 @@ static int flv_read_seek2(AVFormatContext *s, int stream_index,
if (ts - min_ts > (uint64_t)(max_ts - ts)) flags |= AVSEEK_FLAG_BACKWARD;
if (
url_is_streamed(s->pb)
) {
if (
!s->pb->seekable
) {
if (stream_index < 0) {
stream_index = av_find_default_stream_index(s);
if (stream_index < 0)
...
...
libavformat/gxfenc.c
View file @
8978feda
...
...
@@ -634,7 +634,7 @@ static int gxf_write_header(AVFormatContext *s)
uint8_t
tracks
[
255
]
=
{
0
};
int
i
,
media_info
=
0
;
if
(
url_is_streamed
(
pb
)
)
{
if
(
!
pb
->
seekable
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"gxf muxer does not support streamed output, patch welcome"
);
return
-
1
;
}
...
...
libavformat/id3v1.c
View file @
8978feda
...
...
@@ -229,7 +229,7 @@ void ff_id3v1_read(AVFormatContext *s)
uint8_t
buf
[
ID3v1_TAG_SIZE
];
int64_t
filesize
,
position
=
avio_tell
(
s
->
pb
);
if
(
!
url_is_streamed
(
s
->
pb
)
)
{
if
(
s
->
pb
->
seekable
)
{
/* XXX: change that */
filesize
=
avio_size
(
s
->
pb
);
if
(
filesize
>
128
)
{
...
...
libavformat/matroskadec.c
View file @
8978feda
...
...
@@ -1117,7 +1117,7 @@ static void matroska_execute_seekhead(MatroskaDemuxContext *matroska)
int
i
;
// we should not do any seeking in the streaming case
if
(
url_is_streamed
(
matroska
->
ctx
->
pb
)
||
if
(
!
matroska
->
ctx
->
pb
->
seekable
||
(
matroska
->
ctx
->
flags
&
AVFMT_FLAG_IGNIDX
))
return
;
...
...
libavformat/matroskaenc.c
View file @
8978feda
...
...
@@ -848,7 +848,7 @@ static int mkv_write_header(AVFormatContext *s)
if
(
ret
<
0
)
return
ret
;
}
if
(
url_is_streamed
(
s
->
pb
)
)
if
(
!
s
->
pb
->
seekable
)
mkv_write_seekhead
(
pb
,
mkv
->
main_seekhead
);
mkv
->
cues
=
mkv_start_cues
(
mkv
->
segment_offset
);
...
...
@@ -1024,7 +1024,7 @@ static int mkv_write_packet_internal(AVFormatContext *s, AVPacket *pkt)
return
AVERROR
(
EINVAL
);
}
if
(
url_is_streamed
(
s
->
pb
)
)
{
if
(
!
s
->
pb
->
seekable
)
{
if
(
!
mkv
->
dyn_bc
)
url_open_dyn_buf
(
&
mkv
->
dyn_bc
);
pb
=
mkv
->
dyn_bc
;
...
...
@@ -1076,16 +1076,16 @@ static int mkv_copy_packet(MatroskaMuxContext *mkv, const AVPacket *pkt)
static
int
mkv_write_packet
(
AVFormatContext
*
s
,
AVPacket
*
pkt
)
{
MatroskaMuxContext
*
mkv
=
s
->
priv_data
;
AVIOContext
*
pb
=
url_is_streamed
(
s
->
pb
)
?
mkv
->
dyn_bc
:
s
->
pb
;
AVIOContext
*
pb
=
s
->
pb
->
seekable
?
s
->
pb
:
mkv
->
dyn_bc
;
AVCodecContext
*
codec
=
s
->
streams
[
pkt
->
stream_index
]
->
codec
;
int
ret
,
keyframe
=
!!
(
pkt
->
flags
&
AV_PKT_FLAG_KEY
);
int64_t
ts
=
mkv
->
tracks
[
pkt
->
stream_index
].
write_dts
?
pkt
->
dts
:
pkt
->
pts
;
int
cluster_size
=
avio_tell
(
pb
)
-
(
url_is_streamed
(
s
->
pb
)
?
0
:
mkv
->
cluster_pos
);
int
cluster_size
=
avio_tell
(
pb
)
-
(
s
->
pb
->
seekable
?
mkv
->
cluster_pos
:
0
);
// start a new cluster every 5 MB or 5 sec, or 32k / 1 sec for streaming or
// after 4k and on a keyframe
if
(
mkv
->
cluster_pos
&&
((
url_is_streamed
(
s
->
pb
)
&&
(
cluster_size
>
32
*
1024
||
ts
>
mkv
->
cluster_pts
+
1000
))
((
!
s
->
pb
->
seekable
&&
(
cluster_size
>
32
*
1024
||
ts
>
mkv
->
cluster_pts
+
1000
))
||
cluster_size
>
5
*
1024
*
1024
||
ts
>
mkv
->
cluster_pts
+
5000
||
(
codec
->
codec_type
==
AVMEDIA_TYPE_VIDEO
&&
keyframe
&&
cluster_size
>
4
*
1024
)))
{
av_log
(
s
,
AV_LOG_DEBUG
,
"Starting new cluster at offset %"
PRIu64
...
...
@@ -1139,7 +1139,7 @@ static int mkv_write_trailer(AVFormatContext *s)
end_ebml_master
(
pb
,
mkv
->
cluster
);
}
if
(
!
url_is_streamed
(
pb
)
)
{
if
(
pb
->
seekable
)
{
cuespos
=
mkv_write_cues
(
pb
,
mkv
->
cues
,
s
->
nb_streams
);
ret
=
mkv_add_seekhead_entry
(
mkv
->
main_seekhead
,
MATROSKA_ID_CUES
,
cuespos
);
...
...
libavformat/mmf.c
View file @
8978feda
...
...
@@ -133,7 +133,7 @@ static int mmf_write_trailer(AVFormatContext *s)
int64_t
pos
,
size
;
int
gatetime
;
if
(
!
url_is_streamed
(
s
->
pb
)
)
{
if
(
s
->
pb
->
seekable
)
{
/* Fill in length fields */
end_tag_be
(
pb
,
mmf
->
awapos
);
end_tag_be
(
pb
,
mmf
->
atrpos
);
...
...
libavformat/mov.c
View file @
8978feda
...
...
@@ -304,7 +304,7 @@ static int mov_read_default(MOVContext *c, AVIOContext *pb, MOVAtom atom)
if
(
err
<
0
)
return
err
;
if
(
c
->
found_moov
&&
c
->
found_mdat
&&
(
url_is_streamed
(
pb
)
||
start_pos
+
a
.
size
==
avio_size
(
pb
)))
(
!
pb
->
seekable
||
start_pos
+
a
.
size
==
avio_size
(
pb
)))
return
0
;
left
=
a
.
size
-
avio_tell
(
pb
)
+
start_pos
;
if
(
left
>
0
)
/* skip garbage at atom end */
...
...
@@ -2354,7 +2354,7 @@ static int mov_read_header(AVFormatContext *s, AVFormatParameters *ap)
mov
->
fc
=
s
;
/* .mov and .mp4 aren't streamable anyway (only progressive download if moov is before mdat) */
if
(
!
url_is_streamed
(
pb
)
)
if
(
pb
->
seekable
)
atom
.
size
=
avio_size
(
pb
);
else
atom
.
size
=
INT64_MAX
;
...
...
@@ -2370,7 +2370,7 @@ static int mov_read_header(AVFormatContext *s, AVFormatParameters *ap)
}
av_dlog
(
mov
->
fc
,
"on_parse_exit_offset=%lld
\n
"
,
avio_tell
(
pb
));
if
(
!
url_is_streamed
(
pb
)
&&
mov
->
chapter_track
>
0
)
if
(
pb
->
seekable
&&
mov
->
chapter_track
>
0
)
mov_read_chapters
(
s
);
return
0
;
...
...
@@ -2388,8 +2388,8 @@ static AVIndexEntry *mov_find_next_sample(AVFormatContext *s, AVStream **st)
AVIndexEntry
*
current_sample
=
&
avst
->
index_entries
[
msc
->
current_sample
];
int64_t
dts
=
av_rescale
(
current_sample
->
timestamp
,
AV_TIME_BASE
,
msc
->
time_scale
);
av_dlog
(
s
,
"stream %d, sample %d, dts %"
PRId64
"
\n
"
,
i
,
msc
->
current_sample
,
dts
);
if
(
!
sample
||
(
url_is_streamed
(
s
->
pb
)
&&
current_sample
->
pos
<
sample
->
pos
)
||
(
!
url_is_streamed
(
s
->
pb
)
&&
if
(
!
sample
||
(
!
s
->
pb
->
seekable
&&
current_sample
->
pos
<
sample
->
pos
)
||
(
s
->
pb
->
seekable
&&
((
msc
->
pb
!=
s
->
pb
&&
dts
<
best_dts
)
||
(
msc
->
pb
==
s
->
pb
&&
((
FFABS
(
best_dts
-
dts
)
<=
AV_TIME_BASE
&&
current_sample
->
pos
<
sample
->
pos
)
||
(
FFABS
(
best_dts
-
dts
)
>
AV_TIME_BASE
&&
dts
<
best_dts
))))))
{
...
...
@@ -2413,7 +2413,7 @@ static int mov_read_packet(AVFormatContext *s, AVPacket *pkt)
sample
=
mov_find_next_sample
(
s
,
&
st
);
if
(
!
sample
)
{
mov
->
found_mdat
=
0
;
if
(
!
url_is_streamed
(
s
->
pb
)
||
if
(
s
->
pb
->
seekable
||
mov_read_default
(
mov
,
s
->
pb
,
(
MOVAtom
){
AV_RL32
(
"root"
),
INT64_MAX
})
<
0
||
s
->
pb
->
eof_reached
)
return
AVERROR_EOF
;
...
...
libavformat/movenc.c
View file @
8978feda
...
...
@@ -1955,7 +1955,7 @@ int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt)
unsigned
int
samplesInChunk
=
0
;
int
size
=
pkt
->
size
;
if
(
url_is_streamed
(
s
->
pb
)
)
return
0
;
/* Can't handle that */
if
(
!
s
->
pb
->
seekable
)
return
0
;
/* Can't handle that */
if
(
!
size
)
return
0
;
/* Discard 0 sized packets */
if
(
enc
->
codec_id
==
CODEC_ID_AMR_NB
)
{
...
...
@@ -2090,7 +2090,7 @@ static int mov_write_header(AVFormatContext *s)
MOVMuxContext
*
mov
=
s
->
priv_data
;
int
i
,
hint_track
=
0
;
if
(
url_is_streamed
(
s
->
pb
)
)
{
if
(
!
s
->
pb
->
seekable
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"muxer does not support non seekable output
\n
"
);
return
-
1
;
}
...
...
libavformat/mpc.c
View file @
8978feda
...
...
@@ -93,7 +93,7 @@ static int mpc_read_header(AVFormatContext *s, AVFormatParameters *ap)
st
->
duration
=
c
->
fcount
;
/* try to read APE tags */
if
(
!
url_is_streamed
(
s
->
pb
)
)
{
if
(
s
->
pb
->
seekable
)
{
int64_t
pos
=
avio_tell
(
s
->
pb
);
ff_ape_parse_tag
(
s
);
if
(
!
av_metadata_get
(
s
->
metadata
,
""
,
NULL
,
AV_METADATA_IGNORE_SUFFIX
))
...
...
libavformat/mpeg.c
View file @
8978feda
...
...
@@ -402,7 +402,7 @@ static int mpegps_read_pes_header(AVFormatContext *s,
int
i
;
for
(
i
=
0
;
i
<
s
->
nb_streams
;
i
++
){
if
(
startcode
==
s
->
streams
[
i
]
->
id
&&
!
url_is_streamed
(
s
->
pb
)
/* index useless on streams anyway */
)
{
s
->
pb
->
seekable
/* index useless on streams anyway */
)
{
ff_reduce_index
(
s
,
i
);
av_add_index_entry
(
s
->
streams
[
i
],
*
ppos
,
dts
,
0
,
0
,
AVINDEX_KEYFRAME
/* FIXME keyframe? */
);
}
...
...
libavformat/mxfenc.c
View file @
8978feda
...
...
@@ -1784,7 +1784,7 @@ static int mxf_write_footer(AVFormatContext *s)
mxf_write_klv_fill
(
s
);
mxf_write_random_index_pack
(
s
);
if
(
!
url_is_streamed
(
s
->
pb
)
)
{
if
(
s
->
pb
->
seekable
)
{
avio_seek
(
pb
,
0
,
SEEK_SET
);
if
(
mxf
->
edit_unit_byte_count
)
{
mxf_write_partition
(
s
,
1
,
2
,
header_closed_partition_key
,
1
);
...
...
libavformat/nutdec.c
View file @
8978feda
...
...
@@ -653,7 +653,7 @@ static int nut_read_header(AVFormatContext *s, AVFormatParameters *ap)
s
->
data_offset
=
pos
-
8
;
if
(
!
url_is_streamed
(
bc
)
){
if
(
bc
->
seekable
){
int64_t
orig_pos
=
avio_tell
(
bc
);
find_and_decode_index
(
nut
);
avio_seek
(
bc
,
orig_pos
,
SEEK_SET
);
...
...
libavformat/oggdec.c
View file @
8978feda
...
...
@@ -455,7 +455,7 @@ ogg_get_length (AVFormatContext * s)
int
i
;
int64_t
size
,
end
;
if
(
url_is_streamed
(
s
->
pb
)
)
if
(
!
s
->
pb
->
seekable
)
return
0
;
// already set
...
...
libavformat/r3d.c
View file @
8978feda
...
...
@@ -177,7 +177,7 @@ static int r3d_read_header(AVFormatContext *s, AVFormatParameters *ap)
s
->
data_offset
=
avio_tell
(
s
->
pb
);
av_dlog
(
s
,
"data offset %#llx
\n
"
,
s
->
data_offset
);
if
(
url_is_streamed
(
s
->
pb
)
)
if
(
!
s
->
pb
->
seekable
)
return
0
;
// find REOB/REOF/REOS to load index
avio_seek
(
s
->
pb
,
avio_size
(
s
->
pb
)
-
48
-
8
,
SEEK_SET
);
...
...
libavformat/rmdec.c
View file @
8978feda
...
...
@@ -481,7 +481,7 @@ static int rm_read_header(AVFormatContext *s, AVFormatParameters *ap)
if
(
!
data_off
)
data_off
=
avio_tell
(
pb
)
-
18
;
if
(
indx_off
&&
!
url_is_streamed
(
pb
)
&&
!
(
s
->
flags
&
AVFMT_FLAG_IGNIDX
)
&&
if
(
indx_off
&&
pb
->
seekable
&&
!
(
s
->
flags
&
AVFMT_FLAG_IGNIDX
)
&&
avio_seek
(
pb
,
indx_off
,
SEEK_SET
)
>=
0
)
{
rm_read_index
(
s
);
avio_seek
(
pb
,
data_off
+
18
,
SEEK_SET
);
...
...
libavformat/rmenc.c
View file @
8978feda
...
...
@@ -118,7 +118,7 @@ static int rv10_write_header(AVFormatContext *ctx,
avio_wb32
(
s
,
0
);
/* data offset : will be patched after */
avio_wb16
(
s
,
ctx
->
nb_streams
);
/* num streams */
flags
=
1
|
2
;
/* save allowed & perfect play */
if
(
url_is_streamed
(
s
)
)
if
(
!
s
->
seekable
)
flags
|=
4
;
/* live broadcast */
avio_wb16
(
s
,
flags
);
...
...
@@ -170,7 +170,7 @@ static int rv10_write_header(AVFormatContext *ctx,
avio_wb32
(
s
,
0
);
/* start time */
avio_wb32
(
s
,
BUFFER_DURATION
);
/* preroll */
/* duration */
if
(
url_is_streamed
(
s
)
||
!
stream
->
total_frames
)
if
(
!
s
->
seekable
||
!
stream
->
total_frames
)
avio_wb32
(
s
,
(
int
)(
3600
*
1000
));
else
avio_wb32
(
s
,
(
int
)(
stream
->
total_frames
*
1000
/
stream
->
frame_rate
));
...
...
@@ -434,7 +434,7 @@ static int rm_write_trailer(AVFormatContext *s)
int
data_size
,
index_pos
,
i
;
AVIOContext
*
pb
=
s
->
pb
;
if
(
!
url_is_streamed
(
s
->
pb
)
)
{
if
(
s
->
pb
->
seekable
)
{
/* end of file: finish to write header */
index_pos
=
avio_tell
(
pb
);
data_size
=
index_pos
-
rm
->
data_pos
;
...
...
libavformat/rsoenc.c
View file @
8978feda
...
...
@@ -38,7 +38,7 @@ static int rso_write_header(AVFormatContext *s)
return
AVERROR_INVALIDDATA
;
}
if
(
url_is_streamed
(
s
->
pb
)
)
{
if
(
!
s
->
pb
->
seekable
)
{
av_log
(
s
,
AV_LOG_ERROR
,
"muxer does not support non seekable output
\n
"
);
return
AVERROR_INVALIDDATA
;
}
...
...
libavformat/soxenc.c
View file @
8978feda
...
...
@@ -96,7 +96,7 @@ static int sox_write_trailer(AVFormatContext *s)
AVIOContext
*
pb
=
s
->
pb
;
AVCodecContext
*
enc
=
s
->
streams
[
0
]
->
codec
;
if
(
!
url_is_streamed
(
s
->
pb
)
)
{
if
(
s
->
pb
->
seekable
)
{
/* update number of samples */
int64_t
file_size
=
avio_tell
(
pb
);
int64_t
num_samples
=
(
file_size
-
sox
->
header_size
-
4LL
)
>>
2LL
;
...
...
libavformat/swfenc.c
View file @
8978feda
...
...
@@ -492,7 +492,7 @@ static int swf_write_trailer(AVFormatContext *s)
avio_flush
(
s
->
pb
);
/* patch file size and number of frames if not streamed */
if
(
!
url_is_streamed
(
s
->
pb
)
&&
video_enc
)
{
if
(
s
->
pb
->
seekable
&&
video_enc
)
{
file_size
=
avio_tell
(
pb
);
avio_seek
(
pb
,
4
,
SEEK_SET
);
avio_wl32
(
pb
,
file_size
);
...
...
libavformat/tty.c
View file @
8978feda
...
...
@@ -88,7 +88,7 @@ static int read_header(AVFormatContext *avctx,
/* simulate tty display speed */
s
->
chars_per_frame
=
FFMAX
(
av_q2d
(
st
->
time_base
)
*
(
ap
->
sample_rate
?
ap
->
sample_rate
:
LINE_RATE
),
1
);
if
(
!
url_is_streamed
(
avctx
->
pb
)
)
{
if
(
avctx
->
pb
->
seekable
)
{
s
->
fsize
=
avio_size
(
avctx
->
pb
);
st
->
duration
=
(
s
->
fsize
+
s
->
chars_per_frame
-
1
)
/
s
->
chars_per_frame
;
...
...
libavformat/utils.c
View file @
8978feda
...
...
@@ -2019,7 +2019,7 @@ static void av_estimate_timings(AVFormatContext *ic, int64_t old_offset)
if
((
!
strcmp
(
ic
->
iformat
->
name
,
"mpeg"
)
||
!
strcmp
(
ic
->
iformat
->
name
,
"mpegts"
))
&&
file_size
&&
!
url_is_streamed
(
ic
->
pb
)
)
{
file_size
&&
ic
->
pb
->
seekable
)
{
/* get accurate estimate from the PTSes */
av_estimate_timings_from_pts
(
ic
,
old_offset
);
}
else
if
(
av_has_duration
(
ic
))
{
...
...
libavformat/vc1testenc.c
View file @
8978feda
...
...
@@ -73,7 +73,7 @@ static int vc1test_write_trailer(AVFormatContext *s)
RCVContext
*
ctx
=
s
->
priv_data
;
AVIOContext
*
pb
=
s
->
pb
;
if
(
!
url_is_streamed
(
s
->
pb
)
)
{
if
(
s
->
pb
->
seekable
)
{
avio_seek
(
pb
,
0
,
SEEK_SET
);
avio_wl24
(
pb
,
ctx
->
frames
);
avio_flush
(
pb
);
...
...
libavformat/vocdec.c
View file @
8978feda
...
...
@@ -78,7 +78,7 @@ voc_get_packet(AVFormatContext *s, AVPacket *pkt, AVStream *st, int max_size)
return
AVERROR
(
EIO
);
voc
->
remaining_size
=
avio_rl24
(
pb
);
if
(
!
voc
->
remaining_size
)
{
if
(
url_is_streamed
(
s
->
pb
)
)
if
(
!
s
->
pb
->
seekable
)
return
AVERROR
(
EIO
);
voc
->
remaining_size
=
avio_size
(
pb
)
-
avio_tell
(
pb
);
}
...
...
libavformat/wav.c
View file @
8978feda
...
...
@@ -58,7 +58,7 @@ static int wav_write_header(AVFormatContext *s)
ff_end_tag
(
pb
,
fmt
);
if
(
s
->
streams
[
0
]
->
codec
->
codec_tag
!=
0x01
/* hence for all other than PCM */
&&
!
url_is_streamed
(
s
->
pb
)
)
{
&&
s
->
pb
->
seekable
)
{
fact
=
ff_start_tag
(
pb
,
"fact"
);
avio_wl32
(
pb
,
0
);
ff_end_tag
(
pb
,
fact
);
...
...
@@ -98,7 +98,7 @@ static int wav_write_trailer(AVFormatContext *s)
avio_flush
(
pb
);
if
(
!
url_is_streamed
(
s
->
pb
)
)
{
if
(
s
->
pb
->
seekable
)
{
ff_end_tag
(
pb
,
wav
->
data
);
/* update file size */
...
...
libavformat/wv.c
View file @
8978feda
...
...
@@ -121,7 +121,7 @@ static int wv_read_block_header(AVFormatContext *ctx, AVIOContext *pb, int appen
}
if
((
rate
==
-
1
||
!
chan
)
&&
!
wc
->
block_parsed
){
int64_t
block_end
=
avio_tell
(
pb
)
+
wc
->
blksize
-
24
;
if
(
url_is_streamed
(
pb
)
){
if
(
!
pb
->
seekable
){
av_log
(
ctx
,
AV_LOG_ERROR
,
"Cannot determine additional parameters
\n
"
);
return
-
1
;
}
...
...
@@ -223,7 +223,7 @@ static int wv_read_header(AVFormatContext *s,
st
->
start_time
=
0
;
st
->
duration
=
wc
->
samples
;
if
(
!
url_is_streamed
(
s
->
pb
)
)
{
if
(
s
->
pb
->
seekable
)
{
int64_t
cur
=
avio_tell
(
s
->
pb
);
ff_ape_parse_tag
(
s
);
if
(
!
av_metadata_get
(
s
->
metadata
,
""
,
NULL
,
AV_METADATA_IGNORE_SUFFIX
))
...
...
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