Commit graph

24504 commits

Author SHA1 Message Date
Michael Niedermayer
9c3d2cbb51 avformat/matroskadec: Fix infinite loop with bz decompression
The same check is added to zlib too, it seems not needed there though

Fixes: Infinite loop
Fixes: 43932/clusterfuzz-testcase-minimized-ffmpeg_dem_MATROSKA_fuzzer-6175167573786624

Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Reviewed-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2022-02-09 10:49:05 +01:00
Michael Niedermayer
948c262099 avformat/utils: keep chapter monotonicity on chapter updates
Updating a chapter with the same id does not break monotonicity
Fixes: Timeout
Fixes: 43727/clusterfuzz-testcase-minimized-ffmpeg_dem_MOV_fuzzer-4960623367159808

Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2022-02-09 10:26:35 +01:00
Gustav Grusell
e78d0810d1 avformat/hls: Implement support for using AVSEEK_FLAG_BACKWARD when seeking
Before, seeking in hls streams would always seek to the next keyframe
after the given timestamp. With this fix, if seeking in videostream and
AVSEEK_FLAG_BACKWARD is set, seeking will be to the first keyframe of
the segment containing the given timestamp. This fixes #7485.

Signed-off-by: Gustav Grusell <gustav.grusell@gmail.com>
2022-02-09 13:49:23 +08:00
Andreas Rheinhardt
70a90fb73e avcodec/internal.h: Move avpriv_find_start_code() to startcode.h
This is by definition the appropriate place for it.
Remove all the now unnecessary libavcodec/internal.h inclusions;
also remove other unnecessary headers from the affected files.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-02-08 06:22:14 +01:00
Andreas Rheinhardt
27f22f3383 all: Remove unnecessary libavcodec/internal.h inclusions
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-02-08 06:16:26 +01:00
Anton Khirnov
36117968ad lavf/async: switch to new FIFO API 2022-02-07 00:31:23 +01:00
Anton Khirnov
70a1774f1a lavf/udp: switch to new FIFO API 2022-02-07 00:31:23 +01:00
Anton Khirnov
5fe2c37734 lavf/swfenc: switch to new FIFO API 2022-02-07 00:31:23 +01:00
Anton Khirnov
ea511196a6 lavf/mpegenc: switch to new FIFO API 2022-02-07 00:31:23 +01:00
Anton Khirnov
60414afc9d lavf/dvenc: switch to new FIFO API 2022-02-07 00:31:23 +01:00
Anton Khirnov
7e2be84a94 lavf/dvenc: return an error on audio/video desync 2022-02-07 00:31:23 +01:00
Zhao Zhili
03afa12762 avformat/rtpproto: set ttl upper bound to 255
Also remove bogus millisecond reference from help text.

Signed-off-by: Marton Balint <cus@passwd.hu>
2022-02-06 23:04:59 +01:00
Zhao Zhili
9daac85da8 avformat/udp: set ttl upper bound to 255
Signed-off-by: Marton Balint <cus@passwd.hu>
2022-02-06 22:59:18 +01:00
Zane van Iperen
f14dbb4bf5
avformat/mxfdec: add avlanguage dependency
Reviewed-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
Signed-off-by: Zane van Iperen <zane@zanevaniperen.com>
2022-02-06 13:20:46 +10:00
Zane van Iperen
40766ae1da
avformat/imf: cosmetics
s/++i/i++/g

Signed-off-by: Zane van Iperen <zane@zanevaniperen.com>
2022-02-05 22:52:46 +10:00
Pierre-Anthony Lemieux
bec300f4e1
avformat/tests: add /imf to .gitignore
Signed-off-by: Zane van Iperen <zane@zanevaniperen.com>
2022-02-05 22:52:39 +10:00
James Almer
0ea87ebc19 avformat/demux: don't truncate the return value of ts_to_samples()
Signed-off-by: James Almer <jamrial@gmail.com>
2022-02-05 09:44:59 -03:00
James Almer
928e7c60cc avformat/demux: print skip_samples and discard_padding as unsigned values in debug log
It's the type they should be interpreted as in the AV_PKT_DATA_SKIP_SAMPLES side
data.

Signed-off-by: James Almer <jamrial@gmail.com>
2022-02-05 09:44:59 -03:00
James Almer
3b9bd63ad9 avformat/demux: don't propagate unsupported skip samples packet side data values
Should fix ticket #9622

