Commit Graph

399 Commits

Author SHA1 Message Date
James Almer 220603d0c8 Merge commit '279e3aaa14daba6b7a37d75f3fb6e29c732d123f'
* commit '279e3aaa14daba6b7a37d75f3fb6e29c732d123f':
  flv: Validate the packet size

Merged-by: James Almer <jamrial@gmail.com>
2017-10-28 15:29:23 -03:00
Martin Storsjö 15537c904e flvdec: Check the avio_seek return value after reading a metadata packet
merge from libav: 585dc1aece

If the metadata packet is corrupted, flv_read_metabody can accidentally
read past the start of the next packet. If the start of the  next packet
had been flushed out of the IO buffer, we would be unable to seek to
the right position (on a nonseekable stream).

Prefer to clearly error out instead of silently  trying to read from a
desynced stream which will only be interpreted as garbage.
2017-10-27 08:27:43 +08:00
Steven Liu 171adca696 Revert "flvdec: Check the avio_seek return value after reading a metadata packet"
This reverts commit ef7fe81b85.
2017-10-27 08:26:11 +08:00
Steven Liu ef7fe81b85 flvdec: Check the avio_seek return value after reading a metadata packet
merge from libav: 585dc1aece

If the metadata packet is corrupted, flv_read_metabody can accidentally
read past the start of the next packet. If the start of the next packet
had been flushed out of the IO buffer, we would be unable to seek to
the right position (on a nonseekable stream).

Prefer to clearly error out instead of silently trying to read from a
desynced stream which will only be interpreted as garbage.

Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
2017-09-07 08:30:14 +08:00
Alex Converse 4d2b9ece45 avformat/flvdec: Set need_context_update when setting the initial extradata
Fixes ticket 6398.

Debugged with the help of James Almer and Hendrik Leppkes.
2017-09-03 20:01:39 -07:00
Luca Barbato 279e3aaa14 flv: Validate the packet size
Size can be negative at that point.

Bug-Id: 1041
CC: libav-stable@libav.org
2017-04-20 15:39:18 +00:00
Steven Liu c0628919b8 avformat/flvdec: check FLVHeader PreviousTagSize0
refer to SPEC:
Annex E. The FLV File Format said:
E.3 TheFLVFileBody have a table:
Field            Type    Comment
PreviousTagSize0 UI32    Always 0

Reviewed-by: Bela Bodecs <bodecsb@vivanet.hu>
Reviewed-by: Hendrik Leppkes <h.leppkes@gmail.com>
Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
2017-03-28 16:51:28 +08:00
Carl Eugen Hoyos 628ce8b8b6 flvdec: Set avg_frame_rate for video streams
Signed-off-by: Martin Storsjö <martin@martin.st>
2017-03-22 14:26:15 +02:00
James Almer 4de591e6fb Merge commit '83548fe894cdb455cc127f754d09905b6d23c173'
* commit '83548fe894cdb455cc127f754d09905b6d23c173':
  lavf: fix usage of AVIOContext.seekable

Merged-by: James Almer <jamrial@gmail.com>
2017-03-21 17:02:30 -03:00
wm4 ef86488696 avformat/flvdec: remove meaningless warning
Ever since the codecpar changes, this has been always printed when
opening a flv file. This is because the codecpar changes made all
streams to be added lazily as read_packet is called.
2017-03-06 11:08:03 +01:00
Steven Liu af7d0ad983 refine avformat/flvdec set bit_rate 2016-11-26 11:28:22 +08:00
Steven Liu 7c5478a203 avformat/flvdec: move set bit_rate from parse AMF OBJECT to
create_stream

before patch:
Stream #0:0: Video: h264 (High), yuv420p(progressive), 1280x714 [SAR 1:1 DAR 640:357], 25 fps, 25 tbr, 1k tbn, 50 tbc

after patch:
Stream #0:0: Video: h264 (High), yuv420p(progressive), 1280x714 [SAR 1:1 DAR 640:357], 2576 kb/s, 25 fps, 25 tbr, 1k tbn, 50 tbc

Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
2016-11-26 08:56:18 +08:00
Carl Eugen Hoyos e0791c5aaf lavf/flvdec: Set avg_frame_rate for video streams.
Requested-by: qw, applemax82 at 163 dot com
Reviewed-by: Steven Liu
2016-11-25 11:06:14 +01:00
Andreas Cadhalpun 98b3a7979f flvdec: require need_context_update when changing codec id
Otherwise the codec context and codecpar might disagree on the codec id,
triggering asserts in av_parser_parse2.

Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
2016-11-25 00:35:46 +01:00
Steven Liu 4696f7639b avformat/flvdec: add debug message to list keyframes index metadata
when parsing keyframe index metadata, list the message by trace log

