1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-11-26 19:01:44 +02:00
Commit Graph

834 Commits

Author SHA1 Message Date
Anton Khirnov
27c7ca9c12 lavf: deobfuscate read_frame_internal().
Split off packet parsing into a separate function. Parse full packets at
once and store them in a queue, eliminating the need for tracking
parsing state in AVStream.

The horrible unreadable loop in read_frame_internal() now isn't weirdly
ordered and doesn't contain evil gotos, so it should be much easier to
understand.

compute_pkt_fields() now invents slightly different timestamps for two
raw vc1 tests, due to has_b_frames being set a bit later. They shouldn't
be more wrong (or right) than previous ones.
2012-03-05 18:47:05 +01:00
Anton Khirnov
dcee811505 lavf: make read_from_packet_buffer() more flexible.
Make packet buffer a parameter, don't hardcode it to be
AVFormatContext.packet_buffer.

Also move the function higher in the file, since it will be called from
read_frame_internal().
2012-03-05 18:44:45 +01:00
Anton Khirnov
52b0943f10 lavf: factorize freeing a packet buffer. 2012-03-05 18:44:30 +01:00
Justin Ruggles
5602a464c9 avcodec: add a Vorbis parser to get packet duration
This also allows for removing some of the Vorbis-related hacks.
2012-03-03 16:43:11 -05:00
Anton Khirnov
393fd0d89e id3v2: remove unused ff_id3v2_read().
Rename ff_id3v2_read_all to ff_id3v2_read().
2012-02-29 14:19:42 +01:00
Anton Khirnov
079ea6ca5f lavf: export id3v2 attached pictures as streams. 2012-02-29 14:16:32 +01:00
Anton Khirnov
dd2a4bcfd7 lavf: generic code for exporting attached pictures. 2012-02-29 14:16:25 +01:00
Anton Khirnov
7929e22bde lavf: don't guess r_frame_rate from either stream or codec timebase.
Neither of those is guaranteed to be connected to framerate in any way
(if it even exists).

Fixes bug 56.
2012-02-26 19:32:33 +01:00
Anton Khirnov
d3783f47ee lavf: don't set codec timebase in avformat_find_stream_info().
It's not supposed to be set outside of lavc.
2012-02-26 07:51:12 +01:00
Anton Khirnov
655b24c01c lavf: move the packet keyframe setting code.
compute_pkt_fields() is for unreliable estimates or guessing. The
keyframe information from the parser is (at least in theory) reliable,
so it should be used even when the other guessing is disabled with the
AVFMT_FLAG_NOFILLIN flag.

Therefore, move setting the packet keyframe flag based on parser
information from compute_pkt_fields() to read_frame_internal().
2012-02-24 19:43:02 +01:00
Anton Khirnov
0584e3ca97 lavf: don't set AVCodecContext.has_b_frames in compute_pkt_fields().
It is not supposed to be done outside lavc.

This is basically a revert of 818062f2f3.

It is unclear what issue this was supposed to fix, if it reappears again
it will have to be fixed in a more proper place.

The wtv-demux test change is because the sample starts with a B-frame.
2012-02-22 19:31:06 +01:00
Justin Ruggles
e9cda85351 avcodec: add duration field to AVCodecParserContext
This will allow parsers to export the duration of the current frame being
output, if known, instead of using AVCodecContext.frame_size.
2012-02-20 15:08:40 -05:00
Andrey Utkin
e3cc617263 lavf: fix aspect ratio mismatch message.
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2012-02-12 17:18:24 +01:00
Anton Khirnov
dd6d3b0e02 lavf: add functions for accessing the fourcc<->CodecID mapping tables.
Fixes bug 212.
2012-01-31 16:53:35 +01:00
Anton Khirnov
bc90199848 lavc: set AVCodecContext.codec in avcodec_get_context_defaults3().
This way, if the AVCodecContext is allocated for a specific codec, the
caller doesn't need to store this codec separately and then pass it
again to avcodec_open2().