Signed-off-by: James Almer <jamrial@gmail.com>
2022-02-05 09:44:59 -03:00
Marton Balint
8a9d3d3dec avformat/imf_cpl: do not use filesize when reading XML file
Similar to the earlier patch applied to imfdec.

Signed-off-by: Marton Balint <cus@passwd.hu>
2022-02-05 10:40:31 +01:00
Patrick Keroulas
00692139c9 avformat/rtpdec_rfc4175: fix interlace format
In previous state, a new frame was allocated on each timestamp step,
i.e. each frame/field transition. However, for interlace, a new frame
should be allocated on 1st field, completed with the 2nd and finally
freed.

This commit fixes the frame allocation and the detection of missing RTP
markers.

Signed-off-by: Patrick Keroulas <patrick.keroulas@radio-canada.ca>
Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
2022-02-05 11:40:40 +08:00
Peter Ross
cc5eb2e662 avformat/img2dec: increase probe score for GEM image fourcc variants
Signed-off-by: Peter Ross <pross@xvid.org>
2022-02-04 11:52:26 +11:00
Peter Ross
5903a4e321 avformat/img2dec: fix logic error in GEM Raster file probe
Use correct logic to express limits of the planes and pattern_size fields.

Fix ticket# 9605

Signed-off-by: Peter Ross <pross@xvid.org>
2022-02-04 11:52:26 +11:00
TianBo Zheng
d4a910b2c8 Add MKV tags for AVS2 and AVS3 codecs.
Signed-off-by: TianBo Zheng <naturalwalker@hotmail.com>

