Compare commits

..

119 Commits

Author SHA1 Message Date
Michael Niedermayer 2c8c55195d Update for 2.4.8
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-30 01:28:28 +02:00
James Almer e74ad9035f avutil/cpu: add missing check for mmxext to av_force_cpu_flags
Reviewed-by: Michael Niedermayer <michaelni@gmx.at>
Signed-off-by: James Almer <jamrial@gmail.com>
(cherry picked from commit 1f5d1eed78)
2015-03-28 22:10:57 -03:00
Michael Niedermayer 539172c85b avcodec/msrledec: restructure msrle_decode_pal4() based on the line number instead of the pixel pointer
Fixes out of array access
Fixes: da14e86d8462be6493eab16bc2d40f88/asan_heap-oob_204cfd2_528_cov_340150052_COMPRESS.BMP

Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit f7e1367f58)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:23 +02:00
Michael Niedermayer 2049d95f2f avcodec/hevc_ps: Check cropping parameters more correctly
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 06c70d4537)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:23 +02:00
Michael Niedermayer 760c384f7d avcodec/dnxhddec: Check that the frame is interlaced before using cur_field
Fixes Ticket4227

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 2c660e34cf)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:23 +02:00
Michael Niedermayer 17e6d249b7 avformat/mov: Disallow ".." in dref unless use_absolute_path is set
as this kind of allows to circumvent it to some extend.
We also could add a separate parameter or value to choose this

Found-by: ramiro
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 1e4d0498df)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:23 +02:00
Michael Niedermayer e0975c31f1 avformat/mov: Check for string truncation in mov_open_dref()
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 8003816e16)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:23 +02:00
Michael Niedermayer e168db3eae avformat/mov: Use sizeof(filename) instead of a literal number
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 21a53dd08d)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:23 +02:00
Christophe Gisquet b9b56ded7d eac3dec: fix scaling
This is the remaining error, the output on the SPX samples,
respectively csi_miami_stereo_128_spx.eac3 and
csi_miami_5.1_256_spx.eac3, goes from:
stddev:    8.71 PSNR: 77.52 MAXDIFF:  235
stddev:24270.51 PSNR: 22.17 MAXDIFF:47166
to:
stddev:    0.12 PSNR:114.12 MAXDIFF:    1
stddev:    0.12 PSNR:114.73 MAXDIFF:    1

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 0c3339f4bd)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:23 +02:00
Christophe Gisquet 691f9dee00 ac3_fixed: fix computation of spx_noise_blend
It was set to 1 instead of sqrt(3)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit c4bf3833f4)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:23 +02:00
Christophe Gisquet 40dab45050 ac3_fixed: fix out-of-bound read
Should also improve decoding, but actually doesn't...

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit b083440060)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:23 +02:00
Andreas Cadhalpun f45f3f99a4 ac3dec_fixed: always use the USE_FIXED=1 variant of the AC3DecodeContext
The AC3DecodeContext has a float (USE_FIXED=0) and an integer
(USE_FIXED=1) variant, both of which can be present in the same binary.
This is not only very confusing, but it also breaks horribly, when one
variant is used by code expecting the other.

This currently happens, because eac3dec.c is only compiled for the float
variant, but also used from ac3dec_fixed.c, which uses the integer
variant.

The result is memory corruption, leading to crashes.

So compile eac3dec.c once for each variant and adapt it, so that it
works with the integer variant.

A loss of precission and scaling bug has been fixed by the committer
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 7b05b5093e)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:22 +02:00
Michael Niedermayer f11afe6bc6 avcodec/012v: redesign main loop
Fixes out of array accesses
Fixes: ffmpeg_012v_crash.ts

Found-by: Thomas Lindroth <thomas.lindroth@gmail.com>
Reviewed-by: Thomas Lindroth <thomas.lindroth@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 48df30d36c)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:22 +02:00
Michael Niedermayer 8639c37d2b avcodec/012v: Check dimensions more completely
Fixes division by 0

Found-by: Thomas Lindroth <thomas.lindroth@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit d3b25383da)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:22 +02:00
Andreas Cadhalpun de2f46c59d asfenc: fix leaking asf->index_ptr on error
Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 2c8cff2be4)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:22 +02:00
Andreas Cadhalpun 7b3d8ae32d roqvideoenc: set enc->avctx in roq_encode_init
So far it is only set in roq_encode_frame, but it is used in
roq_encode_end to free the coded_frame. This currently segfaults if
roq_encode_frame is not called between roq_encode_init and
roq_encode_end.

Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit cf82c426fa)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:22 +02:00
Michael Niedermayer 7700947525 avcodec/options_table: remove extradata_size from the AVOptions table
allowing access to the size but not the extradata itself is not useful
and could lead to potential problems if writing happens through this field

Reviewed-by: Andreas Cadhalpun <andreas.cadhalpun@googlemail.com>
Reviewed-by: Lukasz Marek <lukasz.m.luki2@gmail.com>
Reviewed-by: Nicolas George <george@nsup.org>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 1f4088b285)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:22 +02:00
Andreas Cadhalpun 820b84d065 ffmdec: limit the backward seek to the last resync position
If resyncing leads to the same position as previously, it will again
lead to a resync attempt, resulting in an infinite loop.

Thus don't seek back beyond the last syncpoint.

Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 6b8263b03a)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:22 +02:00
Andreas Cadhalpun 443fc85203 ffmdec: make sure the time base is valid
A negative time base can trigger assertions.

Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 4c91d81be2)

Conflicts:

	libavformat/ffmdec.c
2015-03-29 03:34:22 +02:00
Andreas Cadhalpun d81150929d ffmdec: fix infinite loop at EOF
If EOF is reached, while skipping bytes, avio_tell(pb) won't change
anymore, resulting in an infinite loop.

Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 6fa98822eb)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:22 +02:00
Michael Niedermayer 6a671797d7 avcodec/tiff: move bpp check to after "end:"
This ensures that all current and future code-pathes get bpp checked

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit d5e9fc7821)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:22 +02:00
Andreas Cadhalpun 23666f0e22 doc: avoid the incorrect phrase 'allow to'
Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 10fd7ff814)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:22 +02:00
Michael Niedermayer 7470003e80 avcodec/opusdec: Fix delayed sample value
Fixes out of array access
Fixes: ffmpeg_opus_crash1.ogg

This solution is likely not optimal in terms of error concealment but
its simple and fixes the out of array access.

Found-by: Thomas Lindroth <thomas.lindroth@gmail.com>
Tested-by: Thomas Lindroth <thomas.lindroth@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 6c583e9048)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:22 +02:00
Michael Niedermayer ee820d0512 avcodec/opusdec: Clear out pointers per packet
This is safer than to assume that all error pathes cleared them and
nothing will use uncleared pointers.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 1ae092587f)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:22 +02:00
Michael Niedermayer 9821cf9e6e avcodec/utils: Align YUV411 by as much as the other YUV variants
Fixes out of array accesses
Fixes: ffmpeg_mjpeg_crash2.avi

Found-by: Thomas Lindroth <thomas.lindroth@gmail.com>
Tested-by: Thomas Lindroth <thomas.lindroth@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit e3201c38d5)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:22 +02:00
Ronald S. Bultje 54d40b7c45 vp9: fix segmentation map retention with threading enabled.
Fixes ticket 4359.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit efff3854f0)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:22 +02:00
Stefano Sabatini 99de009e97 doc/protocols/tcp: fix units of listen_timeout option value, from microseconds to milliseconds
s->listen_timeout is passed to ff_listen_bind(), which accepts a timeout
value expressed in milliseconds.

The unit was incorrectly set in 1b4da43ce0.
(cherry picked from commit 6db20926c3)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:22 +02:00
Steve Lhomme 2a6f0c7e07 fix VP9 packet decoder returning 0 instead of the used data size
See https://trac.videolan.org/vlc/ticket/14022#comment:6

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 4851db80a4)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:22 +02:00
Andreas Cadhalpun a80b38d7d2 avformat/flvenc: check that the codec_tag fits in the available bits
flags is later written with avio_w8 and if it doesn't fit in one byte it
triggers an av_assert2.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit e8565d21c2)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:22 +02:00
Andreas Cadhalpun ddffbf720a avcodec/utils: use correct printf specifier in ff_set_sar
Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 732c3ebffa)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:22 +02:00
Michael Niedermayer d42540499c avutil/imgutils: correctly check for negative SAR components
These could trigger assert failures previously

Found-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 5705dc5276)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:22 +02:00
Michael Niedermayer eceea69567 swscale/utils: clear formatConvBuffer on allocation
Fixes use of uninitialized memory
Fixes: asan_heap-oob_35ca682_1474_cov_3230122439_aletrek_tga_16bit.mov

Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 007498fc1a)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:22 +02:00
Andreas Cadhalpun 2ec6a7a1e0 avformat/bit: only accept the g729 codec and 1 channel
Other codecs/channel numbers are not supported by this muxer.

Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit d0b8640f75)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:22 +02:00
Andreas Cadhalpun 6fbd897cab avformat/bit: check that pkt->size is 10 in write_packet
Ohter packet sizes are not supported by this muxer.

This avoids a null pointer dereference of pkt->data.

Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit eeda2c3de8)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:22 +02:00
Andreas Cadhalpun f33a2ea2ee avformat/adxdec: check avctx->channels for invalid values
This avoids a null pointer dereference of pkt->data.

Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 7faa40af98)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:22 +02:00
Dyami Caliri bcbae2d95f Fix buffer_size argument to init_put_bits() in multiple encoders.
Several encoders were multiplying the buffer size by 8, in order to get
a bit size. However, the buffer_size argument is for the byte size of
the buffer. We had experienced crashes encoding prores (Anatoliy) at
size 4096x4096.
(cherry picked from commit 50833c9f7b)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:22 +02:00
James Cowgill 198aa9fabd mips/acelp_filters: fix incorrect register constraint
Change register constraint on the v variable from = to +. This was causing GCC
to think that the v variable was never read and therefore not initialize it.

This fixes about 20 fate failures on mips64el.

Signed-off-by: James Cowgill <james410@cowgill.org.uk>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit b9de1303a6)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:22 +02:00
Michael Niedermayer e8a44b8387 avcodec/hevc_ps: Sanity checks for some log2_* values
log2 values which imply numeric overflow are not supported

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 205b2ba3d6)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:22 +02:00
Michael Niedermayer ca663f79e9 avcodec/zmbv: Check len before reading in decode_frame()
Fixes out of array read
Fixes: asan_heap-oob_4d4eb0_3994_cov_3169972261_zmbv_15bit.avi

Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 1f5c7781e6)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:22 +02:00
Michael Niedermayer ba59d92128 avcodec/h264: Only reinit quant tables if a new PPS is allowed
Fixes null pointer dereference
Fixes: signal_sigsegv_3042097_3007_cov_1741463594_non_monotone_timestamps1.mkv

Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit c23a0e77dd)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:21 +02:00
Michael Niedermayer 4954306228 avcodec/snowdec: Fix ref value check
Fixes integer overflow and out of array read.
Fixes: signal_sigsegv_24169e6_3445_cov_3778346427_snow_chroma_bug.avi

Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 8f4cbf9402)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:21 +02:00
Michael Niedermayer 2dde6d5d36 swscale/utils: More carefully merge and clear coefficients outside the input
Fixes out of array read
Fixes: asan_heap-oob_35ca682_1474_cov_3230122439_aletrek_tga_16bit.mov

Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 1895d414aa)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:21 +02:00
Michael Niedermayer 9dc6868155 avcodec/a64multienc: Assert that the Packet size does not grow
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 29bbc1be48)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:21 +02:00
Michael Niedermayer 35a79bdf7d avcodec/a64multienc: simplify frame handling code
This also fixes a memleak

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 4da351ff0c)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:21 +02:00
Andreas Cadhalpun 37941c03b7 avcodec/a64multienc: fix use of uninitialized values in to_meta_with_crop
Averaging over 2 pixels doesn't work correctly for the last pixel, because the
rest of the buffer is not initialized.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 87513d6545)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:21 +02:00
Andreas Cadhalpun 584d90b277 avcodec/a64multienc: initialize mc_meta_charset to zero
This fixes the use of uninitialized values in avpriv_do_elbg.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit ab759f8f4a)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:21 +02:00
Michael Niedermayer acfe143736 avcodec/a64multienc: don't set incorrect packet size
This fixes invalid reads of the packet buffer in av_dup_packet

Based on patch by Andreas Cadhalpun <andreas.cadhalpun@googlemail.com>

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit d96142e9af)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:21 +02:00
Andreas Cadhalpun 3167bba15e avcodec/a64multienc: use av_frame_ref instead of copying the frame
This fixes freeing the frame buffer twice on cleanup leading to a crash.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 39e4ed7c1d)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:21 +02:00
Michael Niedermayer 88c06ca251 avcodec/x86/mlpdsp_init: Simplify mlp_filter_channel_x86()
Based on patch by Francisco Blas Izquierdo Riera
Commit message partly taken from carl

fixes a compilation
error in mlpdsp_init.c with -fstack-check and some gcc compilers (I
reproduced the issue with gcc 4.7.3) by simplifying the code.

See also https://bugs.gentoo.org/show_bug.cgi?id=471756

$ make libavcodec/x86/mlpdsp_init.o
libavcodec/x86/mlpdsp_init.c: In function ‘mlp_filter_channel_x86’:
libavcodec/x86/mlpdsp_init.c:142:5: error: can’t find a register in
class ‘GENERAL_REGS’ while reloading ‘asm’
libavcodec/x86/mlpdsp_init.c:142:5: error: ‘asm’ operand has impossible
constraints

4551 -> 4509 dezicycles

Reviewed-by: Ramiro Polla <ramiro.polla@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 03f39fbb2a)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:21 +02:00
Michael Niedermayer 093e3f4d5b avformat/omadec: Use 64bit for ret to avoid overflow
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 0f55bc29d4)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:21 +02:00
Michael Niedermayer 5169df2122 avformat/vqf: Use 64bit for ret to avoid overflow
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit cb08687180)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:21 +02:00
Michael Niedermayer 8f65bedbaf avformat/wtvdec: Use 64bit for ret to avoid overflow
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit d44e0d8b93)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:21 +02:00
Michael Niedermayer 81ee3385ee avformat/mvdec: Use 64bit for ret to avoid overflow
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 26c0cc154e)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:21 +02:00
Michael Niedermayer 2046275aaf avformat/gxf: Use 64bit for res to avoid overflow
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 12987f8900)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:21 +02:00
Michael Niedermayer 1ee7f2d77e avformat/idcin: Use 64bit for ret to avoid overflow
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit d1923d15a3)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:34:21 +02:00
Michael Niedermayer 51b0d7675c Merge commit 'b7c8a1fbbd0b6ac0b096ef0402dee440ff27ecb7' into release/2.4
* commit 'b7c8a1fbbd0b6ac0b096ef0402dee440ff27ecb7':
  webp: ensure that each transform is only used once