Signed-off-by: Steven Liu <lq@chinaffmpeg.org>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-11-19 02:15:27 +01:00
Michael Niedermayer 077939626e avformat/flvdec: Fix regression loosing streams
Fixes: unknown_video.flv

Found-by: Thierry Foucu <tfoucu@google.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-10-28 12:31:01 +02:00
Suman- a81494b603 lavf/flvdec: init AVPacket::pos to FLVTAG offset
Current code doesn't initialize AVPacket::pos. Made it point to FLVTAG so flv_read_packet can decode from pos

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-10-26 02:12:18 +02:00
Anton Khirnov 83548fe894 lavf: fix usage of AVIOContext.seekable
It is supposed to be a flag. The only currently defined value is
AVIO_SEEKABLE_NORMAL, but other ones may be added in the future.
However all the current lavf code treats this field as a bool (mainly
for historical reasons).
Change all those cases to properly check for AVIO_SEEKABLE_NORMAL.
2016-09-30 16:54:33 +02:00
Xinzheng Zhang ad14aab3b4 avformat/flvdec: parse keyframe before a\v stream was created add_keyframes_index() when stream created or keyframe parsed
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-07-27 19:29:55 +02:00
Xinzheng Zhang cd141e71bd avformat/flvdec: splitting add_keyframes_index() out from parse_keyframes_index()
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-07-27 19:29:55 +02:00
Michael Niedermayer e0faad837c avformat/flvdec: Do not check last size if it could not be read due to EOF
Fixes part of Ticket5648
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-06-22 03:02:47 +02:00
Michael Niedermayer 3f380b9b40 avformat/flvdec: Also print sum_flv_tag_size on size mismatches
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-06-22 03:02:47 +02:00
Michael Niedermayer e8931d79cc avformat/flvdec: Accept last size if its off by 1
Fixes part of Ticket5648

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-06-22 03:02:47 +02:00
Clément Bœsch 8ef57a0d61 Merge commit '41ed7ab45fc693f7d7fc35664c0233f4c32d69bb'
* commit '41ed7ab45fc693f7d7fc35664c0233f4c32d69bb':
  cosmetics: Fix spelling mistakes

Merged-by: Clément Bœsch <u@pkh.me>
2016-06-21 21:55:34 +02:00
Vittorio Giovara 41ed7ab45f cosmetics: Fix spelling mistakes
Signed-off-by: Diego Biurrun <diego@biurrun.de>
2016-05-04 18:16:21 +02:00
Paul B Mahol 323b8c95e4 avformat: add AVFormatContext to ff_get_extradata()
Needed for av_log() inside that function.

Signed-off-by: Paul B Mahol <onemda@gmail.com>
2016-04-14 18:21:08 +02:00
Derek Buitenhuis 6f69f7a8bf Merge commit '9200514ad8717c63f82101dc394f4378854325bf'
* commit '9200514ad8717c63f82101dc394f4378854325bf':
  lavf: replace AVStream.codec with AVStream.codecpar

This has been a HUGE effort from:
    - Derek Buitenhuis <derek.buitenhuis@gmail.com>
    - Hendrik Leppkes <h.leppkes@gmail.com>
    - wm4 <nfxjfg@googlemail.com>
    - Clément Bœsch <clement@stupeflix.com>
    - James Almer <jamrial@gmail.com>
    - Michael Niedermayer <michael@niedermayer.cc>
    - Rostislav Pehlivanov <atomnuker@gmail.com>

Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
2016-04-10 20:59:55 +01:00
Anton Khirnov 9200514ad8 lavf: replace AVStream.codec with AVStream.codecpar
Currently, AVStream contains an embedded AVCodecContext instance, which
is used by demuxers to export stream parameters to the caller and by
muxers to receive stream parameters from the caller. It is also used
internally as the codec context that is passed to parsers.

In addition, it is also widely used by the callers as the decoding (when
demuxer) or encoding (when muxing) context, though this has been
officially discouraged since Libav 11.

