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
a67c061e
Commit
a67c061e
authored
May 22, 2011
by
Anton Khirnov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
lavf: add avformat_find_stream_info()
It supports passing options to codecs.
parent
0b950fe2
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
41 additions
and
6 deletions
+41
-6
vsrc_movie.c
libavfilter/vsrc_movie.c
+1
-1
avformat.h
libavformat/avformat.h
+27
-0
utils.c
libavformat/utils.c
+13
-5
No files found.
libavfilter/vsrc_movie.c
View file @
a67c061e
...
@@ -96,7 +96,7 @@ static int movie_init(AVFilterContext *ctx)
...
@@ -96,7 +96,7 @@ static int movie_init(AVFilterContext *ctx)
"Failed to avformat_open_input '%s'
\n
"
,
movie
->
file_name
);
"Failed to avformat_open_input '%s'
\n
"
,
movie
->
file_name
);
return
ret
;
return
ret
;
}
}
if
((
ret
=
av
_find_stream_info
(
movie
->
format_ctx
))
<
0
)
if
((
ret
=
av
format_find_stream_info
(
movie
->
format_ctx
,
NULL
))
<
0
)
av_log
(
ctx
,
AV_LOG_WARNING
,
"Failed to find stream info
\n
"
);
av_log
(
ctx
,
AV_LOG_WARNING
,
"Failed to find stream info
\n
"
);
// if seeking requested, we execute it
// if seeking requested, we execute it
...
...
libavformat/avformat.h
View file @
a67c061e
...
@@ -1093,6 +1093,7 @@ int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputForma
...
@@ -1093,6 +1093,7 @@ int avformat_open_input(AVFormatContext **ps, const char *filename, AVInputForma
*/
*/
AVFormatContext
*
avformat_alloc_context
(
void
);
AVFormatContext
*
avformat_alloc_context
(
void
);
#if FF_API_FORMAT_PARAMETERS
/**
/**
* Read packets of a media file to get stream information. This
* Read packets of a media file to get stream information. This
* is useful for file formats with no headers such as MPEG. This
* is useful for file formats with no headers such as MPEG. This
...
@@ -1105,8 +1106,34 @@ AVFormatContext *avformat_alloc_context(void);
...
@@ -1105,8 +1106,34 @@ AVFormatContext *avformat_alloc_context(void);
* @return >=0 if OK, AVERROR_xxx on error
* @return >=0 if OK, AVERROR_xxx on error
* @todo Let the user decide somehow what information is needed so that
* @todo Let the user decide somehow what information is needed so that
* we do not waste time getting stuff the user does not need.
* we do not waste time getting stuff the user does not need.
*
* @deprecated use avformat_find_stream_info.
*/
*/
int
av_find_stream_info
(
AVFormatContext
*
ic
);
int
av_find_stream_info
(
AVFormatContext
*
ic
);
#endif
/**
* Read packets of a media file to get stream information. This
* is useful for file formats with no headers such as MPEG. This
* function also computes the real framerate in case of MPEG-2 repeat
* frame mode.
* The logical file position is not changed by this function;
* examined packets may be buffered for later processing.
*
* @param ic media file handle
* @param options If non-NULL, an ic.nb_streams long array of pointers to
* dictionaries, where i-th member contains options for
* codec corresponding to i-th stream.
* On return each dictionary will be filled with options that were not found.
* @return >=0 if OK, AVERROR_xxx on error
*
* @note this function isn't guaranteed to open all the codecs, so
* options being non-empty at return is a perfectly normal behavior.
*
* @todo Let the user decide somehow what information is needed so that
* we do not waste time getting stuff the user does not need.
*/
int
avformat_find_stream_info
(
AVFormatContext
*
ic
,
AVDictionary
**
options
);
/**
/**
* Find the "best" stream in the file.
* Find the "best" stream in the file.
...
...
libavformat/utils.c
View file @
a67c061e
...
@@ -2074,7 +2074,7 @@ static int has_decode_delay_been_guessed(AVStream *st)
...
@@ -2074,7 +2074,7 @@ static int has_decode_delay_been_guessed(AVStream *st)
st
->
codec_info_nb_frames
>=
6
+
st
->
codec
->
has_b_frames
;
st
->
codec_info_nb_frames
>=
6
+
st
->
codec
->
has_b_frames
;
}
}
static
int
try_decode_frame
(
AVStream
*
st
,
AVPacket
*
avpkt
)
static
int
try_decode_frame
(
AVStream
*
st
,
AVPacket
*
avpkt
,
AVDictionary
**
options
)
{
{
int16_t
*
samples
;
int16_t
*
samples
;
AVCodec
*
codec
;
AVCodec
*
codec
;
...
@@ -2085,7 +2085,7 @@ static int try_decode_frame(AVStream *st, AVPacket *avpkt)
...
@@ -2085,7 +2085,7 @@ static int try_decode_frame(AVStream *st, AVPacket *avpkt)
codec
=
avcodec_find_decoder
(
st
->
codec
->
codec_id
);
codec
=
avcodec_find_decoder
(
st
->
codec
->
codec_id
);
if
(
!
codec
)
if
(
!
codec
)
return
-
1
;
return
-
1
;
ret
=
avcodec_open
(
st
->
codec
,
codec
);
ret
=
avcodec_open
2
(
st
->
codec
,
codec
,
options
);
if
(
ret
<
0
)
if
(
ret
<
0
)
return
ret
;
return
ret
;
}
}
...
@@ -2204,12 +2204,20 @@ static int tb_unreliable(AVCodecContext *c){
...
@@ -2204,12 +2204,20 @@ static int tb_unreliable(AVCodecContext *c){
return
0
;
return
0
;
}
}
#if FF_API_FORMAT_PARAMETERS
int
av_find_stream_info
(
AVFormatContext
*
ic
)
int
av_find_stream_info
(
AVFormatContext
*
ic
)
{
return
avformat_find_stream_info
(
ic
,
NULL
);
}
#endif
int
avformat_find_stream_info
(
AVFormatContext
*
ic
,
AVDictionary
**
options
)
{
{
int
i
,
count
,
ret
,
read_size
,
j
;
int
i
,
count
,
ret
,
read_size
,
j
;
AVStream
*
st
;
AVStream
*
st
;
AVPacket
pkt1
,
*
pkt
;
AVPacket
pkt1
,
*
pkt
;
int64_t
old_offset
=
avio_tell
(
ic
->
pb
);
int64_t
old_offset
=
avio_tell
(
ic
->
pb
);
int
orig_nb_streams
=
ic
->
nb_streams
;
// new streams might appear, no options for those
for
(
i
=
0
;
i
<
ic
->
nb_streams
;
i
++
)
{
for
(
i
=
0
;
i
<
ic
->
nb_streams
;
i
++
)
{
AVCodec
*
codec
;
AVCodec
*
codec
;
...
@@ -2235,12 +2243,12 @@ int av_find_stream_info(AVFormatContext *ic)
...
@@ -2235,12 +2243,12 @@ int av_find_stream_info(AVFormatContext *ic)
/* Ensure that subtitle_header is properly set. */
/* Ensure that subtitle_header is properly set. */
if
(
st
->
codec
->
codec_type
==
AVMEDIA_TYPE_SUBTITLE
if
(
st
->
codec
->
codec_type
==
AVMEDIA_TYPE_SUBTITLE
&&
codec
&&
!
st
->
codec
->
codec
)
&&
codec
&&
!
st
->
codec
->
codec
)
avcodec_open
(
st
->
codec
,
codec
);
avcodec_open
2
(
st
->
codec
,
codec
,
options
?
&
options
[
i
]
:
NULL
);
//try to just open decoders, in case this is enough to get parameters
//try to just open decoders, in case this is enough to get parameters
if
(
!
has_codec_parameters
(
st
->
codec
)){
if
(
!
has_codec_parameters
(
st
->
codec
)){
if
(
codec
&&
!
st
->
codec
->
codec
)
if
(
codec
&&
!
st
->
codec
->
codec
)
avcodec_open
(
st
->
codec
,
codec
);
avcodec_open
2
(
st
->
codec
,
codec
,
options
?
&
options
[
i
]
:
NULL
);
}
}
}
}
...
@@ -2383,7 +2391,7 @@ int av_find_stream_info(AVFormatContext *ic)
...
@@ -2383,7 +2391,7 @@ int av_find_stream_info(AVFormatContext *ic)
!
has_decode_delay_been_guessed
(
st
)
||
!
has_decode_delay_been_guessed
(
st
)
||
(
st
->
codec
->
codec
&&
(
st
->
codec
->
codec
&&
st
->
codec
->
codec
->
capabilities
&
CODEC_CAP_CHANNEL_CONF
))
st
->
codec
->
codec
->
capabilities
&
CODEC_CAP_CHANNEL_CONF
))
try_decode_frame
(
st
,
pkt
);
try_decode_frame
(
st
,
pkt
,
(
options
&&
i
<=
orig_nb_streams
)
?
&
options
[
i
]
:
NULL
);
st
->
codec_info_nb_frames
++
;
st
->
codec_info_nb_frames
++
;
count
++
;
count
++
;
...
...
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