See: c089e720c1
Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:28:56 +02:00
Andreas Cadhalpun 53fa0d370c webp: ensure that each transform is only used once
According to the WebP Lossless Bitstream Specification
"each transform is allowed to be used only once".

If a transform is more than once this can lead to memory
corruption.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit c089e720c1)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:28:38 +02:00
Michael Niedermayer 8e7eb26875 Merge commit '9cef65434e5e5ffbd4a856ce7ae9c067dec039b7' into release/2.4
* commit '9cef65434e5e5ffbd4a856ce7ae9c067dec039b7':
  h264_ps: properly check cropping parameters against overflow

Conflicts:
	libavcodec/h264_ps.c

See: c3bd306e78
Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:27:07 +02:00
Michael Niedermayer 6e835eb2dd Merge commit 'a529f6648ed450f7e846a0e704a0a3260aaa4b62' into release/2.4
* commit 'a529f6648ed450f7e846a0e704a0a3260aaa4b62':
  hevc: zero the correct variables on invalid crop parameters

Conflicts:
	libavcodec/hevc_ps.c

See: 7bce99216f
Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:16:54 +02:00
Michael Niedermayer 7bce99216f avcodec/hevc_ps: More complete window reset
Fixes out of array read
Fixes: signal_sigsegv_35bcf26_471_cov_2806540268_CAINIT_A_SHARP_4.bit
Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 57e5812198)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:16:27 +02:00
Michael Niedermayer 4bc7996dcb Merge commit 'a219add4e8e2d3192d99d6c6efe97ec7c429c5ad' into release/2.4
* commit 'a219add4e8e2d3192d99d6c6efe97ec7c429c5ad':
  hevc: make the crop sizes unsigned

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-29 03:13:23 +02:00
Ronald S. Bultje f3b8cd7481 vp9: make above buffer pointer 32-byte aligned.
Fixes ticket #4383

Signed-off-by: James Almer <jamrial@gmail.com>
(cherry picked from commit 1fd1f58bd6)
2015-03-21 14:27:37 -03:00
Andreas Cadhalpun b7c8a1fbbd webp: ensure that each transform is only used once
According to the WebP Lossless Bitstream Specification
"each transform is allowed to be used only once".

If a transform is more than once this can lead to memory
corruption.

Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Signed-off-by: Anton Khirnov <anton@khirnov.net>
(cherry picked from commit 30e6abd1a8)
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2015-03-21 09:45:30 +01:00
Anton Khirnov 9cef65434e h264_ps: properly check cropping parameters against overflow
CC: libav-stable@libav.org
(cherry picked from commit d8a45d2d49)
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2015-03-21 09:45:20 +01:00
Anton Khirnov a529f6648e hevc: zero the correct variables on invalid crop parameters
It's the output_window that is applied to the output frame, not
pic_conf_win

(cherry picked from commit 5127c00b97)
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2015-03-21 09:45:19 +01:00
Anton Khirnov a219add4e8 hevc: make the crop sizes unsigned
(cherry picked from commit c929659bdd)
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2015-03-21 09:45:18 +01:00
Michael Niedermayer 491c4bbb38 Revert "avutil/opencl: is_compiled flag not being cleared in av_opencl_uninit"
Fixed build with opencl enabled
Found-by:  WJ Liu

This reverts commit 0f2359b869.

(cherry picked from commit ebd59d271c)
2015-03-09 14:32:51 -03:00
Michael Niedermayer 6bf31ae3f9 Merge commit '00abc0080d2f5f179f18534713659ce79b22e647' into release/2.4
* commit '00abc0080d2f5f179f18534713659ce79b22e647':
  doc: More changelog updates for v11.3

Conflicts:
	Changelog

not merged

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-09 11:41:49 +01:00
Reinhard Tartler 00abc0080d doc: More changelog updates for v11.3 2015-03-08 21:51:11 -04:00
Michael Niedermayer 2f323df833 Merge commit '3a417a86b330b7c1acf9db4f729be7d619caaded' into release/2.4
* commit '3a417a86b330b7c1acf9db4f729be7d619caaded':
  utvideodec: Handle slice_height being zero

See: 3881606240
Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-09 01:52:41 +01:00
Michael Niedermayer cda143aaa4 Merge commit 'a73b2c288e3dace6e054a5b48640978be1d5df84' into release/2.4
* commit 'a73b2c288e3dace6e054a5b48640978be1d5df84':
  adxdec: set avctx->channels in adx_read_header

See: 72f83ad277
Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-09 01:38:56 +01:00
Andreas Cadhalpun 72f83ad277 avformat/adxdec: set avctx->channels in adx_read_header
It is used in adx_read_packet, which currently depends on the decoder/parser setting this value between reading the file header and demuxing the first packet.

Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 64ea4a0598)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-09 01:37:48 +01:00
Michael Niedermayer 20655dd2ec Merge commit '2ef2f60b4f0308d1c871091c9c1a9641d14ec585' into release/2.4
* commit '2ef2f60b4f0308d1c871091c9c1a9641d14ec585':
  rmenc: limit packet size

Conflicts:
	libavformat/rmenc.c

See: 73ca672fb6
Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-09 01:36:01 +01:00
Andreas Cadhalpun 73ca672fb6 avformat/rm: limit packet size
The chunk size is limited to 0xFFFF (written by avio_wb16), so make
sure that the packet size is not too large.

Such large frames need to be split into slices smaller than 64 kB, but
that is currently supported neither by the rv10/rv20 encoders nor the rm
muxer.

Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>

See Ticket244

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 08728f400b)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-09 01:33:24 +01:00
Michael Niedermayer c99b8d0cd2 Merge commit '905172d75c9cfd93c757b09fa4b8afa0e926a13c' into release/2.4
* commit '905172d75c9cfd93c757b09fa4b8afa0e926a13c':
  webp: validate the distance prefix code

See: 897a51f47b
Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-09 01:26:09 +01:00
Andreas Cadhalpun 897a51f47b avcodec/webp: validate the distance prefix code
According to the WebP Lossless Bitstream Specification the highest
allowed value for a prefix code is 39.

If prefix_code is too large, the calculated extra_bits has an invalid
value and triggers an assertion in get_bits.

Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 5de2dab12b)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-09 01:24:24 +01:00
Michael Niedermayer f2a84d0433 Merge commit '8aee35acb1b40e51a4fc8d7f7c561088e25d6d2e' into release/2.4
* commit '8aee35acb1b40e51a4fc8d7f7c561088e25d6d2e':
  rv10: check size of s->mb_width * s->mb_height

Conflicts:
	libavcodec/rv10enc.c

See: d08db138e2
Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-09 01:23:24 +01:00
Andreas Cadhalpun d08db138e2 avcodec/rv10: check size of s->mb_width * s->mb_height
If it doesn't fit into 12 bits it triggers an assertion.

Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
(cherry picked from commit 2578a54618)

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-09 01:22:01 +01:00
Michael Niedermayer 5bd9c540d6 Merge commit 'e818da77240146b36d6669b1c4e0565239dc55d3' into release/2.4
* commit 'e818da77240146b36d6669b1c4e0565239dc55d3':
  eamad: check for out of bounds read

Conflicts:
	libavcodec/eamad.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-09 01:18:06 +01:00
Michael Niedermayer 3a417a86b3 utvideodec: Handle slice_height being zero
Fixes out of array accesses.

CC: libav-stable@libav.org
Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Bug-Id: CVE-2014-9604
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
(cherry picked from commit 0ce3a0f9d9)
2015-03-09 00:51:48 +01:00
Michael Niedermayer bb2a5ea2cf Merge commit '2c63081b48d98f3a0d0bed7b0ec3c0347b99144c' into release/2.4
* commit '2c63081b48d98f3a0d0bed7b0ec3c0347b99144c':
  mdec: check for out of bounds read

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-09 00:44:49 +01:00
Michael Niedermayer 1f44b09d58 Merge commit '4070e02dfcf8c7d871b4a41d8b591ec0c130c70a' into release/2.4
* commit '4070e02dfcf8c7d871b4a41d8b591ec0c130c70a':
  configure: Properly fail when libcdio/cdparanoia is not found

Conflicts:
	configure

See: f514b5dff7
Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-09 00:44:21 +01:00
Michael Niedermayer 16c838b69a Merge commit '77eb3d9a60a9c2bb6d87c960ac186af242bbcc9e' into release/2.4
* commit '77eb3d9a60a9c2bb6d87c960ac186af242bbcc9e':
  tiff: Check that there is no aliasing in pixel format selection

Conflicts:
	libavcodec/tiff.c

See: e1c0cfaa41
Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-09 00:43:26 +01:00
Michael Niedermayer e2c82f7d93 Merge commit 'f3dafb63d05896aacf84caf0e4c81c216476d60e' into release/2.4
* commit 'f3dafb63d05896aacf84caf0e4c81c216476d60e':
  aic: Fix decoding files with odd dimensions

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-09 00:31:23 +01:00
Michael Niedermayer d208977cd1 Merge commit '7136a0bf88f31bb8d40a3bbd251963706fb14578' into release/2.4
* commit '7136a0bf88f31bb8d40a3bbd251963706fb14578':
  vorbis: Check the vlc value in setup_classifs

Conflicts:
	libavcodec/vorbisdec.c

See: ae038c0914
See: 709cae2bcb
Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-09 00:27:53 +01:00
Michael Niedermayer 0abd926d64 Merge commit '450b02307cb631f501793b52b98b610c3a54378b' into release/2.4
* commit '450b02307cb631f501793b52b98b610c3a54378b':
  arm: Suppress tags about used cpu arch and extensions

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-09 00:26:52 +01:00
Michael Niedermayer 61b5dee49e Merge commit 'fc3c1156e361202ab97ad63ffb4dacc416906d33' into release/2.4
* commit 'fc3c1156e361202ab97ad63ffb4dacc416906d33':
  doc: Update changelog for v11.3

Conflicts:
	Changelog

Not merged, the changelog is not correct for FFmpeg

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-09 00:16:15 +01:00
Michael Niedermayer d8f6c5a79c Merge commit '7c1fe31617699ddefe6b0f39f16e7c3d79e998e2' into release/2.4
* commit '7c1fe31617699ddefe6b0f39f16e7c3d79e998e2':
  Prepare for 11.3 Release

Conflicts:
	RELEASE

Not merged

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-09 00:14:42 +01:00
Michael Niedermayer d4afc388e3 Merge commit 'cf3523c6e7dde33a513e003639d5a8c0b7f3a49d' into release/2.4
* commit 'cf3523c6e7dde33a513e003639d5a8c0b7f3a49d':
  prores: Extend the padding check to 16bit

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-09 00:10:43 +01:00
Andreas Cadhalpun a73b2c288e adxdec: set avctx->channels in adx_read_header
It is used in adx_read_packet, which currently depends on the
decoder/parser setting this value between reading the file header and
demuxing the first packet.

Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2015-03-08 19:34:38 +00:00
Andreas Cadhalpun 2ef2f60b4f rmenc: limit packet size
The chunk size is limited to UINT16_MAX (written by avio_wb16), so make
sure that the packet size is not too large.

Such large frames need to be split into slices smaller than 64 kB, but
that is currently supported neither by the rv10/rv20 encoders nor the rm
muxer.

Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2015-03-08 19:21:55 +00:00
Andreas Cadhalpun 905172d75c webp: validate the distance prefix code
According to the WebP Lossless Bitstream Specification the highest
allowed value for a prefix code is 39.

If prefix_code is too large, the calculated extra_bits has an invalid
value and triggers an assertion in get_bits.

Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2015-03-08 19:21:49 +00:00
Andreas Cadhalpun 8aee35acb1 rv10: check size of s->mb_width * s->mb_height
If it doesn't fit into 12 bits it triggers an assertion.

Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2015-03-08 19:21:41 +00:00
Federico Tomassetti e818da7724 eamad: check for out of bounds read
Bug-Id: CID 1257500
CC: libav-stable@libav.org

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-03-08 19:19:55 +00:00
Federico Tomassetti 2c63081b48 mdec: check for out of bounds read
Bug-Id: CID 1257501
CC: libav-stable@libav.org

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-03-08 19:19:49 +00:00
Vittorio Giovara 4070e02dfc configure: Properly fail when libcdio/cdparanoia is not found 2015-03-08 19:19:39 +00:00
Anton Khirnov 77eb3d9a60 tiff: Check that there is no aliasing in pixel format selection
Fixes possible issues with unexpected bpp/bppcount values.

CC: libav-stable@libav.org
Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Bug-Id: CVE-2014-8544
(cherry picked from commit ae5e1f3d66)
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-03-08 19:16:16 +01:00
Vittorio Giovara f3dafb63d0 aic: Fix decoding files with odd dimensions
Normally the aic decoder finds the proper slice combination (multiple of
some number less than 32) but in case of odd width, it resorts to the
default values, which were actually swapped.
The number of slices is modified to account for such odd width cases.

CC: libav-stable@libav.org
(cherry picked from commit e878ec0d47)
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-03-08 17:27:53 +01:00
Luca Barbato 7136a0bf88 vorbis: Check the vlc value in setup_classifs
The valid returned values are always at most 11bit.
Remove the previous check that assumed larger values plausible and
use a signed integer to check get_vlc2 return values.

CC: libav-stable@libav.org
(cherry picked from commit 0025f7408a)
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-03-08 17:24:50 +01:00
Martin Storsjö 450b02307c arm: Suppress tags about used cpu arch and extensions
When all the codepaths using manually set .arch/.fpu code is
behind runtime detection, the elf attributes should be suppressed.

This allows tools to know that the final built binary doesn't
strictly require these extensions.

Signed-off-by: Martin Storsjö <martin@martin.st>
(cherry picked from commit dcae2e32f7
and b77e335e44)
Signed-off-by: Martin Storsjö <martin@martin.st>
2015-03-08 18:11:36 +02:00
Reinhard Tartler fc3c1156e3 doc: Update changelog for v11.3 2015-03-08 11:12:14 -04:00
Reinhard Tartler 7c1fe31617 Prepare for 11.3 Release 2015-03-08 11:06:15 -04:00
Srikanth G 7071b8192d avutil/opencl: is_compiled flag not being cleared in av_opencl_uninit
When OpenCL kernels are compiled, is_compiled flag is being set for each
kernel. But, in opencl uninit, this flag is not being cleared.
This causes an error when an OpenCL kernel is tried on different OpenCL
devices on same platform.

Here is the patch with a fix

Reviewed-by; Wei Gao <highgod0401@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>