MKV codec mappings:
  V_AVS2 and V_AVS3 (https://github.com/ietf-wg-cellar/matroska-specification/blob/master/codec_specs.md)

Encoding tool:
  Ffmpeg with AVS2/AVS3 enabled: https://github.com/xatabhk/FFmpeg-avs2-avs3/releases
  Command line:

             ffmpeg -i xxxx.mp4 -vcodec avs2 -acodec copy xxxx_avs2.mkv
             ffmpeg -i xxxx.mp4 -vcodec avs2 -speed_level 4 -acodec copy xxxx_avs2.mkv`

Players:
  (1) Ffmpeg with avs2/avs3 enabled: (https://github.com/xatabhk/FFmpeg-avs2-avs3/releases):
    Command line:

        ffplay xxxx_avs2.mkv
    ffplay xxxx_avs3.mkv
  (2) VLC 3.0.x with AVS2/AVS3 enabled: https://github.com/xatabhk/vlc-3.0-avs2-avs3/releases
  (3) Mpc-hc 1.9.x with AVS2/AVS3 enabled: https://gitee.com/zhengtianbo/cavs-avs2-avs3_decoder_added_to_mpc_hc/releases

AVS2/AVS3 MKV samples:
  https://github.com/xatabhk/avs2-avs3-video-samples

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-02-03 05:07:44 +01:00
Michael Niedermayer
d8d9d506a3 avformat/mov: Check size before subtraction
Fixes: signed integer overflow: -9223372036854775808 - 8 cannot be represented in type 'long'
Fixes: 43542/clusterfuzz-testcase-minimized-ffmpeg_dem_MOV_fuzzer-5237670148702208

Found-by: continuous fuzzing process https://github.com/google/oss-fuzz/tree/master/projects/ffmpeg
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2022-02-01 16:50:27 +01:00
Andreas Rheinhardt
61cbfdc0a2 avformat/http: Fix double-free on error
av_dict_set() with AV_DICT_DONT_STRDUP_VAL takes ownership
of the string it is passed to as val; this includes freeing it
on error.

Fixes Coverity issue #1497468.

Reviewed-by: Eran Kornblau <eran.kornblau@kaltura.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-02-01 06:17:41 +01:00
erankor
f23d3a5f8f http: remove cache_redirect option
following 625ea2d, redirect caching is performed according to the http
response headers, there's no need to have it as an option -
always start from the original uri, and apply any redirects according
to the redirect_cache dictionary.

Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
2022-01-31 14:08:33 -05:00
Limin Wang
1530b3f566 avformat/dashdec: avoid calling strlen multiple times
Reviewed-by: Steven Liu <liuqi05@kuaishou.com>
Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
2022-01-30 13:26:35 +08:00
Limin Wang
c825de87c9 avformat/rtpdec: return value check for init_get_bits()
Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
2022-01-30 13:26:35 +08:00
Limin Wang
d9f05bea5c avformat/rtpdec: Fix negative missed packets in warning message
Signed-off-by: Limin Wang <lance.lmwang@gmail.com>
2022-01-30 13:26:35 +08:00
Andreas Rheinhardt
937bb6bbc1 avformat/matroskadec: Export rectangular projection as displaymatrix
This is the officially supported way to express rotations
and flips in Matroska.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-01-29 20:06:04 +01:00
Andreas Rheinhardt
ed18b8d79f avformat/hls: Remove redundant cast
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-01-21 16:47:38 +01:00
Andreas Rheinhardt
c24ee7c275 avformat/mux: Peek into the muxing queue for avoid_negative_ts
Peeking into the muxing queue can improve the estimate of
the lowest timestamp needed for avoid_negative_ts in case
the lowest timestamp is in a packet other than the first packet
to be muxed.
This fixes tickets #4536 and #5784 as well as the output from
the matroska-avoid-negative-ts FATE-test.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-01-21 16:47:38 +01:00
Andreas Rheinhardt
c602deb138 avformat/mux: Preserve sync even if later packet has negative ts
write_packet() has code to shift the packets timestamps
to make them nonnegative or even make them start at ts zero;
this code inspects every packet that is written and if a packet
with negative timestamp (whether this is dts or pts depends upon
another flag; basically: Matroska uses pts, everyone else dts)
is encountered, this is offset to make the timestamp zero.
All further packets will be offset accordingly (with the offset
converted according to the streams' timebases).

This is based around an assumption, namely that the timestamps
are indeed non-decreasing, so that the first packet with negative
timestamps is the first packet with timestamps. This assumption
is often fulfilled given that the default interleavement function
by default interleaves per dts; yet there are scenarios in which
it may not be fulfilled:
a) av_write_frame() instead of av_interleaved_write_frame() is used.
b) The audio_preload option is used.
c) When the timestamps that are made nonnegative/zero are pts
(i.e. with Matroska), because the packet with the smallest dts
is not necessarily the packet with the smallest pts.
d) Possibly with custom interleavement functions.
In these cases the relative sync of the first few packet(s) is offset
relative to the later packets. This contradicts the documentation
("When shifting is enabled, all output timestamps are shifted by
the same amount").

Therefore this commit changes this: As soon as the first packet
with valid timestamps is output, it is checked and recorded whether
the timestamps need to be shifted. Further packets are no longer
checked for needing to be offset; instead they are simply offset.
In the cases above this leads to packets with negative timestamps
(and the appropriate warnings) instead of desync. This will mostly
be fixed in the next commit.

This commit also factors handling the avoid_negative_ts stuff out
of write_packet() in order to be able to return immediately.

Tickets #4536 and #5784 as well as the matroska-avoid-negative-ts-test
are examples of c); as has been said, some timestamps are now negative,
yet the ref file update does not show it because ffmpeg.c sanitizes
the timestamps (-copyts disables it; ffprobe and mkvinfo also show
the original timestamps).

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-01-21 16:47:38 +01:00
Andreas Rheinhardt
f6d14b1297 avformat/avformat: Add AVFMT_AVOID_NEG_TS_DISABLED
And also don't use explicit constants in the movenc test.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-01-21 16:47:38 +01:00
Andreas Rheinhardt
5d5b62e595 avformat/mux: Remove assert based on faulty assumptions
This assert is based upon the wrong assumption that
the noninterleaved codepath is never used; if it is used,
max_interleave_delta is irrelevant. It furthermore
ignores audio_preload.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-01-21 16:45:43 +01:00
Andreas Rheinhardt
c8b11b28d1 avformat/mov: Fix endian-dependent parsing
MOVAtom.type is always read as a little-endian number
(despite MOV/ISOBMFF being big-endian).
Fixes the matroska-dovi-write-config8 FATE-test on big-endian
arches (which runs into the "index out of range" warning message).

Reviewed-by: Martin Storsjö <martin@martin.st>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-01-21 11:52:45 +01:00
Anton Khirnov
9e4693a1cb lavf/network: log ff_listen() errors to proper contexts rather than NULL 2022-01-21 09:25:05 +01:00
Anton Khirnov
d2519e8625 lavf/network: log ff_socket() errors to proper contexts rather than NULL 2022-01-21 09:25:05 +01:00
Anton Khirnov
93b4cc38b0 lavf/udp: log net errors to proper contexts rather than NULL 2022-01-21 09:25:05 +01:00
Andreas Rheinhardt
7512293cf9 avformat/matroskaenc: Fix writing AV_SPHERICAL_EQUIRECTANGULAR
According to the documentation, the ISOBMFF 'equi' box must
be present for equirectangular projections.

Reviewed-by: Hendrik Leppkes <h.leppkes@gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-01-20 18:31:59 +01:00
Andreas Rheinhardt
dd17c86aa1 avformat/matroskadec: Use correct type for field_order
It is unsigned in the spec and read from an uint64_t field.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-01-19 23:20:05 +01:00
Andreas Rheinhardt
b7a543707f avformat/imfdec: Use proper logcontext
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-01-19 16:50:46 +01:00
Andreas Rheinhardt
e3c2a97a6d avformat/matroskaenc: Write data directly into dynamic buffers
This avoids copying the data in small chunks (1024B) into
the dynamic buffer's small buffer before finally writing them
into the "big" buffer.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-01-19 12:25:13 +01:00
Andreas Rheinhardt
48ff1ba687 avformat/matroskaenc: Avoid repeated avio_tell()
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-01-19 12:24:50 +01:00
Andreas Rheinhardt
989e206900 avformat/matroskaenc: Reindentation
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-01-19 12:21:30 +01:00
Andreas Rheinhardt
cb592ae95f avformat/matroskaenc: Remove duplicated code for writing WebVTT subs
Up until now, the WebM variant of WebVTT subtitles has been handled
specially: It had its own function to write it, because the data
had to be reformatted before writing. But given that other codecs
also need reformatting, this is no good reason to also duplicate the
generic stuff for writing Block(Group)s.

This commit therefore uses an ordinary reformatting function for
this task; writing WebVTT subtitles now uses the generic code
and therefore automatically uses the least amount of bytes
for its BlockGroup length fields whereas the earlier code used
an overestimation for the length of the Duration element.
This is the reason for the changes to the webm-webvtt-remux FATE-test.

(This commit does not implement support for Matroska's way of muxing
WebVTT; it also does not add checks to ensure that WebM-style subtitles
don't get muxed in Matroska. But the function for reformatting gets a
webm prefix to indicate that this is for WebM.)

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-01-19 12:18:17 +01:00
Andreas Rheinhardt
9f7e0b37ff avformat/matroskaenc: Don't waste bytes on BlockGroup length fields
This commit uses the new EbmlWriter API to write the length fields
of the BlockGroup and its descendants that are themselves Master
elements (namely BlockAdditions and BlockMore) on the least amount of
bytes.

This fixes regressions introduced when the special code for writing
general subtitles was removed. Accordingly, the binsub-mksenc and
matroska-zero-length-block FATE-tests have now been reverted back
to their old state again; the advantages of this approach are evident
with the matroska-vp8-alpha-remux test which up until now wrote
all the length fields of all BlockGroups, BlockAdditions and BlockMore
on eight bytes.

Using the EbmlWriter API also allowed to improve locality in
mkv_write_block(): E.g. both DiscardPadding as well as the
BlockAdditional side-data are now directly used to add elements
to the writer whereas the earlier code had to first check
for whether a BlockGroup should be used and then check again
(after the place where a BlockGroup would be opened if one were
used) for whether there is DiscardPadding or BlockAdditional
side-data to write.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-01-19 12:18:14 +01:00
Andreas Rheinhardt
abbc111067 avformat/matroskaenc: Redo applying ProRes offset
Add a field to mkv_track that is set to the offset instead
of checking for whether the track is ProRes when writing
the Block. This makes writing the Block independent
of the AVCodecParameters.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-01-19 12:12:56 +01:00
Andreas Rheinhardt
6a9830f503 avformat/matroskaenc: Pass more parameters explicitly to mkv_write_block
This e.g. stops recalculating ts again.
Also pass the AVFormatContext as pointer to void as it is only used
for logging.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-01-19 12:12:15 +01:00