It also allows to set codec private options using av_opt_set_* before
opening the codec.
2012-01-31 16:53:35 +01:00
Anton Khirnov
af08d9aeea lavc: add avcodec_is_open().
It allows to check whether an AVCodecContext is open in a documented
way. Right now the undocumented way this check is done in lavf/lavc is
by checking whether AVCodecContext.codec is NULL. However it's desirable
to be able to set AVCodecContext.codec before avcodec_open2().
2012-01-31 07:55:24 +01:00
Rafaël Carré
420df8b7c4 avformat_write_header(): detail error message
Give the exact aspect ratios when there is a mismatch between encoder
and muxer.

Signed-off-by: Anton Khirnov <anton@khirnov.net>
2012-01-30 07:32:57 +01:00
Anton Khirnov
c5254755c0 lavf: remove disabled FF_API_SET_PTS_INFO cruft 2012-01-27 10:52:43 +01:00
Anton Khirnov
fd87ba3220 lavf: remove disabled FF_API_SEEK_PUBLIC cruft 2012-01-27 10:52:43 +01:00
Anton Khirnov
1329827e79 lavf: remove disabled FF_API_NEW_STREAM cruft 2012-01-27 10:52:43 +01:00
Anton Khirnov
21824e5b88 lavf: remove disabled FF_API_PKT_DUMP cruft 2012-01-27 10:52:42 +01:00
Anton Khirnov
cc10ab79ec lavf: remove disabled FF_API_FIND_INFO_TAG cruft 2012-01-27 10:52:42 +01:00
Anton Khirnov
ecd5f41a06 lavf: remove disabled FF_API_PARSE_DATE cruft 2012-01-27 10:52:42 +01:00
Anton Khirnov
997420abf2 lavf: remove disabled FF_API_DUMP_FORMAT cruft 2012-01-27 10:52:42 +01:00
Anton Khirnov
2fb7501938 lavf: remove disabled FF_API_FORMAT_PARAMETERS cruft
Also remove now unused AVFormatParameters struct and
AVOutputFormat.set_parameters().
2012-01-27 10:52:42 +01:00
Anton Khirnov
6e9651d106 lavf: remove AVFormatParameters from AVFormatContext.read_header signature 2012-01-27 10:51:57 +01:00
Janne Grunau
b3461c29c1 lavf: prevent infinite loops while flushing in avformat_find_stream_info
If no data was seen for a stream decoder are returning 0 when fed with
empty packets for flushing. We can stop flushing when the decoder does
not return delayed delayed frames anymore. Changes try_decode_frame()
return value to got_picture or negative error.

CC: libav-stable@libav.org
2012-01-26 00:45:05 +01:00
Martin Storsjö
f1caf01d5e libavformat: Add a flag for muxers that support write_packet(NULL) for flushing
Signed-off-by: Martin Storsjö <martin@martin.st>
2012-01-25 12:15:41 +02:00
Janne Grunau
59297ad63d lavf: force single-threaded decoding in avformat_find_stream_info
The H.264 decoder needs SPS and PPS for initialization during
multi-threaded decoding. When probed single-threaded SPS and PPS are
copied to extradata and are available for proper initialization of
the decoder before the first frame is decoded.
2012-01-20 09:41:46 +01:00
Anton Khirnov
aa2e4bb058 lavf: free packets for muxers implementing interleave_packet().
Fixes a memleak.
2012-01-18 20:10:26 +01:00
Alex Converse
4df30f7114 utils: Check for extradata size overflows. 2012-01-12 13:26:13 -08:00
Anton Khirnov
f9b9dd8740 lavf: cosmetics, reformat av_read_frame(). 2012-01-05 14:34:28 +01:00
Anton Khirnov
6450599e22 lavf: refactor av_read_frame() to make it easier to understand. 2012-01-05 14:34:13 +01:00
Anton Khirnov
212fd3a1f1 lavf: flush decoders in avformat_find_stream_info().
This means that avformat_find_stream_info() now works properly with
multiple threads, so there's no need to force thread count to 1.
2012-01-03 14:58:21 +01:00
Janne Grunau
e4e30256f8 threads: default to automatic thread count detection 2011-12-31 17:40:12 +01:00
Martin Storsjö
3e79c2adb1 libavformat: Add a utility function for adding parameter change side data
Signed-off-by: Martin Storsjö <martin@martin.st>
2011-12-21 22:52:40 +02:00
Anton Khirnov
93fc5a9ff6 lavf: force threads to 1 in avformat_find_stream_info()
Fixes avformat_find_stream_info() on streams with number of frames <
thread count.
2011-12-18 17:36:56 +01:00
Luca Barbato
4badb386ce lavf: dealloc private options in av_write_trailer
Fix the iformat/oformat typo.
2011-12-13 17:03:08 +01:00
Anton Khirnov
526604545f lavf: add avformat_close_input().
It sets the supplied AVFormatContext pointer to NULL after freeing it,
which is safer and its name is consistent with other lavf functions.