(cherry picked from commit 0f2359b869)
2015-03-06 17:28:03 -03:00
Luca Barbato cf3523c6e7 prores: Extend the padding check to 16bit
Some files produced by the official encoder have up to 16bit of
padding instead of the expected padding to the byte.

Use a self-explanatory macro instead of a simple number.

CC: libav-stable@libav.org

(cherry picked from commit dbc1163b20)
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-03-02 15:34:29 +01:00
Michael Niedermayer d04bfdf0f7 Merge commit 'e10028431d5cd90db7b2a4b0d16721bb1a6d75e3' into release/2.4
* commit 'e10028431d5cd90db7b2a4b0d16721bb1a6d75e3':
  icecast: Do not use chunked post

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-28 19:19:52 +01:00
Michael Niedermayer 05c4b50216 Merge commit '4cd54b2f976738682cdf8a38a1719b8bba1a018c' into release/2.4
* commit '4cd54b2f976738682cdf8a38a1719b8bba1a018c':
  img2dec: correctly use the parsed value from -start_number

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-28 19:19:03 +01:00
Michael Niedermayer 7ca10906b4 Merge commit '07db7a0dd8239e255c08800162eb45b82c2c49fe' into release/2.4
* commit '07db7a0dd8239e255c08800162eb45b82c2c49fe':
  h264_cabac: Break infinite loops

Conflicts:
	libavcodec/h264_cabac.c

See: cdf0877bc3
Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-28 19:18:24 +01:00
Michael Niedermayer 76848048c7 Merge commit '2d1309c3528f89bfafe1298badf39fe7a1be0542' into release/2.4
* commit '2d1309c3528f89bfafe1298badf39fe7a1be0542':
  hevc_deblock: Fix compilation with nasm

See: c75fdee747
Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-28 19:06:00 +01:00
Michael Niedermayer 1172107d57 Merge commit '2686dab45eec54f99866413153aa0b36381e48be' into release/2.4
* commit '2686dab45eec54f99866413153aa0b36381e48be':
  h264: initialize H264Context.avctx in init_thread_copy

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-28 19:05:14 +01:00
Michael Niedermayer a22079b819 Merge commit '06d433366c02ab81a1aaad33d32934b4180d354b' into release/2.4
* commit '06d433366c02ab81a1aaad33d32934b4180d354b':
  h264: Do not share rbsp_buffer across threads

Conflicts:
	libavcodec/h264.c

See: ecbf838c7d
Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-28 19:04:42 +01:00
Michael Niedermayer a8eb02da80 Merge commit '1dbfaa34e615606cb3f1a3ecabb117e354459edc' into release/2.4
* commit '1dbfaa34e615606cb3f1a3ecabb117e354459edc':
  h264: only ref cur_pic in update_thread_context if it is initialized

Conflicts:
	libavcodec/h264_slice.c

See: 0fc01ae33c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-28 19:03:51 +01:00
Mark McGough e10028431d icecast: Do not use chunked post
Icecast uses HTTP 1.0 while Libav uses HTTP 1.1 and enables by
default chunked post.

Icecast actually forwards the HTTP chunk headers to the listener
as part of the media stream (without the chunk encoding HTTP headers)
causing the players to lose sync.

Disabling the option is enough to feed icecast properly.

(cherry picked from commit 76c70e33d2)
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-02-28 15:04:30 +01:00
Vittorio Giovara 4cd54b2f97 img2dec: correctly use the parsed value from -start_number
Previously the image sequence was always starting from the minimum
number rather than the requested one.

CC: libav-stable@libav.org
2015-02-22 23:51:15 +00:00
Michael Niedermayer 07db7a0dd8 h264_cabac: Break infinite loops
This fixes out of array reads and/or infinite loops.

30 is the maximum number of bits that can be read into
coeff_abs below.

