Each lace must be independent according to the specification.
Fix heap-buffer-overflow in matroska_parse_block for
corrupted real media in mkv files.
Stricter check than fc43c19a56
CC: libav-stable@libav.org
Fix heap-buffer-overflow in matroska_parse_block for
corrupted real media in mkv files.
CC: libav-stable@libav.org
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
This patch adds the enums for the ContentEncryption elements.
This patch also adds support for parsing the ContentEncKeyID. The
ContentEncKeyID is then base64 encoded and stored in the stream's
metadata.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Adding support for parsing AlphaMode element in the Track header
and export that information as a metadata tag. This flag indicates
presence of alpha channel data in BlockAdditional element.
Signed-off-by: Vignesh Venkatasubramanian <vigneshv@google.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Matroska specification lists support for BlockAdditional element
which is not supported by ffmpeg's matroska parser. This patch
adds grammar definitions for parsing that element (and few other
related elements) and then puts the data in AVPacket.side_data
with new AVPacketSideDataType AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL.
Signed-off-by: Vignesh Venkatasubramanian <vigneshv@google.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '7b8c5b263bc680eff5710bee5994de39d47fc15e':
vc1dec: prevent a crash due missing pred_flag parameter
matroska: Fix use after free
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* qatar/master:
doc: add apidoc target for doxygen API documentation
matroskadec: do not use avpacket internals
Conflicts:
doc/Makefile
libavformat/matroskadec.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '4c995fafd861f537360b3717901cdbed6a6844e7':
configure: simplify get_version() function
build: support asan and tsan toolchain shortcuts
rmdec: Move SIPR code shared with Matroska demuxer to a separate file
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* qatar/master:
libx264: add forgotten ;
matroskadec: fix a sanity check.
matroskadec: only return corrupt packets that actually contain data
lavf: zero data/size of the packet passed to read_packet().
ARM: use 2-operand syntax for ADD Rd, PC in Apple PIC code
ARM: align PIC offset pools to 4 bytes
ARM: swap source operands in some add instructions
configure: update tms470 detection for latest version
lavf probe: prevent codec probe with no data at all seen
motion_est: fix use of inline on extern functions
Conflicts:
libavcodec/motion_est_template.c
libavformat/matroskadec.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* qatar/master:
mp3dec: read Xing frame TOC index
mp3dec: use named constants for Xing header flags
libx264: add support for nal-hrd, required for Blu-ray streams.
mov: support random access point grouping
matroskadec: properly support BlockDuration
Conflicts:
libavcodec/libx264.c
libavformat/isom.h
libavformat/matroskadec.c
libavformat/mov.c
libavformat/mp3dec.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '117d8c6d1f1c187ffc6098d9618457e00534e013':
matroska: implement support for ProRes
matroska: implement support for ALAC
Conflicts:
libavformat/matroskaenc.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '581281e242609a222233a2e5538b89dfb88fb18e':
matroskadec: check realloc in lzo encoding
matroska: honor error_recognition on unknown doctypes
tiffdec: Add support for GRAY16LE.
tiffenc: Add support for little endian RGB48 and GRAY16
mpeg4: support frame parameter changes with frame-mt
mpegvideo: check ff_find_unused_picture() return value for errors
mpegvideo: release frame buffers before freeing them
configure: msvc: default to 'lib' as 'ar' tool
build: support some non-standard ar variants
Conflicts:
libavcodec/h263dec.c
libavcodec/mpegvideo.c
libavcodec/tiff.c
libavcodec/tiffenc.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Support Matroska native formatting.
On demuxing prepend a Frame container atom (32bit big endian encoded
frame size and 'icpf' string).
On muxing remove it.
After much discussion and back-and-forth, we reached the conclusion
that matroska uses convergence_duration for subtitle duration because
a 32bit value isn't large enough to store the duration if sub-micro-second
timebases are used. Matroska may not be the only one that supports these
timebases, but it's certainly the only one that ffmpeg attempts to support
in this way.
The long term solution that we seemed to reach was that if we encounter
a matroska file with a sub-micro-second timebase, we should internally
scale it up to at least micro-second, and then duration can be used
normally. This suggests that on the encode side, we should not allow
generation of files with sub-micro-second timebases, but that's a separate
issue.
That being a non-trivial change, and the subtitle interoperability breakage
being very real, I'm re-submitting this small change for consideration.
In this diff, we make sure that duration is populated by the matroska
demuxer, and that convergence_duration is respected in matroskaenc and
srtenc, but that duration is used otherwise. This ends up being a strict
improvement - pipelines that use convergence duration are unchanged, and
ones that are currently broken due to the duration mismatch will start
working - except for the ones with the extreme timebases, but those were
already broken.
Signed-off-by: Philip Langdale <philipl@overt.org>
While not explicitly stated in the specs, the original author
has stated that S_TEXT/UTF-8 is expected to be text using Subrip
markup, but without Subrip in-band timing.
So, now that we have a decoder that conforms to this expectation,
let's use it.
Note that this change will impact tools that use libavformat. If
they expect srt subtitles to have CODEC_ID_TEXT, they must be
adjusted to expect CODEC_ID_SUBRIP. The actual content is, obviously,
unchanged.
Signed-off-by: Philip Langdale <philipl@overt.org>
* qatar/master:
avformat: Drop pointless "format" from container long names
swscale: bury one more piece of inline asm under HAVE_INLINE_ASM.
wv: K&R formatting cosmetics
configure: Add missing descriptions to help output
h264_ps: declare array of colorspace strings on its own line.
fate: amix: specify f32 sample format for comparison
tiny_psnr: support 32-bit float samples
eamad/eatgq/eatqi: call special EA IDCT directly
eamad: remove use of MpegEncContext
mpegvideo: remove unnecessary inclusions of faandct.h
af_asyncts: avoid overflow in out_size with large delta values
af_asyncts: add first_pts option
Conflicts:
configure
libavcodec/eamad.c
libavcodec/h264_ps.c
libavformat/crcenc.c
libavformat/ffmdec.c
libavformat/ffmenc.c
libavformat/framecrcenc.c
libavformat/md5enc.c
libavformat/nutdec.c
libavformat/rawenc.c
libavformat/yuv4mpeg.c
tests/tiny_psnr.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* qatar/master:
flvdec: remove spurious use of stream id
lavf: deprecate r_frame_rate.
lavf: round estimated average fps to a "standard" fps.
Conflicts:
ffmpeg.c
ffprobe.c
libavformat/avformat.h
libavformat/electronicarts.c
libavformat/flvdec.c
libavformat/rawdec.c
libavformat/utils.c
tests/ref/fate/iv8-demux
Merged-by: Michael Niedermayer <michaelni@gmx.at>
According to its description, it is supposed to be the LCM of all the
frame durations. The usability of such a thing is vanishingly small,
especially since we cannot determine it with any amount of reliability.
Therefore get rid of it after the next bump.
Replace it with the average framerate where it makes sense.
FATE results for the wtv and xmv demux tests change. In the wtv case
this is caused by the file being corrupted (or possibly badly cut) and
containing invalid timestamps. This results in lavf estimating the
framerate wrong and making up wrong frame durations.
In the xmv case the file contains pts jumps, so again the estimated
framerate is far from anything sane and lavf again makes up different
frame durations.
In some other tests lavf starts making up frame durations from different
frame.
* qatar/master:
FATE: fix the asyncts test
build: Drop gcc-specific warning flag from header compilation rule
FATE: add a test for the asyncts audio filter.
matroskadec: return more correct error code on read error.
buffersrc: check ff_get_audio_buffer() for errors.
lavfi: check all ff_get_video_buffer() calls for errors.
lavfi: check all avfilter_ref_buffer() calls for errors.
vf_select: avoid an unnecessary avfilter_ref_buffer().
buffersrc: avoid creating unnecessary buffer reference
lavfi: use avfilter_unref_bufferp() where appropriate.
vf_fps: add more error checks.
vf_fps: fix a memleak on malloc failure.
lavfi: check all ff_start_frame/draw_slice/end_frame calls for errors
lavfi: add error handling to end_frame().
lavfi: add error handling to draw_slice().
lavfi: add error handling to start_frame().
Conflicts:
Makefile
ffplay.c
libavfilter/buffersrc.c
libavfilter/vf_boxblur.c
libavfilter/vf_drawtext.c
libavfilter/vf_fade.c
libavfilter/vf_frei0r.c
libavfilter/vf_hflip.c
libavfilter/vf_overlay.c
libavfilter/vf_pad.c
libavfilter/vf_scale.c
libavfilter/video.c
libavfilter/vsrc_color.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* qatar/master:
mss3: use standard zigzag table
mss3: split DSP functions that are used in MTS2(MSS4) into separate file
motion-test: do not use getopt()
tcp: add initial timeout limit for incoming connections
configure: Change the rdtsc check to a linker check
avconv: propagate fatal errors from lavfi.
lavfi: add error handling to filter_samples().
fate-run: make avconv() properly deal with multiple inputs.
asplit: don't leak the input buffer.
af_resample: fix request_frame() behavior.
af_asyncts: fix request_frame() behavior.
libx264: support aspect ratio switching
matroskadec: honor error_recognition when encountering unknown elements.
lavr: resampling: add support for s32p, fltp, and dblp internal sample formats
lavr: resampling: add filter type and Kaiser window beta to AVOptions
lavr: Use AV_SAMPLE_FMT_NONE to auto-select the internal sample format
lavr: mix: validate internal sample format in ff_audio_mix_init()
Conflicts:
ffmpeg.c
ffplay.c
libavcodec/libx264.c
libavfilter/audio.c
libavfilter/split.c
libavformat/tcp.c
tests/fate-run.sh
Merged-by: Michael Niedermayer <michaelni@gmx.at>
currently a overflow there should be impossible but future changes to
the code could easily introduce a bug that no longer limits the 2
values sufficiently so better protect it via av_assert.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* qatar/master:
mkv: mark corrupted packets and return them
mkv: forward EMBL block data error
avcodec: introduce YCoCg colorspace
avcodec: cosmetic cleanup on header
aac sbr: align struct member by 32 byte.
Conflicts:
libavcodec/avcodec.h
libavformat/matroskadec.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* qatar/master:
matroska: Clear prev_pkt between seeks.
avutil: change default buffer size alignment for sample buffer functions
audemux: Add a sanity check for the number of channels
Remove libdirac decoder.
matroska: Add incremental parsing of clusters.
avconv: fix off by one check in complex_filter
mpegts: Try seeking back even for nonseekable protocols
swscale: K&R formatting cosmetics (part III)
Conflicts:
configure
doc/general.texi
doc/platform.texi
ffmpeg.c
libavcodec/Makefile
libavcodec/allcodecs.c
libavcodec/libdirac.h
libavcodec/libdiracdec.c
libavformat/au.c
libavformat/mpegts.c
libswscale/input.c
tests/ref/seek/lavf_mkv
Merged-by: Michael Niedermayer <michaelni@gmx.at>
The new incremental parser doesn't always clear prev_pkt,
however the packet queue is cleared when seeking. Which leads
to a use-after-free.
Verified using Valgrind.
Signed-off-by: Dale Curtis <dalecurtis@chromium.org>
Signed-off-by: Justin Ruggles <justin.ruggles@gmail.com>
Reduces the amount of upfront data required for cluster parsing
thus decreasing latency on seek and startup.
The change in the seek-lavf_mkv FATE test is due to incremental
parsing no longer reading as much data as the old parser and
thus not having that additional data to generate index entries
based on keyframes. Index entries are added correctly as the
file is parsed.
All FATE tests pass and Chrome has been using this patch for ~6
months without issue.
Currently incremental parsing is not supported for files with
SSA tracks since they require merging packets between clusters.
In this case the code falls back to non-incremental parsing.
Signed-off-by: Aaron Colwell <acolwell@chromium.org>
Signed-off-by: Dale Curtis <dalecurtis@chromium.org>
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
* qatar/master:
ppc: drop unused function dct_quantize_altivec()
mpegaudiodec: Do not discard mp_decode_frame() return value.
matroska: do not set invalid default duration if frame rate is zero
mkv: use av_reduce instead of av_d2q for framerate estimation
mkv: report average framerate as minimal as well
avcodec_string: Favor AVCodecContext.codec over the default codec.
cook: Make constants passed to AV_BE2NE32C() unsigned to avoid signed overflow.
Conflicts:
libavcodec/cook.c
libavcodec/ppc/mpegvideo_altivec.c
libavcodec/utils.c
libavformat/matroskadec.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
If a video track specifies a zero frame rate (invalid but occurs),
this results in a division by zero and subsequent undefined conversion
to integer. Setting the default duration from the frame rate only
if the latter is greater than zero avoids such problems.
Signed-off-by: Mans Rullgard <mans@mansr.com>
This replaces the matroskadec one with the same name.
The advantage is not only easier reuse in other demuxers
but also that we can make the decisions after the parser.
This fixes seeking in files that mark the keyframes incorrectly,
for example the file in track ticket #1003.
The matroska variable is still kept to be able to complain
about such broken files.
Signed-off-by: Reimar Döffinger <Reimar.Doeffinger@gmx.de>
* qatar/master:
swscale: K&R formatting cosmetics (part II)
tiffdec: Add a malloc check and refactor another.
faxcompr: Check malloc results and unify return path
configure: escape colons in values written to config.fate
ac3dsp: call femms/emms at the end of float_to_fixed24() for 3DNow and SSE
matroska: Fix leaking memory allocated for laces.
pthread: Fix crash due to fctx->delaying not being cleared.
vp3: Assert on invalid filter_limit values.
h264: fix 10bit biweight functions after recent x86inc.asm fixes.
ffv1: Fix size mismatch in encode_line.
movenc: Remove a dead initialization
git-howto: Explain how to avoid Windows line endings in git checkouts.
build: Move all arch OBJS declarations into arch subdirectory Makefiles.
Conflicts:
configure
libavcodec/vp3.c
libavformat/matroskadec.c
libavutil/Makefile
libswscale/Makefile
libswscale/swscale.c
libswscale/swscale_internal.h
libswscale/utils.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
During error conditions matroska_parse_block may exit without
freeing the memory allocated for laces.
Found via valgrind: http://pastebin.com/E54k8QFU
Signed-off-by: Dale Curtis <dalecurtis@chromium.org>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
During error conditions matroska_parse_block may exit without
freeing the memory allocated for laces.
Found via valgrind: http://pastebin.com/E54k8QFU
Signed-off-by: Dale Curtis <dalecurtis@chromium.org>
Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
* qatar/master: (29 commits)
amrwb: remove duplicate arguments from extrapolate_isf().
amrwb: error out early if mode is invalid.
h264: change underread for 10bit QPEL to overread.
matroska: check buffer size for RM-style byte reordering.
vp8: disable mmx functions with sse/sse2 counterparts on x86-64.
vp8: change int stride to ptrdiff_t stride.
wma: fix invalid buffer size assumptions causing random overreads.
Windows Media Audio Lossless decoder
rv10/20: Fix slice overflow with checked bitstream reader.
h263dec: Disallow width/height changing with frame threads.
rv10/20: Fix a buffer overread caused by losing track of the remaining buffer size.
rmdec: Honor .RMF tag size rather than assuming 18.
g722: Fix the QMF scaling
r3d: don't set codec timebase.
electronicarts: set timebase for tgv video.
electronicarts: parse the framerate for cmv video.
ogg: don't set codec timebase
electronicarts: don't set codec timebase
avs: don't set codec timebase
wavpack: Fix an integer overflow
...
Conflicts:
libavcodec/arm/vp8dsp_init_arm.c
libavcodec/fraps.c
libavcodec/h264.c
libavcodec/mpeg4videodec.c
libavcodec/mpegvideo.c
libavcodec/msmpeg4.c
libavcodec/pnmdec.c
libavcodec/qpeg.c
libavcodec/rawenc.c
libavcodec/ulti.c
libavcodec/vcr1.c
libavcodec/version.h
libavcodec/wmalosslessdec.c
libavformat/electronicarts.c
libswscale/ppc/yuv2rgb_altivec.c
tests/ref/acodec/g722
tests/ref/fate/ea-cmv
Merged-by: Michael Niedermayer <michaelni@gmx.at>