There are multiple important problems with this approach:
    - the fields in AVCodecContext are in general one of
        * stream parameters
        * codec options
        * codec state
      However, it's not clear which ones are which. It is consequently
      unclear which fields are a demuxer allowed to set or a muxer allowed to
      read. This leads to erratic behaviour depending on whether decoding or
      encoding is being performed or not (and whether it uses the AVStream
      embedded codec context).
    - various synchronization issues arising from the fact that the same
      context is used by several different APIs (muxers/demuxers,
      parsers, bitstream filters and encoders/decoders) simultaneously, with
      there being no clear rules for who can modify what and the different
      processes being typically delayed with respect to each other.
    - avformat_find_stream_info() making it necessary to support opening
      and closing a single codec context multiple times, thus
      complicating the semantics of freeing various allocated objects in the
      codec context.

Those problems are resolved by replacing the AVStream embedded codec
context with a newly added AVCodecParameters instance, which stores only
the stream parameters exported by the demuxers or read by the muxers.
2016-02-23 17:01:58 +01:00
Thierry Foucu 9a09952695 lavf/flvdec: Allow files where the PreviousTagSize is not set according to the spec.
Some muxer use the FLV field PreviousTagSize to be the sum of tag
length. Without this change, the flv demuxer think the file is broken
and the re-sync will fail.

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-01-29 22:30:12 +01:00
Derek Buitenhuis e5b5676c00 Merge commit 'e4eb13ca77624401ea7cef1ed6ad8e2d13fd2063'
Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
2016-01-27 18:32:28 +00:00
Derek Buitenhuis 949d6dd51c Merge commit '09f4822e4eaf61513b9092414450f3ae920ccd9d'
Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
2016-01-27 18:29:21 +00:00
Martin Storsjö e4eb13ca77 flvdec: Add sanity checking of the last packet size
For http, this avoids spurious warnings about failed requests (e.g.
HTTP error 416 Requested Range Not Satisfiable), if the last packet
is truncated and the size read is bogus.

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-01-19 14:24:35 +02:00
Michael Niedermayer 09f4822e4e flvdec: perform duration search just once
When loading a truncated flv file, it would previously try to do a seek to
the end of every packet read. For some input protocols (such as http), such
repeated seek attempts are cripple the reading performance.

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-01-19 14:24:34 +02:00
Anton Khirnov 09ae7b81ea flvdec: do not create any streams in read_header()
The current muxer behaviour is to create streams in read_header() based
on the audio/video presence flags, but fill in the stream parameters
later when we actually get some packets for them. This is rather shady,
since other demuxers set the stream parameters immediately when the
stream is created and do not touch the stream codec context after that.

Change the flv demuxer to behave in the same way as other similar
demuxers -- create the streams only when we get a packet for them.
2015-12-12 21:26:48 +01:00
Michael Niedermayer ab7ff38052 avformat/flvdec: Fix left shift of 137 by 24 places cannot be represented in type int
Fixes: 3c857d4d90365731524716e6d051e43a/signal_sigsegv_7f4f59bcc29e_1386_20abd2c8e655cb9c75b24368e65fe3b1.flv

Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2015-12-04 18:54:39 +01:00
Clément Bœsch 43ecec0f03 avformat: use AV_OPT_TYPE_BOOL in a bunch of places 2015-12-04 15:43:33 +01:00
Nicolas George 0bac7a436b lavf/flvdec: use FFERROR_REDO instead of AVERROR(EAGAIN).
Fix trac ticket #5041.
2015-12-03 19:16:12 +01:00
Hendrik Leppkes c2f861ca42 Replace remaining occurances of av_free_packet with av_packet_unref 2015-10-27 14:35:30 +01:00
Michael Niedermayer ce0834bdd6 avformat/flvdec: set broken_sizes for "metadatacreator : MEGA"
The 2nd size value is wrong for the sample file

Fixes: Ticket4903

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2015-10-12 05:36:39 +02:00
Michael Niedermayer f4585e666f avformat/flvdec: Print stream type in case a new stream is discovered after the header
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2015-10-07 02:41:40 +02:00
Michael Niedermayer e34ba5ec53 avformat/flvdec: Remove dead loop
Fixes CID1325682

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2015-10-06 01:22:35 +02:00
Michael Niedermayer 14f6c4356b avformat/flvdec: accept sizes if they are off by 11
This error was produced by rtmproto.c, it is possibly such streams
where dumped, this commit is needed to support them