CC: libav-stable@libav.org
Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Martin Storsjö <martin@martin.st>
2015-02-22 23:49:34 +00:00
Carl Eugen Hoyos 2d1309c352 hevc_deblock: Fix compilation with nasm
CC: libav-stable@libav.org
Bug-Id: 795
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
2015-02-22 23:46:55 +00:00
Anton Khirnov 2686dab45e h264: initialize H264Context.avctx in init_thread_copy
This prevents using a wrong (first thread's) AVCodecContext if decoding
a frame in the first pass over all threads fails.

(cherry picked from commit a06b0b1295)
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2015-02-21 09:35:17 +01:00
Michael Niedermayer 06d433366c h264: Do not share rbsp_buffer across threads
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>

CC: libav-stable@libav.org
(cherry picked from commit 61928b68dc)
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2015-02-21 09:34:48 +01:00
Anton Khirnov 1dbfaa34e6 h264: only ref cur_pic in update_thread_context if it is initialized
It may be empty if the previous thread's decode call did not contain a
valid frame.

(cherry picked from commit 0dea4c77cc)
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2015-02-21 09:34:17 +01:00
Clément Bœsch dbda574694 avcodec/gif: fix off by one in column offsetting finding
(cherry picked from commit f9240ec01a)
2015-02-16 18:08:45 +01:00
76 changed files with 422 additions and 235 deletions
+39
View File
@@ -3,6 +3,45 @@ releases are sorted from youngest to oldest.
version <next>:
version 2.4.8:
- avutil/cpu: add missing check for mmxext to av_force_cpu_flags
- avcodec/msrledec: restructure msrle_decode_pal4() based on the line number instead of the pixel pointer
- avcodec/hevc_ps: Check cropping parameters more correctly
- avcodec/dnxhddec: Check that the frame is interlaced before using cur_field
- avformat/mov: Disallow ".." in dref unless use_absolute_path is set
- avformat/mov: Check for string truncation in mov_open_dref()
- ac3_fixed: fix out-of-bound read
- avcodec/012v: redesign main loop
- avcodec/012v: Check dimensions more completely
- asfenc: fix leaking asf->index_ptr on error
- avcodec/options_table: remove extradata_size from the AVOptions table
- ffmdec: limit the backward seek to the last resync position
- ffmdec: make sure the time base is valid
- ffmdec: fix infinite loop at EOF
- avcodec/tiff: move bpp check to after "end:"
- avcodec/opusdec: Fix delayed sample value
- avcodec/utils: Align YUV411 by as much as the other YUV variants
- vp9: fix segmentation map retention with threading enabled.
- doc/protocols/tcp: fix units of listen_timeout option value, from microseconds to milliseconds
- fix VP9 packet decoder returning 0 instead of the used data size
- avformat/bit: only accept the g729 codec and 1 channel
- avformat/adxdec: check avctx->channels for invalid values
- Fix buffer_size argument to init_put_bits() in multiple encoders.
- mips/acelp_filters: fix incorrect register constraint
- avcodec/hevc_ps: Sanity checks for some log2_* values
- avcodec/zmbv: Check len before reading in decode_frame()
- avcodec/snowdec: Fix ref value check
- swscale/utils: More carefully merge and clear coefficients outside the input
- avcodec/a64multienc: fix use of uninitialized values in to_meta_with_crop
- avcodec/a64multienc: don't set incorrect packet size
- webp: ensure that each transform is only used once
- avcodec/hevc_ps: More complete window reset
- vp9: make above buffer pointer 32-byte aligned.
- avformat/rm: limit packet size
- avcodec/webp: validate the distance prefix code
- avcodec/gif: fix off by one in column offsetting finding
version 2.4.7:
- avcodec/flac_parser: fix handling EOF if no headers are found
- avfilter/vf_framepack: Check and update frame_rate
+1 -1
View File
@@ -1 +1 @@
2.4.7
2.4.8
Vendored
+7 -1
View File
@@ -1742,6 +1742,7 @@ SYSTEM_FUNCS="
TOOLCHAIN_FEATURES="
as_dn_directive
as_func
as_object_arch
asm_mod_q
attribute_may_alias
attribute_packed
@@ -4424,6 +4425,11 @@ if enabled_any arm aarch64 || enabled_all ppc altivec && enabled asm; then
check_as <<EOF && enable as_func
.func test
.endfunc
EOF
# llvm's integrated assembler supports .object_arch from llvm 3.5
enabled arm && test "$objformat" = elf && check_as <<EOF && enable as_object_arch
.object_arch armv4
EOF
fi
@@ -4982,7 +4988,7 @@ enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio
if enabled libcdio; then
check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio ||
die "ERROR: libcdio-paranoia not found"
die "ERROR: No usable libcdio/cdparanoia found"
fi
enabled xlib &&
+1 -1
View File
@@ -31,7 +31,7 @@ PROJECT_NAME = FFmpeg
# This could be handy for archiving the generated documentation or
# if some version control system is used.
PROJECT_NUMBER = 2.4.7
PROJECT_NUMBER = 2.4.8
# With the PROJECT_LOGO tag one can specify a logo or icon that is included
# in the documentation. The maximum height of the logo should not exceed 55
+1 -1
View File
@@ -298,7 +298,7 @@ FFmpeg has a @url{http://ffmpeg.org/ffmpeg-protocols.html#concat,
@code{concat}} protocol designed specifically for that, with examples in the
documentation.
A few multimedia containers (MPEG-1, MPEG-2 PS, DV) allow to concatenate
A few multimedia containers (MPEG-1, MPEG-2 PS, DV) allow one to concatenate
video by merely concatenating the files containing them.
Hence you may concatenate your multimedia files by first transcoding them to
+1 -1
View File
@@ -71,7 +71,7 @@ the HTTP server (configured through the @option{HTTPPort} option), and
configuration file.
Each feed is associated to a file which is stored on disk. This stored
file is used to allow to send pre-recorded data to a player as fast as
file is used to send pre-recorded data to a player as fast as
possible when new content is added in real-time to the stream.
A "live-stream" or "stream" is a resource published by
+1 -1
View File
@@ -3389,7 +3389,7 @@ Set number overlapping pixels for each block. Since the filter can be slow, you
may want to reduce this value, at the cost of a less effective filter and the
risk of various artefacts.
If the overlapping value doesn't allow to process the whole input width or
If the overlapping value doesn't permit processing the whole input width or
height, a warning will be displayed and according borders won't be denoised.
Default value is @var{blocksize}-1, which is the best possible setting.
+2 -2
View File
@@ -23,7 +23,7 @@ Reduce buffering.
@item probesize @var{integer} (@emph{input})
Set probing size in bytes, i.e. the size of the data to analyze to get
stream information. A higher value will allow to detect more
stream information. A higher value will enable detecting more
information in case it is dispersed into the stream, but will increase
latency. Must be an integer not lesser than 32. It is 5000000 by default.
@@ -63,7 +63,7 @@ Default is 0.
@item analyzeduration @var{integer} (@emph{input})
Specify how many microseconds are analyzed to probe the input. A
higher value will allow to detect more accurate information, but will
higher value will enable detecting more accurate information, but will
increase latency. It defaults to 5,000,000 microseconds = 5 seconds.
@item cryptokey @var{hexadecimal string} (@emph{input})
+1 -1
View File
@@ -1,7 +1,7 @@
@chapter Input Devices
@c man begin INPUT DEVICES
Input devices are configured elements in FFmpeg which allow to access
Input devices are configured elements in FFmpeg which enable accessing
the data coming from a multimedia device attached to your system.
When you configure your FFmpeg build, all the supported input devices
+2 -2
View File
@@ -1081,8 +1081,8 @@ Set raise error timeout, expressed in microseconds.
This option is only relevant in read mode: if no data arrived in more
than this time interval, raise error.
@item listen_timeout=@var{microseconds}
Set listen timeout, expressed in microseconds.
@item listen_timeout=@var{milliseconds}
Set listen timeout, expressed in milliseconds.
@end table
The following example shows how to setup a listening TCP connection
+2 -2
View File
@@ -844,7 +844,7 @@ Return 1.0 if @var{x} is +/-INFINITY, 0.0 otherwise.
Return 1.0 if @var{x} is NAN, 0.0 otherwise.
@item ld(var)
Allow to load the value of the internal variable with number
Load the value of the internal variable with number
@var{var}, which was previously stored with st(@var{var}, @var{expr}).
The function returns the loaded value.
@@ -912,7 +912,7 @@ Compute the square root of @var{expr}. This is equivalent to
Compute expression @code{1/(1 + exp(4*x))}.
@item st(var, expr)
Allow to store the value of the expression @var{expr} in an internal
Store the value of the expression @var{expr} in an internal
variable. @var{var} specifies the number of the variable where to
store the value, and it is a value ranging from 0 to 9. The function
returns the value stored in the internal variable.
+41 -45
View File
@@ -38,15 +38,15 @@ static av_cold int zero12v_decode_init(AVCodecContext *avctx)
static int zero12v_decode_frame(AVCodecContext *avctx, void *data,
int *got_frame, AVPacket *avpkt)
{
int line = 0, ret;
int line, ret;
const int width = avctx->width;
AVFrame *pic = data;
uint16_t *y, *u, *v;
const uint8_t *line_end, *src = avpkt->data;
int stride = avctx->width * 8 / 3;
if (width == 1) {
av_log(avctx, AV_LOG_ERROR, "Width 1 not supported.\n");
if (width <= 1 || avctx->height <= 0) {
av_log(avctx, AV_LOG_ERROR, "Dimensions %dx%d not supported.\n", width, avctx->height);
return AVERROR_INVALIDDATA;
}
@@ -67,45 +67,45 @@ static int zero12v_decode_frame(AVCodecContext *avctx, void *data,
pic->pict_type = AV_PICTURE_TYPE_I;
pic->key_frame = 1;
y = (uint16_t *)pic->data[0];
u = (uint16_t *)pic->data[1];
v = (uint16_t *)pic->data[2];
line_end = avpkt->data + stride;
for (line = 0; line < avctx->height; line++) {
uint16_t y_temp[6] = {0x8000, 0x8000, 0x8000, 0x8000, 0x8000, 0x8000};
uint16_t u_temp[3] = {0x8000, 0x8000, 0x8000};
uint16_t v_temp[3] = {0x8000, 0x8000, 0x8000};
int x;
y = (uint16_t *)(pic->data[0] + line * pic->linesize[0]);
u = (uint16_t *)(pic->data[1] + line * pic->linesize[1]);
v = (uint16_t *)(pic->data[2] + line * pic->linesize[2]);
while (line++ < avctx->height) {
while (1) {
uint32_t t = AV_RL32(src);
for (x = 0; x < width; x += 6) {
uint32_t t;
if (width - x < 6 || line_end - src < 16) {
y = y_temp;
u = u_temp;
v = v_temp;
}
if (line_end - src < 4)
break;
t = AV_RL32(src);
src += 4;
*u++ = t << 6 & 0xFFC0;
*y++ = t >> 4 & 0xFFC0;
*v++ = t >> 14 & 0xFFC0;
if (src >= line_end - 1) {
*y = 0x80;
src++;
line_end += stride;
y = (uint16_t *)(pic->data[0] + line * pic->linesize[0]);
u = (uint16_t *)(pic->data[1] + line * pic->linesize[1]);
v = (uint16_t *)(pic->data[2] + line * pic->linesize[2]);
if (line_end - src < 4)
break;
}
t = AV_RL32(src);
src += 4;
*y++ = t << 6 & 0xFFC0;
*u++ = t >> 4 & 0xFFC0;
*y++ = t >> 14 & 0xFFC0;
if (src >= line_end - 2) {
if (!(width & 1)) {
*y = 0x80;
src += 2;
}
line_end += stride;
y = (uint16_t *)(pic->data[0] + line * pic->linesize[0]);
u = (uint16_t *)(pic->data[1] + line * pic->linesize[1]);
v = (uint16_t *)(pic->data[2] + line * pic->linesize[2]);
if (line_end - src < 4)
break;
}
t = AV_RL32(src);
src += 4;
@@ -113,15 +113,8 @@ static int zero12v_decode_frame(AVCodecContext *avctx, void *data,
*y++ = t >> 4 & 0xFFC0;
*u++ = t >> 14 & 0xFFC0;
if (src >= line_end - 1) {
*y = 0x80;
src++;
line_end += stride;
y = (uint16_t *)(pic->data[0] + line * pic->linesize[0]);
u = (uint16_t *)(pic->data[1] + line * pic->linesize[1]);
v = (uint16_t *)(pic->data[2] + line * pic->linesize[2]);
if (line_end - src < 4)
break;
}
t = AV_RL32(src);
src += 4;
@@ -129,18 +122,21 @@ static int zero12v_decode_frame(AVCodecContext *avctx, void *data,
*v++ = t >> 4 & 0xFFC0;
*y++ = t >> 14 & 0xFFC0;
if (src >= line_end - 2) {
if (width & 1) {
*y = 0x80;
src += 2;
}
line_end += stride;
y = (uint16_t *)(pic->data[0] + line * pic->linesize[0]);
u = (uint16_t *)(pic->data[1] + line * pic->linesize[1]);
v = (uint16_t *)(pic->data[2] + line * pic->linesize[2]);
if (width - x < 6)
break;
}
}
if (x < width) {
y = x + (uint16_t *)(pic->data[0] + line * pic->linesize[0]);
u = x/2 + (uint16_t *)(pic->data[1] + line * pic->linesize[1]);
v = x/2 + (uint16_t *)(pic->data[2] + line * pic->linesize[2]);
memcpy(y, y_temp, sizeof(*y) * (width - x));
memcpy(u, u_temp, sizeof(*u) * (width - x + 1) / 2);
memcpy(v, v_temp, sizeof(*v) * (width - x + 1) / 2);
}
line_end += stride;
src = line_end - stride;
}
*got_frame = 1;
+1 -1
View File
@@ -206,7 +206,7 @@ OBJS-$(CONFIG_DVVIDEO_DECODER) += dvdec.o dv.o dvdata.o
OBJS-$(CONFIG_DVVIDEO_ENCODER) += dvenc.o dv.o dvdata.o
OBJS-$(CONFIG_DXA_DECODER) += dxa.o
OBJS-$(CONFIG_DXTORY_DECODER) += dxtory.o
OBJS-$(CONFIG_EAC3_DECODER) += eac3dec.o eac3_data.o
OBJS-$(CONFIG_EAC3_DECODER) += eac3_data.o
OBJS-$(CONFIG_EAC3_ENCODER) += eac3enc.o eac3_data.o
OBJS-$(CONFIG_EACMV_DECODER) += eacmv.o
OBJS-$(CONFIG_EAMAD_DECODER) += eamad.o eaidct.o mpeg12.o \
+17 -23
View File
@@ -28,6 +28,7 @@
#include "a64tables.h"
#include "elbg.h"
#include "internal.h"
#include "libavutil/avassert.h"
#include "libavutil/common.h"
#include "libavutil/intreadwrite.h"
@@ -65,7 +66,7 @@ static const int mc_colors[5]={0x0,0xb,0xc,0xf,0x1};
//static const int mc_colors[5]={0x0,0x8,0xa,0xf,0x7};
//static const int mc_colors[5]={0x0,0x9,0x8,0xa,0x3};
static void to_meta_with_crop(AVCodecContext *avctx, AVFrame *p, int *dest)
static void to_meta_with_crop(AVCodecContext *avctx, const AVFrame *p, int *dest)
{
int blockx, blocky, x, y;
int luma = 0;
@@ -78,9 +79,13 @@ static void to_meta_with_crop(AVCodecContext *avctx, AVFrame *p, int *dest)
for (y = blocky; y < blocky + 8 && y < C64YRES; y++) {
for (x = blockx; x < blockx + 8 && x < C64XRES; x += 2) {
if(x < width && y < height) {
/* build average over 2 pixels */
luma = (src[(x + 0 + y * p->linesize[0])] +
src[(x + 1 + y * p->linesize[0])]) / 2;
if (x + 1 < width) {
/* build average over 2 pixels */
luma = (src[(x + 0 + y * p->linesize[0])] +
src[(x + 1 + y * p->linesize[0])]) / 2;
} else {
luma = src[(x + y * p->linesize[0])];
}
/* write blocks as linear data now so they are suitable for elbg */
dest[0] = luma;
}
@@ -186,7 +191,6 @@ static void render_charset(AVCodecContext *avctx, uint8_t *charset,
static av_cold int a64multi_close_encoder(AVCodecContext *avctx)
{
A64Context *c = avctx->priv_data;
av_frame_free(&avctx->coded_frame);
av_freep(&c->mc_meta_charset);
av_freep(&c->mc_best_cb);
av_freep(&c->mc_charset);
@@ -220,7 +224,7 @@ static av_cold int a64multi_encode_init(AVCodecContext *avctx)
a64_palette[mc_colors[a]][2] * 0.11;
}
if (!(c->mc_meta_charset = av_malloc_array(c->mc_lifetime, 32000 * sizeof(int))) ||
if (!(c->mc_meta_charset = av_mallocz_array(c->mc_lifetime, 32000 * sizeof(int))) ||
!(c->mc_best_cb = av_malloc(CHARSET_CHARS * 32 * sizeof(int))) ||
!(c->mc_charmap = av_mallocz_array(c->mc_lifetime, 1000 * sizeof(int))) ||
!(c->mc_colram = av_mallocz(CHARSET_CHARS * sizeof(uint8_t))) ||
@@ -238,14 +242,6 @@ static av_cold int a64multi_encode_init(AVCodecContext *avctx)
AV_WB32(avctx->extradata, c->mc_lifetime);
AV_WB32(avctx->extradata + 16, INTERLACED);
avctx->coded_frame = av_frame_alloc();
if (!avctx->coded_frame) {
a64multi_close_encoder(avctx);
return AVERROR(ENOMEM);
}
avctx->coded_frame->pict_type = AV_PICTURE_TYPE_I;
avctx->coded_frame->key_frame = 1;
if (!avctx->codec_tag)
avctx->codec_tag = AV_RL32("a64m");
@@ -270,10 +266,9 @@ static void a64_compress_colram(unsigned char *buf, int *charmap, uint8_t *colra
}
static int a64multi_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
const AVFrame *pict, int *got_packet)
const AVFrame *p, int *got_packet)
{
A64Context *c = avctx->priv_data;
AVFrame *const p = avctx->coded_frame;
int frame;
int x, y;
@@ -304,7 +299,7 @@ static int a64multi_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
}
/* no data, means end encoding asap */
if (!pict) {
if (!p) {
/* all done, end encoding */
if (!c->mc_lifetime) return 0;
/* no more frames in queue, prepare to flush remaining frames */
@@ -317,13 +312,10 @@ static int a64multi_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
} else {
/* fill up mc_meta_charset with data until lifetime exceeds */
if (c->mc_frame_counter < c->mc_lifetime) {
*p = *pict;
p->pict_type = AV_PICTURE_TYPE_I;
p->key_frame = 1;
to_meta_with_crop(avctx, p, meta + 32000 * c->mc_frame_counter);
c->mc_frame_counter++;
if (c->next_pts == AV_NOPTS_VALUE)
c->next_pts = pict->pts;
c->next_pts = p->pts;
/* lifetime is not reached so wait for next frame first */
return 0;
}
@@ -334,8 +326,8 @@ static int a64multi_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
req_size = 0;
/* any frames to encode? */
if (c->mc_lifetime) {
req_size = charset_size + c->mc_lifetime*(screen_size + colram_size);
if ((ret = ff_alloc_packet2(avctx, pkt, req_size)) < 0)
int alloc_size = charset_size + c->mc_lifetime*(screen_size + colram_size);
if ((ret = ff_alloc_packet2(avctx, pkt, alloc_size)) < 0)
return ret;
buf = pkt->data;
@@ -351,6 +343,7 @@ static int a64multi_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
/* advance pointers */
buf += charset_size;
req_size += charset_size;
}
/* write x frames to buf */
@@ -387,6 +380,7 @@ static int a64multi_encode_frame(AVCodecContext *avctx, AVPacket *pkt,
pkt->pts = pkt->dts = c->next_pts;
c->next_pts = AV_NOPTS_VALUE;
av_assert0(pkt->size >= req_size);
pkt->size = req_size;
pkt->flags |= AV_PKT_FLAG_KEY;
*got_packet = !!req_size;
+1 -1
View File
@@ -165,7 +165,7 @@ static void put_audio_specific_config(AVCodecContext *avctx)
PutBitContext pb;
AACEncContext *s = avctx->priv_data;
init_put_bits(&pb, avctx->extradata, avctx->extradata_size*8);
init_put_bits(&pb, avctx->extradata, avctx->extradata_size);
put_bits(&pb, 5, 2); //object type - AAC-LC
put_bits(&pb, 4, s->samplerate_index); //sample rate index
put_bits(&pb, 4, s->channels);
+2 -2
View File
@@ -872,7 +872,7 @@ static int decode_audio_block(AC3DecodeContext *s, int blk)
start_subband += start_subband - 7;
end_subband = get_bits(gbc, 3) + 5;
#if USE_FIXED
s->spx_dst_end_freq = end_freq_inv_tab[end_subband];
s->spx_dst_end_freq = end_freq_inv_tab[end_subband-5];
#endif
if (end_subband > 7)
end_subband += end_subband - 7;
@@ -939,7 +939,7 @@ static int decode_audio_block(AC3DecodeContext *s, int blk)
nblend = 0;
sblend = 0x800000;
} else if (nratio > 0x7fffff) {
nblend = 0x800000;
nblend = 14529495; // sqrt(3) in FP.23
sblend = 0;
} else {
nblend = fixed_sqrt(nratio, 23);
+3 -3
View File
@@ -243,19 +243,19 @@ typedef struct AC3DecodeContext {
* Parse the E-AC-3 frame header.
* This parses both the bit stream info and audio frame header.
*/
int ff_eac3_parse_header(AC3DecodeContext *s);
static int ff_eac3_parse_header(AC3DecodeContext *s);
/**
* Decode mantissas in a single channel for the entire frame.
* This is used when AHT mode is enabled.
*/
void ff_eac3_decode_transform_coeffs_aht_ch(AC3DecodeContext *s, int ch);
static void ff_eac3_decode_transform_coeffs_aht_ch(AC3DecodeContext *s, int ch);
/**
* Apply spectral extension to each channel by copying lower frequency
* coefficients to higher frequency bins and applying side information to
* approximate the original high frequency signal.
*/
void ff_eac3_apply_spectral_extension(AC3DecodeContext *s);
static void ff_eac3_apply_spectral_extension(AC3DecodeContext *s);
#endif /* AVCODEC_AC3DEC_H */
+1
View File
@@ -164,6 +164,7 @@ static void ac3_downmix_c_fixed16(int16_t **samples, int16_t (*matrix)[2],
}
}
#include "eac3dec.c"
#include "ac3dec.c"
static const AVOption options[] = {
+1
View File
@@ -28,6 +28,7 @@
* Upmix delay samples from stereo to original channel layout.
*/
#include "ac3dec.h"
#include "eac3dec.c"
#include "ac3dec.c"
static const AVOption options[] = {
+2 -2
View File
@@ -541,7 +541,7 @@ static int adpcm_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
case AV_CODEC_ID_ADPCM_IMA_QT:
{
PutBitContext pb;
init_put_bits(&pb, dst, pkt_size * 8);
init_put_bits(&pb, dst, pkt_size);
for (ch = 0; ch < avctx->channels; ch++) {
ADPCMChannelStatus *status = &c->status[ch];
@@ -571,7 +571,7 @@ static int adpcm_encode_frame(AVCodecContext *avctx, AVPacket *avpkt,
case AV_CODEC_ID_ADPCM_SWF:
{
PutBitContext pb;
init_put_bits(&pb, dst, pkt_size * 8);
init_put_bits(&pb, dst, pkt_size);
n = frame->nb_samples - 1;
+2 -2
View File
@@ -438,8 +438,8 @@ static av_cold int aic_decode_init(AVCodecContext *avctx)
ctx->mb_width = FFALIGN(avctx->width, 16) >> 4;
ctx->mb_height = FFALIGN(avctx->height, 16) >> 4;
ctx->num_x_slices = 16;
ctx->slice_width = ctx->mb_width / 16;
ctx->num_x_slices = (ctx->mb_width + 15) >> 4;
ctx->slice_width = 16;
for (i = 1; i < 32; i++) {
if (!(ctx->mb_width % i) && (ctx->mb_width / i < 32)) {
ctx->slice_width = ctx->mb_width / i;
+1 -1
View File
@@ -363,7 +363,7 @@ static int dnxhd_decode_macroblock(DNXHDContext *ctx, AVFrame *frame,
dest_u = frame->data[1] + ((y * dct_linesize_chroma) << 4) + (x << (3 + shift1 + ctx->is_444));
dest_v = frame->data[2] + ((y * dct_linesize_chroma) << 4) + (x << (3 + shift1 + ctx->is_444));
if (ctx->cur_field) {
if (frame->interlaced_frame && ctx->cur_field) {
dest_y += frame->linesize[0];
dest_u += frame->linesize[1];
dest_v += frame->linesize[2];
+10 -5
View File
@@ -63,7 +63,7 @@ typedef enum {
#define EAC3_SR_CODE_REDUCED 3
void ff_eac3_apply_spectral_extension(AC3DecodeContext *s)
static void ff_eac3_apply_spectral_extension(AC3DecodeContext *s)
{
int bin, bnd, ch, i;
uint8_t wrapflag[SPX_MAX_BANDS]={1,0,}, num_copy_sections, copy_sizes[SPX_MAX_BANDS];
@@ -101,7 +101,7 @@ void ff_eac3_apply_spectral_extension(AC3DecodeContext *s)
for (i = 0; i < num_copy_sections; i++) {
memcpy(&s->transform_coeffs[ch][bin],
&s->transform_coeffs[ch][s->spx_dst_start_freq],
copy_sizes[i]*sizeof(float));
copy_sizes[i]*sizeof(INTFLOAT));
bin += copy_sizes[i];
}
@@ -124,7 +124,7 @@ void ff_eac3_apply_spectral_extension(AC3DecodeContext *s)
bin = s->spx_src_start_freq - 2;
for (bnd = 0; bnd < s->num_spx_bands; bnd++) {
if (wrapflag[bnd]) {
float *coeffs = &s->transform_coeffs[ch][bin];
INTFLOAT *coeffs = &s->transform_coeffs[ch][bin];
coeffs[0] *= atten_tab[0];
coeffs[1] *= atten_tab[1];
coeffs[2] *= atten_tab[2];
@@ -142,6 +142,11 @@ void ff_eac3_apply_spectral_extension(AC3DecodeContext *s)
for (bnd = 0; bnd < s->num_spx_bands; bnd++) {
float nscale = s->spx_noise_blend[ch][bnd] * rms_energy[bnd] * (1.0f / INT32_MIN);
float sscale = s->spx_signal_blend[ch][bnd];
#if USE_FIXED
// spx_noise_blend and spx_signal_blend are both FP.23
nscale *= 1.0 / (1<<23);
sscale *= 1.0 / (1<<23);
#endif
for (i = 0; i < s->spx_band_sizes[bnd]; i++) {
float noise = nscale * (int32_t)av_lfg_get(&s->dith_state);
s->transform_coeffs[ch][bin] *= sscale;
@@ -195,7 +200,7 @@ static void idct6(int pre_mant[6])
pre_mant[5] = even0 - odd0;
}
void ff_eac3_decode_transform_coeffs_aht_ch(AC3DecodeContext *s, int ch)
static void ff_eac3_decode_transform_coeffs_aht_ch(AC3DecodeContext *s, int ch)
{
int bin, blk, gs;
int end_bap, gaq_mode;
@@ -288,7 +293,7 @@ void ff_eac3_decode_transform_coeffs_aht_ch(AC3DecodeContext *s, int ch)
}
}
int ff_eac3_parse_header(AC3DecodeContext *s)
static int ff_eac3_parse_header(AC3DecodeContext *s)
{
int i, blk, ch;
int ac3_exponent_strategy, parse_aht_info, parse_spx_atten_data;
+10 -4
View File
@@ -151,6 +151,11 @@ static inline int decode_block_intra(MadContext *s, int16_t * block)
break;
} else if (level != 0) {
i += run;
if (i > 63) {
av_log(s->avctx, AV_LOG_ERROR,
"ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
return -1;
}
j = scantable[i];
level = (level*quant_matrix[j]) >> 4;
level = (level-1)|1;
@@ -165,6 +170,11 @@ static inline int decode_block_intra(MadContext *s, int16_t * block)
run = SHOW_UBITS(re, &s->gb, 6)+1; LAST_SKIP_BITS(re, &s->gb, 6);
i += run;
if (i > 63) {
av_log(s->avctx, AV_LOG_ERROR,
"ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
return -1;
}
j = scantable[i];
if (level < 0) {
level = -level;
@@ -176,10 +186,6 @@ static inline int decode_block_intra(MadContext *s, int16_t * block)
level = (level-1)|1;
}
}
if (i > 63) {
av_log(s->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", s->mb_x, s->mb_y);
return -1;
}
block[j] = level;
}
+1 -1
View File
@@ -251,7 +251,7 @@ static void put_line(uint8_t *dst, int size, int width, const int *runs)
PutBitContext pb;
int run, mode = ~0, pix_left = width, run_idx = 0;
init_put_bits(&pb, dst, size * 8);
init_put_bits(&pb, dst, size);
while (pix_left > 0) {
run = runs[run_idx++];
mode = ~mode;
+1 -1
View File
@@ -287,7 +287,7 @@ static int write_header(FlashSV2Context * s, uint8_t * buf, int buf_size)
if (buf_size < 5)
return -1;
init_put_bits(&pb, buf, buf_size * 8);
init_put_bits(&pb, buf, buf_size);
put_bits(&pb, 4, (s->block_width >> 4) - 1);
put_bits(&pb, 12, s->image_width);
+1 -1
View File
@@ -151,7 +151,7 @@ static int encode_bitstream(FlashSVContext *s, const AVFrame *p, uint8_t *buf,
int buf_pos, res;
int pred_blocks = 0;
init_put_bits(&pb, buf, buf_size * 8);
init_put_bits(&pb, buf, buf_size);
put_bits(&pb, 4, block_width / 16 - 1);
put_bits(&pb, 12, s->image_width);
+2 -2
View File
@@ -105,7 +105,7 @@ static int gif_image_write_image(AVCodecContext *avctx,
/* skip common columns */
while (x_start < x_end) {
int same_column = 1;
for (y = y_start; y < y_end; y++) {
for (y = y_start; y <= y_end; y++) {
if (ref[y*ref_linesize + x_start] != buf[y*linesize + x_start]) {
same_column = 0;
break;
@@ -117,7 +117,7 @@ static int gif_image_write_image(AVCodecContext *avctx,
}
while (x_end > x_start) {
int same_column = 1;
for (y = y_start; y < y_end; y++) {
for (y = y_start; y <= y_end; y++) {
if (ref[y*ref_linesize + x_end] != buf[y*linesize + x_end]) {
same_column = 0;
break;
+3 -2
View File
@@ -727,8 +727,9 @@ static int decode_init_thread_copy(AVCodecContext *avctx)
memset(h->sps_buffers, 0, sizeof(h->sps_buffers));
memset(h->pps_buffers, 0, sizeof(h->pps_buffers));
h->rbsp_buffer[0] = NULL;
h->rbsp_buffer[1] = NULL;
h->avctx = avctx;
h->rbsp_buffer[0] = NULL;
h->rbsp_buffer[1] = NULL;
h->rbsp_buffer_size[0] = 0;
h->rbsp_buffer_size[1] = 0;
h->context_initialized = 0;
+1 -1
View File
@@ -1713,7 +1713,7 @@ decode_cabac_residual_internal(H264Context *h, int16_t *block,
\
if( coeff_abs >= 15 ) { \
int j = 0; \
while(get_cabac_bypass( CC ) && j<30) { \
while (get_cabac_bypass(CC) && j < 30) { \
j++; \
} \
\
+4 -4
View File
@@ -480,10 +480,10 @@ int ff_h264_decode_seq_parameter_set(H264Context *h)
#endif
sps->crop = get_bits1(&h->gb);
if (sps->crop) {
int crop_left = get_ue_golomb(&h->gb);
int crop_right = get_ue_golomb(&h->gb);
int crop_top = get_ue_golomb(&h->gb);
int crop_bottom = get_ue_golomb(&h->gb);
unsigned int crop_left = get_ue_golomb(&h->gb);
unsigned int crop_right = get_ue_golomb(&h->gb);
unsigned int crop_top = get_ue_golomb(&h->gb);
unsigned int crop_bottom = get_ue_golomb(&h->gb);
int width = 16 * sps->mb_width;
int height = 16 * sps->mb_height * (2 - sps->frame_mbs_only_flag);
+6 -3
View File
@@ -647,8 +647,11 @@ int ff_h264_update_thread_context(AVCodecContext *dst,
h->cur_pic_ptr = REBASE_PICTURE(h1->cur_pic_ptr, h, h1);
ff_h264_unref_picture(h, &h->cur_pic);
if (h1->cur_pic.f.buf[0] && (ret = ff_h264_ref_picture(h, &h->cur_pic, &h1->cur_pic)) < 0)
return ret;
if (h1->cur_pic.f.buf[0]) {
ret = ff_h264_ref_picture(h, &h->cur_pic, &h1->cur_pic);
if (ret < 0)
return ret;
}
h->workaround_bugs = h1->workaround_bugs;
h->low_delay = h1->low_delay;
@@ -1515,7 +1518,7 @@ int ff_h264_decode_slice_header(H264Context *h, H264Context *h0)
}
}
if (h == h0 && h->dequant_coeff_pps != pps_id) {
if (first_slice && h->dequant_coeff_pps != pps_id) {
h->dequant_coeff_pps = pps_id;
h264_init_dequant_tables(h);
}
+4 -4
View File
@@ -298,10 +298,10 @@ typedef struct RefPicListTab {
} RefPicListTab;
typedef struct HEVCWindow {
int left_offset;
int right_offset;
int top_offset;
int bottom_offset;
unsigned int left_offset;
unsigned int right_offset;
unsigned int top_offset;
unsigned int bottom_offset;
} HEVCWindow;
typedef struct VUI {
+24 -6
View File
@@ -895,11 +895,30 @@ int ff_hevc_decode_nal_sps(HEVCContext *s)
sps->log2_max_trafo_size = log2_diff_max_min_transform_block_size +
sps->log2_min_tb_size;
if (sps->log2_min_tb_size >= sps->log2_min_cb_size) {
if (sps->log2_min_cb_size < 3 || sps->log2_min_cb_size > 30) {
av_log(s->avctx, AV_LOG_ERROR, "Invalid value %d for log2_min_cb_size", sps->log2_min_cb_size);
ret = AVERROR_INVALIDDATA;
goto err;
}
if (sps->log2_diff_max_min_coding_block_size > 30) {
av_log(s->avctx, AV_LOG_ERROR, "Invalid value %d for log2_diff_max_min_coding_block_size", sps->log2_diff_max_min_coding_block_size);
ret = AVERROR_INVALIDDATA;
goto err;
}
if (sps->log2_min_tb_size >= sps->log2_min_cb_size || sps->log2_min_tb_size < 2) {
av_log(s->avctx, AV_LOG_ERROR, "Invalid value for log2_min_tb_size");
ret = AVERROR_INVALIDDATA;
goto err;
}
if (log2_diff_max_min_transform_block_size < 0 || log2_diff_max_min_transform_block_size > 30) {
av_log(s->avctx, AV_LOG_ERROR, "Invalid value %d for log2_diff_max_min_transform_block_size", log2_diff_max_min_transform_block_size);
ret = AVERROR_INVALIDDATA;
goto err;
}
sps->max_transform_hierarchy_depth_inter = get_ue_golomb_long(gb);
sps->max_transform_hierarchy_depth_intra = get_ue_golomb_long(gb);
@@ -1021,7 +1040,8 @@ int ff_hevc_decode_nal_sps(HEVCContext *s)
(sps->output_window.left_offset + sps->output_window.right_offset);
sps->output_height = sps->height -
(sps->output_window.top_offset + sps->output_window.bottom_offset);
if (sps->output_width <= 0 || sps->output_height <= 0) {
if (sps->width <= sps->output_window.left_offset + (int64_t)sps->output_window.right_offset ||
sps->height <= sps->output_window.top_offset + (int64_t)sps->output_window.bottom_offset) {
av_log(s->avctx, AV_LOG_WARNING, "Invalid visible frame dimensions: %dx%d.\n",
sps->output_width, sps->output_height);
if (s->avctx->err_recognition & AV_EF_EXPLODE) {
@@ -1030,10 +1050,8 @@ int ff_hevc_decode_nal_sps(HEVCContext *s)
}
av_log(s->avctx, AV_LOG_WARNING,
"Displaying the whole video surface.\n");
sps->pic_conf_win.left_offset =
sps->pic_conf_win.right_offset =
sps->pic_conf_win.top_offset =
sps->pic_conf_win.bottom_offset = 0;
memset(&sps->pic_conf_win, 0, sizeof(sps->pic_conf_win));
memset(&sps->output_window, 0, sizeof(sps->output_window));
sps->output_width = sps->width;
sps->output_height = sps->height;
}
+13 -7
View File
@@ -88,7 +88,12 @@ static inline int mdec_decode_block_intra(MDECContext *a, int16_t *block, int n)
if (level == 127) {
break;
} else if (level != 0) {
i += run;
i += run;
if (i > 63) {
av_log(a->avctx, AV_LOG_ERROR,
"ac-tex damaged at %d %d\n", a->mb_x, a->mb_y);
return AVERROR_INVALIDDATA;
}
j = scantable[i];
level = (level * qscale * quant_matrix[j]) >> 3;
level = (level ^ SHOW_SBITS(re, &a->gb, 1)) - SHOW_SBITS(re, &a->gb, 1);
@@ -98,8 +103,13 @@ static inline int mdec_decode_block_intra(MDECContext *a, int16_t *block, int n)
run = SHOW_UBITS(re, &a->gb, 6)+1; LAST_SKIP_BITS(re, &a->gb, 6);
UPDATE_CACHE(re, &a->gb);
level = SHOW_SBITS(re, &a->gb, 10); SKIP_BITS(re, &a->gb, 10);
i += run;
j = scantable[i];
i += run;
if (i > 63) {
av_log(a->avctx, AV_LOG_ERROR,
"ac-tex damaged at %d %d\n", a->mb_x, a->mb_y);
return AVERROR_INVALIDDATA;
}
j = scantable[i];
if (level < 0) {
level = -level;
level = (level * qscale * quant_matrix[j]) >> 3;
@@ -110,10 +120,6 @@ static inline int mdec_decode_block_intra(MDECContext *a, int16_t *block, int n)
level = (level - 1) | 1;
}
}
if (i > 63) {
av_log(a->avctx, AV_LOG_ERROR, "ac-tex damaged at %d %d\n", a->mb_x, a->mb_y);
return AVERROR_INVALIDDATA;
}
block[j] = level;
}
+1 -1
View File
@@ -89,7 +89,7 @@ static void ff_acelp_interpolatef_mips(float *out, const float *in,
"addu %[p_filter_coeffs_m], %[p_filter_coeffs_m], %[prec] \n\t"
"madd.s %[v],%[v],%[in_val_m], %[fc_val_m] \n\t"
: [v] "=&f" (v),[p_in_p] "+r" (p_in_p), [p_in_m] "+r" (p_in_m),
: [v] "+&f" (v),[p_in_p] "+r" (p_in_p), [p_in_m] "+r" (p_in_m),
[p_filter_coeffs_p] "+r" (p_filter_coeffs_p),
[in_val_p] "=&f" (in_val_p), [in_val_m] "=&f" (in_val_m),
[fc_val_p] "=&f" (fc_val_p), [fc_val_m] "=&f" (fc_val_m),
+1 -1
View File
@@ -851,7 +851,7 @@ extern const uint8_t ff_aic_dc_scale_table[32];
extern const uint8_t ff_h263_chroma_qscale_table[32];
/* rv10.c */
void ff_rv10_encode_picture_header(MpegEncContext *s, int picture_number);
int ff_rv10_encode_picture_header(MpegEncContext *s, int picture_number);
int ff_rv_decode_dc(MpegEncContext *s, int n);
void ff_rv20_encode_picture_header(MpegEncContext *s, int picture_number);
+5 -2
View File
@@ -3657,8 +3657,11 @@ static int encode_picture(MpegEncContext *s, int picture_number)
ff_msmpeg4_encode_picture_header(s, picture_number);
else if (CONFIG_MPEG4_ENCODER && s->h263_pred)
ff_mpeg4_encode_picture_header(s, picture_number);
else if (CONFIG_RV10_ENCODER && s->codec_id == AV_CODEC_ID_RV10)
ff_rv10_encode_picture_header(s, picture_number);
else if (CONFIG_RV10_ENCODER && s->codec_id == AV_CODEC_ID_RV10) {
ret = ff_rv10_encode_picture_header(s, picture_number);
if (ret < 0)
return ret;
}
else if (CONFIG_RV20_ENCODER && s->codec_id == AV_CODEC_ID_RV20)
ff_rv20_encode_picture_header(s, picture_number);
else if (CONFIG_FLV_ENCODER && s->codec_id == AV_CODEC_ID_FLV1)
+11 -14
View File
@@ -37,16 +37,14 @@ static int msrle_decode_pal4(AVCodecContext *avctx, AVPicture *pic,
unsigned char extra_byte, odd_pixel;
unsigned char stream_byte;
unsigned int pixel_ptr = 0;
int row_dec = pic->linesize[0];
int row_ptr = (avctx->height - 1) * row_dec;
int frame_size = row_dec * avctx->height;
int line = avctx->height - 1;
int i;
while (row_ptr >= 0) {
while (line >= 0 && pixel_ptr <= avctx->width) {
if (bytestream2_get_bytes_left(gb) <= 0) {
av_log(avctx, AV_LOG_ERROR,
"MS RLE: bytestream overrun, %d rows left\n",
row_ptr);
"MS RLE: bytestream overrun, %dx%d left\n",
avctx->width - pixel_ptr, line);
return AVERROR_INVALIDDATA;
}
rle_code = stream_byte = bytestream2_get_byteu(gb);
@@ -55,7 +53,7 @@ static int msrle_decode_pal4(AVCodecContext *avctx, AVPicture *pic,
stream_byte = bytestream2_get_byte(gb);
if (stream_byte == 0) {
/* line is done, goto the next one */
row_ptr -= row_dec;
line--;
pixel_ptr = 0;
} else if (stream_byte == 1) {
/* decode is done */
@@ -65,13 +63,12 @@ static int msrle_decode_pal4(AVCodecContext *avctx, AVPicture *pic,
stream_byte = bytestream2_get_byte(gb);
pixel_ptr += stream_byte;
stream_byte = bytestream2_get_byte(gb);
row_ptr -= stream_byte * row_dec;
} else {
// copy pixels from encoded stream
odd_pixel = stream_byte & 1;
rle_code = (stream_byte + 1) / 2;
extra_byte = rle_code & 0x01;
if (row_ptr + pixel_ptr + stream_byte > frame_size ||
if (pixel_ptr + 2*rle_code - odd_pixel > avctx->width ||
bytestream2_get_bytes_left(gb) < rle_code) {
av_log(avctx, AV_LOG_ERROR,
"MS RLE: frame/stream ptr just went out of bounds (copy)\n");
@@ -82,13 +79,13 @@ static int msrle_decode_pal4(AVCodecContext *avctx, AVPicture *pic,
if (pixel_ptr >= avctx->width)
break;
stream_byte = bytestream2_get_byteu(gb);
pic->data[0][row_ptr + pixel_ptr] = stream_byte >> 4;
pic->data[0][line * pic->linesize[0] + pixel_ptr] = stream_byte >> 4;
pixel_ptr++;
if (i + 1 == rle_code && odd_pixel)
break;
if (pixel_ptr >= avctx->width)
break;
pic->data[0][row_ptr + pixel_ptr] = stream_byte & 0x0F;
pic->data[0][line * pic->linesize[0] + pixel_ptr] = stream_byte & 0x0F;
pixel_ptr++;
}
@@ -98,7 +95,7 @@ static int msrle_decode_pal4(AVCodecContext *avctx, AVPicture *pic,
}
} else {
// decode a run of data
if (row_ptr + pixel_ptr + stream_byte > frame_size) {
if (pixel_ptr + rle_code > avctx->width + 1) {
av_log(avctx, AV_LOG_ERROR,
"MS RLE: frame ptr just went out of bounds (run)\n");
return AVERROR_INVALIDDATA;
@@ -108,9 +105,9 @@ static int msrle_decode_pal4(AVCodecContext *avctx, AVPicture *pic,
if (pixel_ptr >= avctx->width)
break;
if ((i & 1) == 0)
pic->data[0][row_ptr + pixel_ptr] = stream_byte >> 4;
pic->data[0][line * pic->linesize[0] + pixel_ptr] = stream_byte >> 4;
else
pic->data[0][row_ptr + pixel_ptr] = stream_byte & 0x0F;
pic->data[0][line * pic->linesize[0] + pixel_ptr] = stream_byte & 0x0F;
pixel_ptr++;
}
}
+1 -1
View File
@@ -303,7 +303,7 @@ static void encode_block(NellyMoserEncodeContext *s, unsigned char *output, int
apply_mdct(s);
init_put_bits(&pb, output, output_size * 8);
init_put_bits(&pb, output, output_size);
i = 0;
for (band = 0; band < NELLY_BANDS; band++) {
-1
View File
@@ -102,7 +102,6 @@ static const AVOption avcodec_options[] = {
{"hex", "hex motion estimation", 0, AV_OPT_TYPE_CONST, {.i64 = ME_HEX }, INT_MIN, INT_MAX, V|E, "me_method" },
{"umh", "umh motion estimation", 0, AV_OPT_TYPE_CONST, {.i64 = ME_UMH }, INT_MIN, INT_MAX, V|E, "me_method" },
{"iter", "iter motion estimation", 0, AV_OPT_TYPE_CONST, {.i64 = ME_ITER }, INT_MIN, INT_MAX, V|E, "me_method" },
{"extradata_size", NULL, OFFSET(extradata_size), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX},
{"time_base", NULL, OFFSET(time_base), AV_OPT_TYPE_RATIONAL, {.dbl = 0}, INT_MIN, INT_MAX},
{"g", "set the group of picture (GOP) size", OFFSET(gop_size), AV_OPT_TYPE_INT, {.i64 = 12 }, INT_MIN, INT_MAX, V|E},
{"ar", "set audio sampling rate (in Hz)", OFFSET(sample_rate), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, A|D|E},
+9 -1
View File
@@ -451,6 +451,14 @@ static int opus_decode_packet(AVCodecContext *avctx, void *data,
int coded_samples = 0;
int decoded_samples = 0;
int i, ret;
int delayed_samples = 0;
for (i = 0; i < c->nb_streams; i++) {
OpusStreamContext *s = &c->streams[i];
s->out[0] =
s->out[1] = NULL;
delayed_samples = FFMAX(delayed_samples, s->delayed_samples);
}
/* decode the header of the first sub-packet to find out the sample count */
if (buf) {
@@ -464,7 +472,7 @@ static int opus_decode_packet(AVCodecContext *avctx, void *data,
c->streams[0].silk_samplerate = get_silk_samplerate(pkt->config);
}
frame->nb_samples = coded_samples + c->streams[0].delayed_samples;
frame->nb_samples = coded_samples + delayed_samples;
/* no input or buffered data => nothing to do */
if (!frame->nb_samples) {
+3 -2
View File
@@ -366,6 +366,7 @@ static inline void decode_dc_coeffs(GetBitContext *gb, int16_t *out,
}
}
#define MAX_PADDING 16
/**
* Decode AC coefficients for all blocks in a slice.
@@ -390,7 +391,7 @@ static inline int decode_ac_coeffs(GetBitContext *gb, int16_t *out,
lev_cb_index = ff_prores_lev_to_cb_index[FFMIN(level, 9)];
bits_left = get_bits_left(gb);
if (bits_left <= 0 || (bits_left <= 8 && !show_bits(gb, bits_left)))
if (bits_left <= 0 || (bits_left <= MAX_PADDING && !show_bits(gb, bits_left)))
return 0;
run = decode_vlc_codeword(gb, ff_prores_ac_codebook[run_cb_index]);
@@ -398,7 +399,7 @@ static inline int decode_ac_coeffs(GetBitContext *gb, int16_t *out,
return AVERROR_INVALIDDATA;
bits_left = get_bits_left(gb);
if (bits_left <= 0 || (bits_left <= 8 && !show_bits(gb, bits_left)))
if (bits_left <= 0 || (bits_left <= MAX_PADDING && !show_bits(gb, bits_left)))
return AVERROR_INVALIDDATA;
level = decode_vlc_codeword(gb, ff_prores_ac_codebook[lev_cb_index]) + 1;
+1 -1
View File
@@ -304,7 +304,7 @@ static int encode_slice_plane(AVCodecContext *avctx, int mb_count,
}
blocks_per_slice = mb_count << (2 - chroma);
init_put_bits(&pb, buf, buf_size << 3);
init_put_bits(&pb, buf, buf_size);
encode_dc_coeffs(&pb, blocks, blocks_per_slice, qmat);
encode_ac_coeffs(avctx, &pb, blocks, blocks_per_slice, qmat);
+1 -1
View File
@@ -1057,7 +1057,7 @@ static int encode_frame(AVCodecContext *avctx, AVPacket *pkt,
slice_hdr = pkt->data + (slice_hdr - start);
tmp = pkt->data + (tmp - start);
}
init_put_bits(&pb, buf, (pkt_size - (buf - orig_buf)) * 8);
init_put_bits(&pb, buf, (pkt_size - (buf - orig_buf)));
ret = encode_slice(avctx, pic, &pb, sizes, x, y, q,
mbs_per_slice);
if (ret < 0)
+2
View File
@@ -966,6 +966,8 @@ static av_cold int roq_encode_init(AVCodecContext *avctx)
av_lfg_init(&enc->randctx, 1);
enc->avctx = avctx;
enc->framesSinceKeyframe = 0;
if ((avctx->width & 0xf) || (avctx->height & 0xf)) {
av_log(avctx, AV_LOG_ERROR, "Dimensions must be divisible by 16\n");
+7 -1
View File
@@ -28,7 +28,7 @@
#include "mpegvideo.h"
#include "put_bits.h"
void ff_rv10_encode_picture_header(MpegEncContext *s, int picture_number)
int ff_rv10_encode_picture_header(MpegEncContext *s, int picture_number)
{
int full_frame= 0;
@@ -48,12 +48,18 @@ void ff_rv10_encode_picture_header(MpegEncContext *s, int picture_number)
/* if multiple packets per frame are sent, the position at which
to display the macroblocks is coded here */
if(!full_frame){
if (s->mb_width * s->mb_height >= (1U << 12)) {
avpriv_report_missing_feature(s->avctx, "Encoding frames with %d (>= 4096) macroblocks",
s->mb_width * s->mb_height);
return AVERROR(ENOSYS);
}
put_bits(&s->pb, 6, 0); /* mb_x */
put_bits(&s->pb, 6, 0); /* mb_y */
put_bits(&s->pb, 12, s->mb_width * s->mb_height);
}
put_bits(&s->pb, 3, 0); /* ignored */
return 0;
}
FF_MPV_GENERIC_CLASS(rv10)
+1 -1
View File
@@ -82,7 +82,7 @@ static int s302m_encode2_frame(AVCodecContext *avctx, AVPacket *avpkt,
return ret;
o = avpkt->data;
init_put_bits(&pb, o, buf_size * 8);
init_put_bits(&pb, o, buf_size);
put_bits(&pb, 16, buf_size - AES3_HEADER_LEN);
put_bits(&pb, 2, (avctx->channels - 2) >> 1); // number of channels
put_bits(&pb, 8, 0); // channel ID
+1 -1
View File
@@ -152,7 +152,7 @@ static int decode_q_branch(SnowContext *s, int level, int x, int y){
int l = left->color[0];
int cb= left->color[1];
int cr= left->color[2];
int ref = 0;
unsigned ref = 0;
int ref_context= av_log2(2*left->ref) + av_log2(2*top->ref);
int mx_context= av_log2(2*FFABS(left->mx - top->mx)) + 0*av_log2(2*FFABS(tr->mx - top->mx));
int my_context= av_log2(2*FFABS(left->my - top->my)) + 0*av_log2(2*FFABS(tr->my - top->my));
+15 -7
View File
@@ -655,6 +655,14 @@ static int init_image(TiffContext *s, ThreadFrame *frame)
int ret;
int create_gray_palette = 0;
// make sure there is no aliasing in the following switch
if (s->bpp >= 100 || s->bppcount >= 10) {
av_log(s->avctx, AV_LOG_ERROR,
"Unsupported image parameters: bpp=%d, bppcount=%d\n",
s->bpp, s->bppcount);
return AVERROR_INVALIDDATA;
}
switch (s->planar * 1000 + s->bpp * 10 + s->bppcount) {
case 11:
if (!s->palette_is_set) {
@@ -836,13 +844,6 @@ static int tiff_decode_tag(TiffContext *s, AVFrame *frame)
s->bpp = -1;
}
}
if (s->bpp > 64U) {
av_log(s->avctx, AV_LOG_ERROR,
"This format is not supported (bpp=%d, %d components)\n",
s->bpp, count);
s->bpp = 0;
return AVERROR_INVALIDDATA;
}
break;
case TIFF_SAMPLES_PER_PIXEL:
if (count != 1) {
@@ -1155,6 +1156,13 @@ static int tiff_decode_tag(TiffContext *s, AVFrame *frame)
}
}
end:
if (s->bpp > 64U) {
av_log(s->avctx, AV_LOG_ERROR,
"This format is not supported (bpp=%d, %d components)\n",
s->bpp, count);
s->bpp = 0;
return AVERROR_INVALIDDATA;
}
bytestream2_seek(&s->gb, start, SEEK_SET);
return 0;
}
+2 -2
View File
@@ -246,7 +246,7 @@ int ff_set_sar(AVCodecContext *avctx, AVRational sar)
int ret = av_image_check_sar(avctx->width, avctx->height, sar);
if (ret < 0) {
av_log(avctx, AV_LOG_WARNING, "ignoring invalid SAR: %u/%u\n",
av_log(avctx, AV_LOG_WARNING, "ignoring invalid SAR: %d/%d\n",
sar.num, sar.den);
avctx->sample_aspect_ratio = (AVRational){ 0, 1 };
return ret;
@@ -374,7 +374,7 @@ void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height,
case AV_PIX_FMT_YUVJ411P:
case AV_PIX_FMT_UYYVYY411:
w_align = 32;
h_align = 8;
h_align = 16 * 2;
break;
case AV_PIX_FMT_YUV410P:
if (s->codec_id == AV_CODEC_ID_SVQ1) {
+15 -20
View File
@@ -1321,7 +1321,7 @@ static av_always_inline int setup_classifs(vorbis_context *vc,
int p, j, i;
unsigned c_p_c = vc->codebooks[vr->classbook].dimensions;
unsigned inverse_class = ff_inverse[vr->classifications];
unsigned temp, temp2;
int temp, temp2;
for (p = 0, j = 0; j < ch_used; ++j) {
if (!do_not_decode[j]) {
temp = get_vlc2(&vc->gb, vc->codebooks[vr->classbook].vlc.table,
@@ -1329,27 +1329,22 @@ static av_always_inline int setup_classifs(vorbis_context *vc,
av_dlog(NULL, "Classword: %u\n", temp);
if ((int)temp < 0)
return temp;
av_assert0(temp < 65536);
if (temp < 0) {
av_log(vc->avctx, AV_LOG_ERROR,
"Invalid vlc code decoding %d channel.", j);
return AVERROR_INVALIDDATA;
}
av_assert0(vr->classifications > 1); //needed for inverse[]
if (temp <= 65536) {
for (i = partition_count + c_p_c - 1; i >= partition_count; i--) {
temp2 = (((uint64_t)temp) * inverse_class) >> 32;
for (i = partition_count + c_p_c - 1; i >= partition_count; i--) {
temp2 = (((uint64_t)temp) * inverse_class) >> 32;
if (i < ptns_to_read)
vr->classifs[p + i] = temp - temp2 * vr->classifications;
temp = temp2;
}
} else {
for (i = partition_count + c_p_c - 1; i >= partition_count; i--) {
temp2 = temp / vr->classifications;
if (i < ptns_to_read)
vr->classifs[p + i] = temp - temp2 * vr->classifications;
temp = temp2;
}
if (i < ptns_to_read)
vr->classifs[p + i] = temp - temp2 * vr->classifications;
temp = temp2;
}
}
p += ptns_to_read;
@@ -1405,8 +1400,8 @@ static av_always_inline int vorbis_residue_decode_internal(vorbis_context *vc,
voffset = vr->begin;
for (partition_count = 0; partition_count < ptns_to_read;) { // SPEC error
if (!pass) {
int ret;
if ((ret = setup_classifs(vc, vr, do_not_decode, ch_used, partition_count, ptns_to_read)) < 0)
int ret = setup_classifs(vc, vr, do_not_decode, ch_used, partition_count, ptns_to_read);
if (ret < 0)
return ret;
}
for (i = 0; (i < c_p_c) && (partition_count < ptns_to_read); ++i) {
+16 -6
View File
@@ -278,7 +278,8 @@ static int vp9_alloc_frame(AVCodecContext *ctx, VP9Frame *f)
// retain segmentation map if it doesn't update
if (s->segmentation.enabled && !s->segmentation.update_map &&
!s->intraonly && !s->keyframe && !s->errorres) {
!s->intraonly && !s->keyframe && !s->errorres &&
ctx->active_thread_type != FF_THREAD_FRAME) {
memcpy(f->segmentation_map, s->frames[LAST_FRAME].segmentation_map, sz);
}
@@ -1350,9 +1351,18 @@ static void decode_mode(AVCodecContext *ctx)
if (!s->last_uses_2pass)
ff_thread_await_progress(&s->frames[LAST_FRAME].tf, row >> 3, 0);
for (y = 0; y < h4; y++)
for (y = 0; y < h4; y++) {
int idx_base = (y + row) * 8 * s->sb_cols + col;
for (x = 0; x < w4; x++)
pred = FFMIN(pred, refsegmap[(y + row) * 8 * s->sb_cols + x + col]);
pred = FFMIN(pred, refsegmap[idx_base + x]);
if (!s->segmentation.update_map && ctx->active_thread_type == FF_THREAD_FRAME) {
// FIXME maybe retain reference to previous frame as
// segmap reference instead of copying the whole map
// into a new buffer
memcpy(&s->frames[CUR_FRAME].segmentation_map[idx_base],
&refsegmap[idx_base], w4);
}
}
av_assert1(pred < 8);
b->seg_id = pred;
} else {
@@ -2495,7 +2505,7 @@ static void intra_recon(AVCodecContext *ctx, ptrdiff_t y_off, ptrdiff_t uv_off)
for (x = 0; x < end_x; x += uvstep1d, ptr += 4 * uvstep1d,
ptr_r += 4 * uvstep1d, n += step) {
int mode = b->uvmode;
uint8_t *a = &a_buf[16];
uint8_t *a = &a_buf[32];
int eob = b->skip ? 0 : b->uvtx > TX_8X8 ? AV_RN16A(&s->uveob[p][n]) : s->uveob[p][n];
mode = check_intra_mode(s, mode, &a, ptr_r,
@@ -3747,7 +3757,7 @@ static int vp9_decode_frame(AVCodecContext *ctx, void *frame,
if ((res = av_frame_ref(frame, s->refs[ref].f)) < 0)
return res;
*got_frame = 1;
return 0;
return pkt->size;
}
data += res;
size -= res;
@@ -3957,7 +3967,7 @@ static int vp9_decode_frame(AVCodecContext *ctx, void *frame,
*got_frame = 1;
}
return 0;
return pkt->size;
}
static void vp9_decode_flush(AVCodecContext *ctx)
+14 -1
View File
@@ -694,6 +694,11 @@ static int decode_entropy_coded_image(WebPContext *s, enum ImageRole role,
length = offset + get_bits(&s->gb, extra_bits) + 1;
}
prefix_code = huff_reader_get_symbol(&hg[HUFF_IDX_DIST], &s->gb);
if (prefix_code > 39) {
av_log(s->avctx, AV_LOG_ERROR,
"distance prefix code too large: %d\n", prefix_code);
return AVERROR_INVALIDDATA;
}
if (prefix_code < 4) {
distance = prefix_code + 1;
} else {
@@ -1082,7 +1087,7 @@ static int vp8_lossless_decode_frame(AVCodecContext *avctx, AVFrame *p,
unsigned int data_size, int is_alpha_chunk)
{
WebPContext *s = avctx->priv_data;
int w, h, ret, i;
int w, h, ret, i, used;
if (!is_alpha_chunk) {
s->lossless = 1;
@@ -1132,8 +1137,16 @@ static int vp8_lossless_decode_frame(AVCodecContext *avctx, AVFrame *p,
/* parse transformations */
s->nb_transforms = 0;
s->reduced_width = 0;
used = 0;
while (get_bits1(&s->gb)) {
enum TransformType transform = get_bits(&s->gb, 2);
if (used & (1 << transform)) {
av_log(avctx, AV_LOG_ERROR, "Transform %d used more than once\n",
transform);
ret = AVERROR_INVALIDDATA;
goto free_and_return;
}
used |= (1 << transform);
s->transforms[s->nb_transforms++] = transform;
switch (transform) {
case PREDICTOR_TRANSFORM:
+2 -4
View File
@@ -132,8 +132,8 @@ static void mlp_filter_channel_x86(int32_t *state, const int32_t *coeff,
FIRMUL (ff_mlp_firorder_6, 0x14 )
FIRMUL (ff_mlp_firorder_5, 0x10 )
FIRMUL (ff_mlp_firorder_4, 0x0c )
FIRMULREG(ff_mlp_firorder_3, 0x08,10)
FIRMULREG(ff_mlp_firorder_2, 0x04, 9)
FIRMUL (ff_mlp_firorder_3, 0x08 )
FIRMUL (ff_mlp_firorder_2, 0x04 )
FIRMULREG(ff_mlp_firorder_1, 0x00, 8)
LABEL_MANGLE(ff_mlp_firorder_0)":\n\t"
"jmp *%6 \n\t"
@@ -162,8 +162,6 @@ static void mlp_filter_channel_x86(int32_t *state, const int32_t *coeff,
: /* 4*/"r"((x86_reg)mask), /* 5*/"r"(firjump),
/* 6*/"r"(iirjump) , /* 7*/"c"(filter_shift)
, /* 8*/"r"((int64_t)coeff[0])
, /* 9*/"r"((int64_t)coeff[1])
, /*10*/"r"((int64_t)coeff[2])
: "rax", "rdx", "rsi"
#else /* ARCH_X86_32 */
/* 3*/"+m"(blocksize)
+5
View File
@@ -410,11 +410,16 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame, AVPac
int hi_ver, lo_ver, ret;
/* parse header */
if (len < 1)
return AVERROR_INVALIDDATA;
c->flags = buf[0];
buf++; len--;
if (c->flags & ZMBV_KEYFRAME) {
void *decode_intra = NULL;
c->decode_intra= NULL;
if (len < 6)
return AVERROR_INVALIDDATA;
hi_ver = buf[0];
lo_ver = buf[1];
c->comp = buf[2];
+11
View File
@@ -40,6 +40,11 @@ static int adx_read_packet(AVFormatContext *s, AVPacket *pkt)
AVCodecContext *avctx = s->streams[0]->codec;
int ret, size;
if (avctx->channels <= 0) {
av_log(s, AV_LOG_ERROR, "invalid number of channels %d\n", avctx->channels);
return AVERROR_INVALIDDATA;
}
size = BLOCK_SIZE * avctx->channels;
pkt->pos = avio_tell(s->pb);
@@ -83,8 +88,14 @@ static int adx_read_header(AVFormatContext *s)
av_log(s, AV_LOG_ERROR, "Invalid extradata size.\n");
return AVERROR_INVALIDDATA;
}
avctx->channels = AV_RB8(avctx->extradata + 7);
avctx->sample_rate = AV_RB32(avctx->extradata + 8);
if (avctx->channels <= 0) {
av_log(s, AV_LOG_ERROR, "invalid number of channels %d\n", avctx->channels);
return AVERROR_INVALIDDATA;
}
st->codec->codec_type = AVMEDIA_TYPE_AUDIO;
st->codec->codec_id = s->iformat->raw_codec_id;
+1
View File
@@ -664,6 +664,7 @@ static int asf_write_header(AVFormatContext *s)
* It is needed to use asf as a streamable format. */
if (asf_write_header1(s, 0, DATA_HEADER_SIZE) < 0) {
//av_free(asf);
av_freep(&asf->index_ptr);
return -1;
}
+9 -2
View File
@@ -119,8 +119,12 @@ static int write_header(AVFormatContext *s)
{
AVCodecContext *enc = s->streams[0]->codec;
enc->codec_id = AV_CODEC_ID_G729;
enc->channels = 1;
if ((enc->codec_id != AV_CODEC_ID_G729) || enc->channels != 1) {
av_log(s, AV_LOG_ERROR,
"only codec g729 with 1 channel is supported by this format\n");
return AVERROR(EINVAL);
}
enc->bits_per_coded_sample = 16;
enc->block_align = (enc->bits_per_coded_sample * enc->channels) >> 3;
@@ -133,6 +137,9 @@ static int write_packet(AVFormatContext *s, AVPacket *pkt)
GetBitContext gb;
int i;
if (pkt->size != 10)
return AVERROR(EINVAL);
avio_wl16(pb, SYNC_WORD);
avio_wl16(pb, 8 * 10);
+20 -4
View File
@@ -79,6 +79,7 @@ static int ffm_read_data(AVFormatContext *s,
FFMContext *ffm = s->priv_data;
AVIOContext *pb = s->pb;
int len, fill_size, size1, frame_offset, id;
int64_t last_pos = -1;
size1 = size;
while (size > 0) {
@@ -98,9 +99,11 @@ static int ffm_read_data(AVFormatContext *s,
avio_seek(pb, tell, SEEK_SET);
}
id = avio_rb16(pb); /* PACKET_ID */
if (id != PACKET_ID)
if (id != PACKET_ID) {
if (ffm_resync(s, id) < 0)
return -1;
last_pos = avio_tell(pb);
}
fill_size = avio_rb16(pb);
ffm->dts = avio_rb64(pb);
frame_offset = avio_rb16(pb);
@@ -114,7 +117,9 @@ static int ffm_read_data(AVFormatContext *s,
if (!frame_offset) {
/* This packet has no frame headers in it */
if (avio_tell(pb) >= ffm->packet_size * 3LL) {
avio_seek(pb, -ffm->packet_size * 2LL, SEEK_CUR);
int64_t seekback = FFMIN(ffm->packet_size * 2LL, avio_tell(pb) - last_pos);
seekback = FFMAX(seekback, 0);
avio_seek(pb, -seekback, SEEK_CUR);
goto retry_read;
}
/* This is bad, we cannot find a valid frame header */
@@ -299,6 +304,12 @@ static int ffm2_read_header(AVFormatContext *s)
case MKBETAG('S', 'T', 'V', 'I'):
codec->time_base.num = avio_rb32(pb);
codec->time_base.den = avio_rb32(pb);
if (codec->time_base.num <= 0 || codec->time_base.den <= 0) {
av_log(s, AV_LOG_ERROR, "Invalid time base %d/%d\n",
codec->time_base.num, codec->time_base.den);
ret = AVERROR_INVALIDDATA;
goto fail;
}
codec->width = avio_rb16(pb);
codec->height = avio_rb16(pb);
codec->gop_size = avio_rb16(pb);
@@ -354,7 +365,7 @@ static int ffm2_read_header(AVFormatContext *s)
}
/* get until end of block reached */
while ((avio_tell(pb) % ffm->packet_size) != 0)
while ((avio_tell(pb) % ffm->packet_size) != 0 && !pb->eof_reached)
avio_r8(pb);
/* init packet demux */
@@ -423,6 +434,11 @@ static int ffm_read_header(AVFormatContext *s)
case AVMEDIA_TYPE_VIDEO:
codec->time_base.num = avio_rb32(pb);
codec->time_base.den = avio_rb32(pb);
if (codec->time_base.num <= 0 || codec->time_base.den <= 0) {
av_log(s, AV_LOG_ERROR, "Invalid time base %d/%d\n",
codec->time_base.num, codec->time_base.den);
goto fail;
}
codec->width = avio_rb16(pb);
codec->height = avio_rb16(pb);
codec->gop_size = avio_rb16(pb);
@@ -481,7 +497,7 @@ static int ffm_read_header(AVFormatContext *s)
}
/* get until end of block reached */
while ((avio_tell(pb) % ffm->packet_size) != 0)
while ((avio_tell(pb) % ffm->packet_size) != 0 && !pb->eof_reached)
avio_r8(pb);
/* init packet demux */
+1 -1
View File
@@ -489,7 +489,7 @@ static int flv_write_packet(AVFormatContext *s, AVPacket *pkt)
avio_w8(pb, FLV_TAG_TYPE_VIDEO);
flags = enc->codec_tag;
if (flags == 0) {
if (flags <= 0 || flags > 15) {
av_log(s, AV_LOG_ERROR,
"Video codec '%s' is not compatible with FLV\n",
avcodec_get_name(enc->codec_id));
+1 -1
View File
@@ -560,7 +560,7 @@ static int gxf_packet(AVFormatContext *s, AVPacket *pkt) {
}
static int gxf_seek(AVFormatContext *s, int stream_index, int64_t timestamp, int flags) {
int res = 0;
int64_t res = 0;
uint64_t pos;
uint64_t maxlen = 100 * 1024 * 1024;
AVStream *st = s->streams[0];
+1
View File
@@ -114,6 +114,7 @@ static int icecast_open(URLContext *h, const char *uri, int flags)
av_dict_set(&opt_dict, "method", s->legacy_icecast ? "SOURCE" : "PUT", 0);
av_dict_set(&opt_dict, "auth_type", "basic", 0);
av_dict_set(&opt_dict, "headers", headers, 0);
av_dict_set(&opt_dict, "chunked_post", "0", 0);
if (NOT_EMPTY(s->content_type))
av_dict_set(&opt_dict, "content_type", s->content_type, 0);
if (NOT_EMPTY(s->user_agent))
+1 -1
View File
@@ -359,7 +359,7 @@ static int idcin_read_seek(AVFormatContext *s, int stream_index,
IdcinDemuxContext *idcin = s->priv_data;
if (idcin->first_pkt_pos > 0) {
int ret = avio_seek(s->pb, idcin->first_pkt_pos, SEEK_SET);
int64_t ret = avio_seek(s->pb, idcin->first_pkt_pos, SEEK_SET);
if (ret < 0)
return ret;
ff_update_cur_dts(s, s->streams[idcin->video_stream_index], 0);
+8 -3
View File
@@ -2366,7 +2366,7 @@ static int mov_open_dref(AVIOContext **pb, const char *src, MOVDref *ref,
/* try relative path, we do not try the absolute because it can leak information about our
system to an attacker */
if (ref->nlvl_to > 0 && ref->nlvl_from > 0) {
char filename[1024];
char filename[1025];
const char *src_path;
int i, l;
@@ -2392,10 +2392,15 @@ static int mov_open_dref(AVIOContext **pb, const char *src, MOVDref *ref,
filename[src_path - src] = 0;
for (i = 1; i < ref->nlvl_from; i++)
av_strlcat(filename, "../", 1024);
av_strlcat(filename, "../", sizeof(filename));
av_strlcat(filename, ref->path + l + 1, 1024);
av_strlcat(filename, ref->path + l + 1, sizeof(filename));
if (!use_absolute_path)
if(strstr(ref->path + l + 1, "..") || ref->nlvl_from > 1)
return AVERROR(ENOENT);
if (strlen(filename) + 1 == sizeof(filename))
return AVERROR(ENOENT);
if (!avio_open2(pb, filename, AVIO_FLAG_READ, int_cb, NULL))
return 0;
}
+1 -1
View File
@@ -394,7 +394,7 @@ static int mv_read_packet(AVFormatContext *avctx, AVPacket *pkt)
AVStream *st = avctx->streams[mv->stream_index];
const AVIndexEntry *index;
int frame = mv->frame[mv->stream_index];
int ret;
int64_t ret;
uint64_t pos;
if (frame < st->nb_index_entries) {
+1 -1
View File
@@ -464,7 +464,7 @@ static int oma_read_seek(struct AVFormatContext *s,
int stream_index, int64_t timestamp, int flags)
{
OMAContext *oc = s->priv_data;
int err = ff_pcm_read_seek(s, stream_index, timestamp, flags);
int64_t err = ff_pcm_read_seek(s, stream_index, timestamp, flags);
if (!oc->encrypted)
return err;
+8
View File
@@ -44,6 +44,10 @@ typedef struct {
/* in ms */
#define BUFFER_DURATION 0
/* the header needs at most 7 + 4 + 12 B */
#define MAX_HEADER_SIZE (7 + 4 + 12)
/* UINT16_MAX is the maximal chunk size */
#define MAX_PACKET_SIZE (UINT16_MAX - MAX_HEADER_SIZE)
static void put_str(AVIOContext *s, const char *tag)
@@ -394,6 +398,10 @@ static int rm_write_video(AVFormatContext *s, const uint8_t *buf, int size, int
/* Well, I spent some time finding the meaning of these bits. I am
not sure I understood everything, but it works !! */
#if 1
if (size > MAX_PACKET_SIZE) {
av_log(s, AV_LOG_ERROR, "Muxing packets larger than 64 kB (%d) is not supported\n", size);
return AVERROR_PATCHWELCOME;
}
write_packet_header(s, stream, size + 7 + (size >= 0x4000)*4, key_frame);
/* bit 7: '1' if final packet of a frame converted in several packets */
avio_w8(pb, 0x81);
+1 -1
View File
@@ -261,7 +261,7 @@ static int vqf_read_seek(AVFormatContext *s,
{
VqfContext *c = s->priv_data;
AVStream *st;
int ret;
int64_t ret;
int64_t pos;
st = s->streams[stream_index];
+1 -1
View File
@@ -760,7 +760,7 @@ static int recover(WtvContext *wtv, uint64_t broken_pos)
int i;
for (i = 0; i < wtv->nb_index_entries; i++) {
if (wtv->index_entries[i].pos > broken_pos) {
int ret = avio_seek(pb, wtv->index_entries[i].pos, SEEK_SET);
int64_t ret = avio_seek(pb, wtv->index_entries[i].pos, SEEK_SET);
if (ret < 0)
return ret;
wtv->pts = wtv->index_entries[i].timestamp;
+6
View File
@@ -49,11 +49,17 @@
#elif HAVE_ARMV5TE
.arch armv5te
#endif
#if HAVE_AS_OBJECT_ARCH
ELF .object_arch armv4
#endif
#if HAVE_NEON
.fpu neon
ELF .eabi_attribute 10, 0 @ suppress Tag_FP_arch
ELF .eabi_attribute 12, 0 @ suppress Tag_Advanced_SIMD_arch
#elif HAVE_VFP
.fpu vfp
ELF .eabi_attribute 10, 0 @ suppress Tag_FP_arch
#endif
.syntax unified
+1
View File
@@ -49,6 +49,7 @@ static int flags, checked;
void av_force_cpu_flags(int arg){
if ( (arg & ( AV_CPU_FLAG_3DNOW |
AV_CPU_FLAG_3DNOWEXT |
AV_CPU_FLAG_MMXEXT |
AV_CPU_FLAG_SSE |
AV_CPU_FLAG_SSE2 |
AV_CPU_FLAG_SSE2SLOW |
+1 -1
View File
@@ -245,7 +245,7 @@ int av_image_check_sar(unsigned int w, unsigned int h, AVRational sar)
{
int64_t scaled_dim;
if (!sar.den)
if (sar.den <= 0 || sar.num < 0)
return AVERROR(EINVAL);
if (!sar.num || sar.num == sar.den)
+16 -6
View File
@@ -623,14 +623,24 @@ static av_cold int initFilter(int16_t **outFilter, int32_t **filterPos,
if ((*filterPos)[i] + filterSize > srcW) {
int shift = (*filterPos)[i] + FFMIN(filterSize - srcW, 0);
int64_t acc = 0;
// move filter coefficients right to compensate for filterPos
for (j = filterSize - 2; j >= 0; j--) {
int right = FFMIN(j + shift, filterSize - 1);
filter[i * filterSize + right] += filter[i * filterSize + j];
filter[i * filterSize + j] = 0;
for (j = filterSize - 1; j >= 0; j--) {
if ((*filterPos)[i] + j >= srcW) {
acc += filter[i * filterSize + j];
filter[i * filterSize + j] = 0;
}
}
for (j = filterSize - 1; j >= 0; j--) {
if (j < shift) {
filter[i * filterSize + j] = 0;
} else {
filter[i * filterSize + j] = filter[i * filterSize + j - shift];
}
}
(*filterPos)[i]-= shift;
filter[i * filterSize + srcW - 1 - (*filterPos)[i]] += acc;
}
}
@@ -1178,7 +1188,7 @@ av_cold int sws_init_context(SwsContext *c, SwsFilter *srcFilter,
c->chrDstW = FF_CEIL_RSHIFT(dstW, c->chrDstHSubSample);
c->chrDstH = FF_CEIL_RSHIFT(dstH, c->chrDstVSubSample);
FF_ALLOC_OR_GOTO(c, c->formatConvBuffer, FFALIGN(srcW*2+78, 16) * 2, fail);
FF_ALLOCZ_OR_GOTO(c, c->formatConvBuffer, FFALIGN(srcW*2+78, 16) * 2, fail);
c->srcBpc = 1 + desc_src->comp[0].depth_minus1;
if (c->srcBpc < 8)
+5 -5
View File
@@ -35,15 +35,15 @@
0, 33, 33, 1, 4295, 0xf71b0b38, S=1, 1024, 0xf351799f
0, 34, 34, 1, 2044, 0x5adcb93b, S=1, 1024, 0xf351799f
0, 35, 35, 1, 3212, 0xcf79eeed, S=1, 1024, 0xf351799f
0, 36, 36, 1, 2281, 0x68464d30, S=1, 1024, 0xf351799f
0, 36, 36, 1, 2292, 0xb4386334, S=1, 1024, 0xf351799f
0, 37, 37, 1, 3633, 0x0010992f, S=1, 1024, 0xf351799f
0, 38, 38, 1, 3552, 0x23697490, S=1, 1024, 0xf351799f
0, 39, 39, 1, 3690, 0x62afdbb8, S=1, 1024, 0xf351799f
0, 40, 40, 1, 1558, 0x7a13e53b, S=1, 1024, 0xf351799f
0, 41, 41, 1, 940, 0xb1b6cba2, S=1, 1024, 0xf351799f
0, 40, 40, 1, 1559, 0x5baef54a, S=1, 1024, 0xf351799f
0, 41, 41, 1, 954, 0xca75ca79, S=1, 1024, 0xf351799f
0, 42, 42, 1, 273, 0x3687799b, S=1, 1024, 0xf351799f
0, 43, 43, 1, 930, 0x29f3b0c4, S=1, 1024, 0xf351799f
0, 44, 44, 1, 271, 0xe7af807c, S=1, 1024, 0xf351799f
0, 44, 44, 1, 271, 0x305e8094, S=1, 1024, 0xf351799f
0, 45, 45, 1, 196, 0xf5ab51ee, S=1, 1024, 0xf351799f
0, 46, 46, 1, 4299, 0x67ec0d55, S=1, 1024, 0xf351799f
0, 47, 47, 1, 4895, 0xb394406c, S=1, 1024, 0xf351799f
@@ -56,7 +56,7 @@
0, 54, 54, 1, 5179, 0x860fc6a1, S=1, 1024, 0xf351799f
0, 55, 55, 1, 5046, 0xce9183d3, S=1, 1024, 0xf351799f
0, 56, 56, 1, 5140, 0xa6d7b9af, S=1, 1024, 0xf351799f
0, 57, 57, 1, 4289, 0xb415f717, S=1, 1024, 0xf351799f
0, 57, 57, 1, 4301, 0x03b6ef3f, S=1, 1024, 0xf351799f
0, 58, 58, 1, 5079, 0xa8d59e01, S=1, 1024, 0xf351799f
0, 59, 59, 1, 5284, 0xea34e3b3, S=1, 1024, 0xf351799f
0, 60, 60, 1, 5426, 0x556a15cd, S=1, 1024, 0xf351799f
+5 -5
View File
@@ -35,15 +35,15 @@
0, 33, 33, 1, 4295, 0xc1850a80, S=1, 1024, 0xcfc8799f
0, 34, 34, 1, 2044, 0x0440c072, S=1, 1024, 0xcfc8799f
0, 35, 35, 1, 3212, 0xe91af08f, S=1, 1024, 0xcfc8799f
0, 36, 36, 1, 2281, 0x6a414aa1, S=1, 1024, 0xcfc8799f
0, 36, 36, 1, 2292, 0x6765633e, S=1, 1024, 0xcfc8799f
0, 37, 37, 1, 3633, 0xac779aa3, S=1, 1024, 0xcfc8799f
0, 38, 38, 1, 3552, 0xed2c75b2, S=1, 1024, 0xcfc8799f
0, 39, 39, 1, 3690, 0x2020dd0d, S=1, 1024, 0xcfc8799f
0, 40, 40, 1, 1558, 0x2c14e4b2, S=1, 1024, 0xcfc8799f
0, 41, 41, 1, 940, 0x4927cd90, S=1, 1024, 0xcfc8799f
0, 40, 40, 1, 1559, 0x596ef330, S=1, 1024, 0xcfc8799f
0, 41, 41, 1, 954, 0xac12c9c5, S=1, 1024, 0xcfc8799f
0, 42, 42, 1, 273, 0x138c7831, S=1, 1024, 0xcfc8799f
0, 43, 43, 1, 930, 0xf1c3ae3f, S=1, 1024, 0xcfc8799f
0, 44, 44, 1, 271, 0x6d338044, S=1, 1024, 0xcfc8799f
0, 44, 44, 1, 271, 0x921a80af, S=1, 1024, 0xcfc8799f
0, 45, 45, 1, 196, 0xa5de5322, S=1, 1024, 0xcfc8799f
0, 46, 46, 1, 4299, 0x5bac0d86, S=1, 1024, 0xcfc8799f
0, 47, 47, 1, 4895, 0xc43639a6, S=1, 1024, 0xcfc8799f
@@ -56,7 +56,7 @@
0, 54, 54, 1, 5179, 0x97aac3a1, S=1, 1024, 0xcfc8799f
0, 55, 55, 1, 5046, 0x836a80cd, S=1, 1024, 0xcfc8799f
0, 56, 56, 1, 5140, 0xa725c1e7, S=1, 1024, 0xcfc8799f
0, 57, 57, 1, 4289, 0x7b3afbc0, S=1, 1024, 0xcfc8799f
0, 57, 57, 1, 4301, 0x0203f239, S=1, 1024, 0xcfc8799f
0, 58, 58, 1, 5079, 0xb2e7a2de, S=1, 1024, 0xcfc8799f
0, 59, 59, 1, 5284, 0xb757dfe1, S=1, 1024, 0xcfc8799f
0, 60, 60, 1, 5426, 0xf9f11e57, S=1, 1024, 0xcfc8799f