Also deprecate av_close_input_file().
2011-12-12 20:23:56 +01:00
Anton Khirnov
3a7f7678eb lavf: deprecate av_close_input_stream().
And remove all its uses.
2011-12-12 20:21:47 +01:00
Diego Biurrun
da9cea77e3 Fix a bunch of common typos. 2011-12-11 00:32:25 +01:00
Diego Biurrun
c7e8187d9d avformat/utils: Drop unused goto label.
libavformat/utils.c:2165:2: warning: label ‘fail’ defined but not used
2011-12-07 15:29:14 +01:00
Justin Ruggles
f08e54e83d avformat: use avcodec_decode_audio4() in avformat_find_stream_info() 2011-12-04 18:29:51 -05:00
Anton Khirnov
c3f9ebf743 lavf: make av_set_pts_info private.
It's supposed to be called only from (de)muxers.
2011-11-30 20:34:45 +01:00
Anton Khirnov
2092232581 lavf: estimate frame duration from r_frame_rate.
If r_frame_rate is set, it should be more reliable for this than either
codec or stream timebase.
2011-11-30 07:47:43 +01:00
Janne Grunau
0945eddec0 pthread: do not touch has_b_frames
Adding the thread count in frame level multithreading to has_b_frames
as an additional delay causes more problems than it solves.
For example inconsistent behaviour during timestamp calculation in
libavformat.
Thread count and frame level multithreading are both set by the user.
If the additional delay caused by frame level multithreading needs
to be considered in the calling code it has all information to take
it into account.
Should it become necessary to calculate a maximum delay inside
libavcodec it should be exported as its own field and not reusing
an existing field.

Based on a patch by Michael Niedermayer.

Signed-off-by: Janne Grunau <janne-libav@jannau.net>
2011-11-22 09:50:33 +01:00
Martin Storsjö
18579f08e7 avformat: Accept the ISO8601 separate format as input, too
This makes the function accept the format of creation_time
as output by demuxers (e.g. the mov demuxer), making the
creation timestamp stay intact if transcoding.

Signed-off-by: Martin Storsjö <martin@martin.st>
2011-11-16 11:22:43 +02:00
Martin Storsjö
4a83541650 avformat: Interpret times in ff_iso8601_to_unix_time as UTC
This function is used in muxers for parsing the 'creation_time'
metadata key, for converting it to a time value.

This makes it match the behaviour of the exported 'creation_time'
metadata from demuxers, where it is in UTC, too.

Signed-off-by: Martin Storsjö <martin@martin.st>
2011-11-16 11:22:42 +02:00
Mans Rullgard
52767d891c lavf: fix multiplication overflow in avformat_find_stream_info()
Converting to double before the multiplication rather than after
avoids an integer overflow in some cases.

Signed-off-by: Mans Rullgard <mans@mansr.com>
2011-11-15 23:41:04 +00:00
Anton Khirnov
32caa7b13c lavf: pass options from AVFormatContext to avio. 2011-11-13 13:21:46 +01:00