Fixes: z0e.flv

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2015-10-02 20:18:53 +02:00
Thierry Foucu 7f72f2d75e libavformat/flvdec.c: free always the packet after a resync.
In case of resync, always free the packet, but retry only if the resync
did not get to the end of the file. Otherwise, there is a memory leak when the
last packet in the file is corrupted.

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2015-09-29 04:01:50 +02:00
Michael Niedermayer e3cf978cdd avformat/flvdec: Detect broken sizes (OBS 0.655b), disable resync for affected files
Fixes Ticket4867
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2015-09-19 18:34:55 +02:00
Michael Niedermayer cbbd906be6 avformat/flvdec: Check that sizes match and resync if not
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2015-09-16 03:43:21 +02:00
Michael Niedermayer 3496a20bb9 avformat/flvdec: Change packet loop to return EAGAIN instead of looping until a valid packet is foud
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2015-09-16 03:32:27 +02:00
Michael Niedermayer 5629143433 avformat/flvdec: Use the first index entry to find the first packet if there was a parsing error in the header
Fixes: unknow_codec.flv

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2015-09-13 14:22:31 +02:00
Michael Niedermayer fd6296e412 avformat/flvdec: Print last packet size at trace level
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2015-09-13 14:22:31 +02:00
Michael Niedermayer 6bed88ac78 avformat/flvdec: Print terminator value found if it differs from AMF_END_OF_OBJECT in AMF_DATA_TYPE_MIXEDARRAY
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2015-09-13 14:22:21 +02:00
Michael Niedermayer 29d147c94d Merge commit '059a934806d61f7af9ab3fd9f74994b838ea5eba'
* commit '059a934806d61f7af9ab3fd9f74994b838ea5eba':
  lavc: Consistently prefix input buffer defines

Conflicts:
	doc/examples/decoding_encoding.c
	libavcodec/4xm.c
	libavcodec/aac_adtstoasc_bsf.c
	libavcodec/aacdec.c
	libavcodec/aacenc.c
	libavcodec/ac3dec.h
	libavcodec/asvenc.c
	libavcodec/avcodec.h
	libavcodec/avpacket.c
	libavcodec/dvdec.c
	libavcodec/ffv1enc.c
	libavcodec/g2meet.c
	libavcodec/gif.c
	libavcodec/h264.c
	libavcodec/h264_mp4toannexb_bsf.c
	libavcodec/huffyuvdec.c
	libavcodec/huffyuvenc.c
	libavcodec/jpeglsenc.c
	libavcodec/libxvid.c
	libavcodec/mdec.c
	libavcodec/motionpixels.c
	libavcodec/mpeg4videodec.c
	libavcodec/mpegvideo.c
	libavcodec/noise_bsf.c
	libavcodec/nuv.c
	libavcodec/nvenc.c
	libavcodec/options.c
	libavcodec/parser.c
	libavcodec/pngenc.c
	libavcodec/proresenc_kostya.c
	libavcodec/qsvdec.c
	libavcodec/svq1enc.c
	libavcodec/tiffenc.c
	libavcodec/truemotion2.c
	libavcodec/utils.c
	libavcodec/utvideoenc.c
	libavcodec/vc1dec.c
	libavcodec/wmalosslessdec.c
	libavformat/adxdec.c
	libavformat/aiffdec.c
	libavformat/apc.c
	libavformat/apetag.c
	libavformat/avidec.c
	libavformat/bink.c
	libavformat/cafdec.c
	libavformat/flvdec.c
	libavformat/id3v2.c
	libavformat/isom.c
	libavformat/matroskadec.c
	libavformat/mov.c
	libavformat/mpc.c
	libavformat/mpc8.c
	libavformat/mpegts.c
	libavformat/mvi.c
	libavformat/mxfdec.c
	libavformat/mxg.c
	libavformat/nutdec.c
	libavformat/oggdec.c
	libavformat/oggparsecelt.c
	libavformat/oggparseflac.c
	libavformat/oggparseopus.c
	libavformat/oggparsespeex.c
	libavformat/omadec.c
	libavformat/rawdec.c
	libavformat/riffdec.c
	libavformat/rl2.c
	libavformat/rmdec.c
	libavformat/rtpdec_latm.c
	libavformat/rtpdec_mpeg4.c
	libavformat/rtpdec_qdm2.c
	libavformat/rtpdec_svq3.c
	libavformat/sierravmd.c
	libavformat/smacker.c
	libavformat/smush.c
	libavformat/spdifenc.c
	libavformat/takdec.c
	libavformat/tta.c
	libavformat/utils.c
	libavformat/vqf.c
	libavformat/westwood_vqa.c
	libavformat/xmv.c
	libavformat/xwma.c
	libavformat/yop.c

Merged-by: Michael Niedermayer <michael@niedermayer.cc>
2015-07-27 23:15:19 +02:00