* commit '1dc19729e92a96620000e09eba8e58cb458c9486':
rtpdec_asf: Don't free the payload context in the .close function
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This fixes an oversight in 96084251, in a refactoring done on top
of Gilles' original patch.
Pointed out by Gilles Chanteperdrix.
Signed-off-by: Martin Storsjö <martin@martin.st>
Fixes the duration field of the OpenDML master index "indx" chunk to
contain the number of samples instead of the number of packets for
(linear/PCM) audio streams.
This matches the OpenDML V1.02 standard text which states that the
duration field shall contain "time span in stream ticks".
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '0af3b65880573aa9b3375362eaab4f84140c7dde':
asf: do not export XMP metadata by default
Conflicts:
libavformat/asfdec.c
libavformat/version.h
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Similarly to what has been done for MOV, display XMP metadata only when
users explicitly require it.
The Extensible Metadata Platform tag can contain various kind of data
which are not strictly related to the video file, such as history of
edits and saves from the project file.
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
Next commit will revert the PTS seeking so this is not needed anymore
This reverts commit 38e641a060.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
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>
This reverts commit 4abfa387b8.
This commit broke playback of fragmented mp4 files with b-frames.
While investigating this, it turned out that the general framework
isn't ready for a PTS-based index yet. Revert this change until
a better thought out solution is in place.
Signed-off-by: Martin Storsjö <martin@martin.st>
Commit 96084251e5 introduced a change in
the parser implementation which broke it. Restore the original
implementation.
Signed-off-by: Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This reverts commit 26524e3581.
If we want the T.140 codec to have the AV_CODEC_ID_TEXT codec id,
its type needs to be AVMEDIA_TYPE_SUBTITLE, so, keep interpreting
the text media type as AVMEDIA_TYPE_SUBTITLE.
Signed-off-by: Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This makes more sense than mapping to AV_CODEC_ID_SUBRIP. Nothing
indicates that a T.140 track contains subrip sub-titles.
Signed-off-by: Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '4f6cd883f06f7893a2b60a41e7a4f8ae633dac2f':
rtpenc: Don't set max_frames_per_packet based on the packet frame size or frame rate
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'bde2bba45c2f2df27a8534028bda09a6e7f835e2':
rtpenc: Restructure if statements in packetizers to simplify adding more conditions
Conflicts:
libavformat/rtpenc_xiph.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'f8c01257f93ceda3e03bc4e540a51022d1e2bff2':
rtpenc: Always do the default initialization regardless of codecs
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'd16c8d28d4e2fca3af1054ffbf635c8cee755fc8':
rtpenc_aac: Use AV_WB16 instead of manual bitshifts
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '9c9b0218e85fcd969308632f75af48a4ce229541':
rtpenc_aac: Merge a definition with a declaration
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '1fc64e2e07787bbca82a72c146588e850e6d098a':
rtpenc: Write conditional statements on separate lines
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '0662440b991361fdb5e732712d997a73e4692e34':
rtpenc_aac: Set a default value for max_frames_per_packet at init
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '12b3459979f5ea6481660cd2c99a0381e2b5ba37':
rtpenc_amr: Use s->num_frames instead of s->buf_ptr - s->buf
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'b9d2d6843a49f9df1d1ae1afe817d9b48c445919':
tls: Pass AVOptions dictionaries through to the chained protocol
Conflicts:
libavformat/tls.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'e14f98c62fdf8744b07419314095d1b3248cce75':
tcp: Clarify the units for the timeout avoptions
Conflicts:
libavformat/tcp.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Instead check the timestamps while muxing, to avoid buffering a
too long timestamp range into one single packet.
This makes the AMR and AAC packetization slightly less efficient,
since we set a possibly unnecessarily high max_frames_per_packet.
(These packetizers end up doing a memmove of the TOC bytes if
sending a packet before max_frames_per_packet is achieved, and
we end up setting max_frames_per_packet to a value that should
be high enough for most uses.)
All packetizers that use max_frames_per_packet now set it either
to a default value, or to a value calculated based on other
parameters, so none of them rely on the previous default setting.
For iLBC, copy one frame at a time, to allow checking the timestamp
range for each of them - basically doing potentially multiple
loops to simplify the code instead of trying to calculate the
number of frames to buffer while honoring s1->max_delay.
This is in preparation for reducing the coupling between libavformat
and libavcodec, by not having the muxers use the encoder field
frame_size (which may not be available during e.g. stream copy).
Signed-off-by: Martin Storsjö <martin@martin.st>
Factorize out the s->num_frames check at the start of the if statements,
simplifying adding more alternative causes for sending the buffered
frames.
Signed-off-by: Martin Storsjö <martin@martin.st>
This avoids having to jump to the defaultcase in the switch. Manually
override the stream time base back to 90 kHz for the few audio codecs
that don't use the sample rate as time base (mp2, mp3).
Signed-off-by: Martin Storsjö <martin@martin.st>
This doesn't fix any bug, but makes the code simpler for later
patches, and more straightforward to read as is.
Signed-off-by: Martin Storsjö <martin@martin.st>
After sending a fragmented frame, len (s->buf_ptr - s->buf) isn't
zero, while s->num_frames is zero as intended. Using s->num_frames
makes it work as intended, and is less convoluted than keeping track
of (resetting) s->buf_ptr.
This avoids sending stray data after sending a fragmented aac packet.
CC: libav-stable@libav.org
Signed-off-by: Martin Storsjö <martin@martin.st>
Don't prefix them ffio_url, which is misleading, sounding too
much like the urlprotocol layer (like ffurl_*).
Signed-off-by: Martin Storsjö <martin@martin.st>
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>
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>
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>
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>
This assumes CBR (which is true for all samples i have)
Previous version reviewed by: Oleksij Rempel <linux@rempel-privat.de>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Fixes out of array read
Fixes: asan_heap-oob_ae74b5_3610_cov_1739568095_test.3g2
Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '8e32b1f0963d01d4f5d4803eb721f162e0d58d9a':
libavformat: Use ffio_free_dyn_buf where applicable
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '8a273a746061a112e5e35066a8fd8e146d821a62':
avio: Add an internal utility function for freeing dynamic buffers
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '078d43e23a7a3d64aafee8a58b380d3e139b3020':
rtpdec: Free depacketizers if the init function failed
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'bb4a310bb85f43e62240145a656b1e5285b14239':
rtpdec: Don't free the payload context in the .free function
Conflicts:
libavformat/rtpdec_latm.c
libavformat/rtpdec_mpeg4.c
libavformat/rtpdec_mpegts.c
libavformat/rtpdec_xiph.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '78791c086bcaf9eb084c27555b31fea8bbb7624a':
rtpdec: Use .init instead of .alloc to set default values
Conflicts:
libavformat/rdt.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '3567b91e49c6ae101c9a35c90f46b8ad9890ac15':
rtpdec_hevc: Share the implementation of fragmented packets with h264
Conflicts:
libavformat/rtpdec_h264.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'f3449062a8d100ac4f703647336c32b126aa99f1':
rtpdec_hevc: Reduce indentation level by returning early on errors
Conflicts:
libavformat/rtpdec_hevc.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '8633fb47db2ec39eb8bd1bd65302af75a94ff5d0':
rtpdec_hevc: Share the implementation of parsing a=framesize with h264
Conflicts:
libavformat/rtpdec_h264.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '5956f489d0452ff6dea6b6b81b4fa8e596fc5684':
rtpdec_hevc: Add asterisks at the start of each long comment line
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '5d8cae45737bed6239bd6b6e0698802dbe1463c8':
rtpdec: Get rid of all trivial .alloc/.free functions
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'e72605f80bf5cbe32053a554ccc137e0a99cf3dd':
rtpdec: Allow allocating and freeing the private data without explicit functions
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'b7a4c319fda22aa91ce29692d728ec6103b514f6':
rtpdec: Allow setting the need_parsing field in RTPDynamicProtocolHandler
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'b651c9139e1ab222d5aab9151dcd7d6e40e49885':
rtpdec_mpa_robust: Move .enc_name to the start of the struct
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '353b492d0f2a21ae8eb829db1ac01b54b2a4d202':
rtpdec: Change enc_name to a pointer instead of a fixed-size buffer
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Many of these functions were named foo_free_context, and since
the functions no longer should free the context itself, only
allocated elements within it, the previous naming was slightly
misleading.
Signed-off-by: Martin Storsjö <martin@martin.st>
This is different from how it is handled in codecs/demuxers/muxers
though (where the close function isn't called if the open function
failed), but since the number of depacketizers that have an .init
function is quite limited, this is easy to change.
The main point is that if the init function failed, we shouldn't
try to use that depacketizer at all - this makes sure that the
parse function doesn't need to check for the things that were
initialized in the init function.
Signed-off-by: Martin Storsjö <martin@martin.st>
This makes it more consistent with depacketizers that don't have any
.free function at all, where the payload context is freed by the
surrounding framework. Always free the context in the surrounding
framework, having the individual depacketizers only free any data
they've specifically allocated themselves.
This is similar to how this works for demuxer/muxers/codecs - a
component shouldn't free the priv_data that the framework has
allocated for it.
Signed-off-by: Martin Storsjö <martin@martin.st>
* commit '74d318f138f2a3f1b2fe81aea826d80d1e60f54c':
rtsp: Fix the indentation of a linewrapped statement
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '26524e358147aade6e9dd18fff42d61b966bbc70':
rtsp: Interpret the text media type as AVMEDIA_TYPE_DATA
See: afb0e5a810
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Using the copy codec ACLR atoms where incorrectly written
During the creation of the ACLR atom we are assuming the vos_data
contains the DNxHD header. This change makes this explicit and
ensures we don't over write the stream with the extra_data.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
They share a great deal of common structure; only a few minor
bits in the headers differ.
This also fixes an off-by-one in sending of the last fragment
of large HEVC nals (where it previously sent len+2 bytes, even
if it should have been len+RTP_HEVC_HEADERS_SIZE aka len+3).
Signed-off-by: Martin Storsjö <martin@martin.st>
This allows getting rid of quite a bit of boilerplate in depacketizers.
The default value (initializing need_parsing to 0, aka
AVSTREAM_PARSE_NONE) is the same as it is initialized to by default
in AVStream.
Signed-off-by: Martin Storsjö <martin@martin.st>
Fixes the following link error:
nutdec.c:(.text+0x2d47): undefined reference to `ff_codec_movvideo_tags'
isom.c:(.text+0x332): undefined reference to `avpriv_mpeg4audio_get_config'
isom.c:(.text+0x39e): undefined reference to `avpriv_mpa_freq_tab'
* commit 'cdcc370293a159c321e41af7f0eef141c62d698d':
rtsp: punch holes again after pause
See: 22bb5bd7a3
Merged-by: Michael Niedermayer <michaelni@gmx.at>
When a client behind a NAT issues a pause command, and stay paused for a
long time, the router may stop the RTP/RTCP port redirection. Resend the
hole punching packets before each PLAY command to cause the router to
restart the port redirection in that case.
Move the existing code for sending the packets from the SETUP phase
to the PLAY phase.
Signed-off-by: Martin Storsjö <martin@martin.st>
* commit 'a388e72d1a6b0888cc1591cb699f61a9c1089cf4':
rtpenc_hevc: Aggregate multiple NAL units into one RTP packet, if possible
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'e2220e734f3d01145ef9aefbd7b6ff29a89ae159':
rtpenc_h264: Aggregate multiple NAL units into one RTP packet, if possible
Merged-by: Michael Niedermayer <michaelni@gmx.at>
When a client behind a NAT issues a pause command, and stay paused for a
long time, the router may stop the RTP/RTCP port redirection. Resend the
hole punching packets after each PLAY command to cause the router to
restart the port redirection in that case.
Signed-off-by: Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'ff394ca087d41941d2157e7a4e356e3ad312494e':
rtpdec_h264: Add a missing closing paren in a log message
Merged-by: Michael Niedermayer <michaelni@gmx.at>
When receiving an RTCP packet, the difference between the last RTCP
timestamp and the base timestamp may be negative. As these timestamps
are of the uint32_t type, the result becomes a large integer. Cast
the difference to int32_t to avoid this issue.
The result of this issue is very large start times for RTSP
streams, and difficulty to restart correctly after a pause.
Signed-off-by: Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org>
Signed-off-by: Martin Storsjö <martin@martin.st>
When receiving an RTCP packet, the difference between the last RTCP
timestamp and the base timestamp may be negative. As these timestamps
are of the uint32_t type, the result becomes a large integer. Cast
the difference to int32_t to avoid this issue.
The result of this issue is very large start times for RTSP
streams, and difficulty to restart correctly after a pause.
Signed-off-by: Gilles Chanteperdrix <gilles.chanteperdrix@xenomai.org>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '10e2d8b5562d8729e4eefbcec63a11eb8a0c502c':
rtpdec_hevc: Use a shared function for parsing parameter sets
Merged-by: Michael Niedermayer <michaelni@gmx.at>
ffm encoder fails when codec is not found.
It may happen when stream is being copied.
This commit allows to store such stream and provides
backward compatibility with version prior 2.5 release.
fixes#4266
Signed-off-by: Lukasz Marek <lukasz.m.luki2@gmail.com>
* commit '176903ce833ce7469f411640e9748a0d549b5285':
rtpdec_h264: Return immediately on errors in h264_handle_packet_stap_a
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '7650caf013f45ebebf128855735a0c6350836ea4':
rtpdec_h264: Use av_realloc instead of av_malloc+mempcy
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '8bdbf49c6f4d9473183a3c45ec70d611eb6183cd':
rtpdec_h264: Include the right header for AV_RB16
Merged-by: Michael Niedermayer <michaelni@gmx.at>
If src_len is too small for nal_size, we already print a warning
above, and the next step is to check the while loop condition
anyway, so this one serves no purpose.
Signed-off-by: Martin Storsjö <martin@martin.st>
Previously, errors were only logged but the code kept on trying,
and never actually returning the error as a return value.
Signed-off-by: Martin Storsjö <martin@martin.st>
Including libavcodec/get_bits.h is superfluous for AV_RB16 - nothing
in this file uses any actual bitstream reader.
Signed-off-by: Martin Storsjö <martin@martin.st>
This allows the output to be used with stream copy, which discards
packet from the start until the first keyframe.
Signed-off-by: Martin Storsjö <martin@martin.st>
Outputting DNxHD into .mov containers 'corrupts' following atoms until end of stsd
ffmpeg and qtdump could not decode pasp/colr atoms in the files made by ffmpeg,
when outputting DNxHD due to the incorrect padding placement. Now we add the
padding in the correct place
Tidy up FATE changes due to padding changes.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
On input ACLR will be used to set colour range no matter which codec
it is associated with.
No change for when it will be output.
Rework mov_read_extradata function to allow detection of truncated
atom reads by callers.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '195942ed9b9b563ec86d34b73aa2c1ee8715d59d':
riff: Support QT RLE Animation in avi ('rle ' FourCC)
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '5dc47a2bd52e375ed742c45d08356b45098f458d':
matroskaenc: Validate chapter start and end times
Conflicts:
libavformat/matroskaenc.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
During remuxing avcodec_copy_context() is discouraged as certain fields
(such as codec_tag) could reflect invalid values between input and
output contextes.
Not allocating the pls->ctx will crash in libavformat/hls.c:1410, where
it tries to dereference the field.
Sample: http://ec24.rtp.pt/liverepeater/rtpn.smil/playlist.m3u8
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
The new mov code uses a temporally non sorted index since 4abfa387b8
and can thus no longer be filled with av_add_index_entry() which expects the index to be sorted.
Reverting 4abfa387b8 and this commit would be
a alternative fix as would be various other options.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '53367b34e1156614e82ef7af888928f322566f88':
rtp: h264: Drop the asserts
Conflicts:
libavformat/rtpdec_h264.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'f0a87479960ce000f23f2beaf474707797b4b0d0':
rtp: h264: Move STAP-A NAL parsing to a function
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'a9a0b8d6c14ece1b4698c6ede9227aca980f6c5b':
rtp: h264: Move parse_sprop_parameter_sets parsing to a function
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'b8df0b71c525e9fc9fbee790d093bae3aa62035c':
rtp: h264: Move profile_level_id parsing to a function
Merged-by: Michael Niedermayer <michaelni@gmx.at>
CTS-based seek is reasonable since player requests frames in output order
not coded order.
This change fixes seek to a keyframe within consecutive keyframes.
Let's say P[0|-1] and P[1|0], here x and y inside [x|y] are PTS and DTS
respectively, and both two frames are a keyframe. If you try to seek on
PTS=0, i.e. P[0|-1], you'll get P[1|0] if the demuxer is DTS based. This
is obviously undesirable.
Signed-off-by: Martin Storsjö <martin@martin.st>
Just because the user requested the seek index to be ignored, we can't
just skip essential headers. At least tags are often located at the end
of the file, and the old code simply ignored the seekhead for all
elements, not just the cue index. Also, it looks like it used the index
even if IGNIDX was set if the cue index was located in the beginning of
the file.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
In particular, this reads chained seekheads. This makes seeking faster
in files which have the index indirectly linked through 2 seekheads.
As a side-effect, this warns when reading level-1 (toplevel) elements
multiple times (other than seekheads, clusters, and void/crc). Such
elements are not valid and likely break everything.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '1509c018bd5b054a2354e20021ccbac9c934d213':
mpegts: relax restrictions on matching the packet start in read_header
Conflicts:
libavformat/mpegts.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
analyze() is currently called both when probing and from read_header().
It determines the packet start by looking for the sync byte, followed by
unset Transport Error Indicator and valid adaptation_field_control.
This makes sense to do when probing, but once we already know the format
is MPEG-TS, it is counterproductive to be so strict -- e.g. in some
files the TEI might be set and analyze() might get called with a smaller
buffer than the one used for probing, resulting in a failure.
Avid prefers mpeg range [16-235] by default this change brings
ffmpeg into line with that. To obtain the old behaviour use
'-color_range jpeg' on the command line prior to the ouput
filename.
Signed-off-by: Kevin Wheatley <kevin.j.wheatley@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Matroska is an extensible format - unknown elements must be expected. It
shouldn't complain about such elements to the user either; it'll just
generate noise. The "error_recognition & AV_EF_EXPLODE" is completely,
wrong why would it explode on valid files?
It's still useful for debugging, so the message is left in place with a
higher log level.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Nothing uses it, and it provides no public API.
Archeological finds:
Commit 101036adb9 added the API.
Commit a8dd8dc6e9 made mpegts.c use it.
Commit af8aae3fa3 disabled it by default in mpegts.c.
Commit ae2bb52cd2 removed all uses of this from mpegts.c.
Signed-off-by: Anton Khirnov <anton@khirnov.net>
Reviewed-by: Reimar Döffinger <Reimar.Doeffinger@gmx.de>
Reviewed-by: Carl Eugen Hoyos <cehoyos@ag.or.at>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
ff_avc_write_annexb_extradata() allocates extradata, but don't add
FF_INPUT_BUFFER_PADDING_SIZE value
Signed-off-by: Lukasz Marek <lukasz.m.luki2@gmail.com>
This could overflow and crash at least on 32 bit systems.
Reviewed-by: Reimar Döffinger <Reimar.Doeffinger@gmx.de>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This can lead to an endless loop by seeking back a few bytes after each
attempted chunk read. Assuming negative sizes are always invalid, this
is easy to fix. Other code in this demuxer treats negative sizes as
invalid as well.
Fixes ticket #4262.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'e3528d2a7bf29ba148d7ac1678552ce0089cd14f':
mov: Implement parsing of the "HandlerName" from the MP4 HDLR atom
Conflicts:
libavformat/mov.c
See: b76bc01034
Merged-by: Michael Niedermayer <michaelni@gmx.at>
industrial cameras usually mark the trigger frame as frame number 0
all frames saved before trigger frame receive a negative sequence number
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This atom typically is used for a track title. The handler name is stored
as a Pascal string in the QT specs (first byte is the length of the string),
so do not export it.
A second length check based on the first character is added to avoid
overwriting an already specified handler_name (it happens with YouTube
videos for instance, the handler_name get masked), or specifying an
empty string metadata.
The Pascal string fix and the second length check are written
by Clément Bœsch <clement.boesch@smartjog.com>.
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
av_add_index_entry() can fail, for example because the parameters are
invalid, or because memory allocation fails. Check this; it can actually
happen with corrupted files.
The second hunk is just for robustness. Just in case functions like
ff_reduce_index() remove entries. (Not sure if this can actually
happen.)
Fixes ticket #4294.
Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This adds an option to set the service type in mpegts as defined in ETSI 300 468.
I added what I believe are the most useful service types as pre defined values,
the others can be sent by using their hexdecimal form directly (e.g. -mpegts_service_type digital_radio, -mpegts_service_type 0x07).
I've been using this patch in order to pipe internet radio stream (originally as HLS/m3u8) from ffmpeg to tvheadend,
when the service type set right tvheadend recognize the mpegts stream as a radio channel.
The patch in its original form was written by linuxstb from freenode's hts channel which allowed me pushing it upstream.
This close issue 4118.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'f726fc21ef76a8ba3445448066f7b2a687fbca16':
ogg: Provide an option to offset the serial number
Conflicts:
libavformat/oggenc.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '3c18a7b18807de81566381a1bcbe9f6103c0296b':
avio: Do not consider the end-of-buffer position valid
Conflicts:
libavformat/aviobuf.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Trigger a refill if the seek action moves the pointer
at the end of the buffer.
Before this patch the read action following the seek would trigger
the refill, while write action would write outside the buffer.
In the Libav codebase few muxers seek forward outside of what
already has been written so it is quite unlikely to experience
the problem with the default buffer size.
CC: libav-stable@libav.org
* commit '4227e4fe7443733fb906f6fb6c265105e8269c74':
lavf: add a convenience function for adding side data to a stream
Conflicts:
libavformat/internal.h
libavformat/replaygain.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '80a11de7dca315505bf203ce9c8c016e71724fd2':
nutenc: do not use has_b_frames
Conflicts:
libavformat/nutenc.c
tests/ref/lavf/nut
tests/ref/seek/lavf-nut
Mostly not merged, this is simply not correct
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'f771b3ab5d3c0b763ee356152be550f4121babd0':
avidec: do not export stream_codec_tag
Conflicts:
libavformat/avidec.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
The frames are said to contain a higher bit-depth but
users report that our decoder shows visually correct output.
Requested by forum user gregba and Christoph Gerstbauer.
* commit '7915e6741dbe1cf3a8781cead3e68a7666de14f4':
hlsproto: Properly close avio buffer in case of error
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This partially reverts cf70ba37ba, since
it didn't take into account when rotation is 0, but there is another
valid operation (eg. translation) in the matrix.
Found-by: Michael Niedermayer <michaelni@gmx.at>
When the timecode value is in counter mode then it is important to use
the timescale and frameduration to calculate the timecode fps.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '9108967513fcaff3d55514a7bca4c9fbba128c71':
rtspdec: Consistently use rtsp_hd_out for writing
Merged-by: Michael Niedermayer <michaelni@gmx.at>
In addition to .h264, .264 is also commonly used by people to name raw H.264
streams. Enables automatic recognition of the h264 format for the .264
extension.
Signed-off-by: Werner Robitza <werner.robitza@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '3a724a7f3ba7fa766c6a6f0924a15cc742031b8d':
dashenc: Use inttypes.h macros for format strings instead of %lld
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This goto wasn't necessary originally, but it should have been
added when the write_manifest call was added in 8e276378.
CC: libav-stable@libav.org
Signed-off-by: Martin Storsjö <martin@martin.st>
* commit '024e5a2d5ff8a94adce48abb15ce2fb471f9d18e':
rtmppkt: Repeat the full 32 bit timestamp for chunking continuation packets
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '932788be5af8dee062c77851b573ea47dd6d047a':
id3v2: add names to the parameters of ID3v2EMFunc.read
Conflicts:
libavformat/id3v2.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '8809c974a3fb51f96e498a5556a4a5bbacc581ce':
id3v2: constify the 'tag' parameter to special metadata parsing callback
Conflicts:
libavformat/id3v2.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This fixes sending chunked packets (packets larger than the output
chunk size, which often can be e.g. 4096 bytes) with a timestamp delta
(or absolute timstamp, if it's a timestamp step backwards, or the
first packet of the stream) larger than 0xffffffff.
The RTMP spec explicitly says (in section 5.3.1.3.) that packets of
type 3 (continuation packets) should include this field, if the
previous non-continuation packet had it included.
The receiving code handles these packets correctly.
Pointed out by Cheolho Park.
CC: libav-stable@libav.org
Signed-off-by: Martin Storsjö <martin@martin.st>
The original code was intended purely for rotation == 0
In cf70ba37ba the condition was
changed to use it only for rotation != 0
which broke the cases for which it was intended to be used
as well as breaking cases for which it was not intended to be
used.
This changes the code so it could work for the more general
case and fixes the regressions
If you have sample files that are not handled correctly
please open tickets or mail me!
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'cf70ba37ba74089a18295b29e77dead0a3222c9e':
mov: Check angle rather than full matrix when updating SAR
Merged-by: Michael Niedermayer <michaelni@gmx.at>
When the display matrix is not the identity one, but the rotation angle
is zero, there is no need to update the sample aspect ratio.
Otherwise, it is possible to obtain negative values which interferes
with transcoding in later stages. This kind of behaviour is reproducible
on mov files with "major_brand: MSNV".
CC: libav-stable@libav.org
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
AVInputFormat.read_close is not called if AVInputFormat.read_header
fails, so this needs to be handled separately.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '51da7d02748cc54b7d009115e76efa940b99a8ef':
matroskaenc: refuse to write AAC without valid extradata
Merged-by: Michael Niedermayer <michaelni@gmx.at>
A failure in segment_end() or segment_start() would lead to freeing
a dangling pointer and in general further calls to seg_write_packet()
or to seg_write_trailer() would have the same faulty behaviour.
CC: libav-stable@libav.org
Reported-By: luodalongde@gmail.com
I think this turned out pretty terrible. There's no good way to add new
custom tags that write to AVFormatContext->metadata.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
The previous code assumed if an atom was marked with a 64-bit
size extension, it actually had that data available. The new
code verfies there's enough data in the atom for this to be
done.
Failure to verify causes total_size > atom.size which will
result in negative size calculations later on.
Found-by: Paul Mehta <paul@paulmehta.com>
Signed-off-by: Dale Curtis <dalecurtis@chromium.org>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Under abnormal conditions the item_count may exceed the max
allocation size on 32-bit systems, this causes the allocated
size to overflow and become too small for the given count.
Additionally, if av_reallocp() fails its allocation, the
fragment_index_count is not correctly decremented.
Ensuring further havoc may be wrought, the error code for
read_tfra() is not checked upon return.
Found-by: Paul Mehta <paul@paulmehta.com>
positive return code and use of _array functions by commiter
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
ID3v1 fields have a fixed size, and they are padded either with zeros,
or with spaces. Handle the latter case, instead of putting strings with
trailing spaces into the AVDictionary.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '46808fdf04ab113df374157b90b506eb3110daf2':
movenc: Enable editlists by default if delay_moov is enabled
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This comment can be traced back to the initial commit from 2001,
and it seemed to be misleading/incorect already back then. (It
was used for normal, non-raw file formats already then.)
Signed-off-by: Martin Storsjö <martin@martin.st>
* commit 'b3b0b35db2f3b61bf2f0f4fa85f5b6267d83c8fe':
movenc: Get rid of a hack for updating the dvc1 atom
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '847bf5988fec1d3e65c1d8cf0cdb8caf0cfd0c1b':
movenc: Add an option for delaying writing the moov with empty_moov
Conflicts:
libavformat/movenc.c
libavformat/version.h
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'c725faebda9a516766d94c33b07972ab0f70cf93':
movenc: Use start_dts/cts instead of cluster[0] for writing edit lists
Conflicts:
libavformat/movenc.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '724cbea7193945fe5a5b4dea8ede344803572844':
movenc: Remove an unnecessary condition when flushing fragments
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '355d01a1bf55297b1d1f04e4bfbf0ddc93b6247e':
movenc: Factorize writing ftyp and other identification tags to a separate function
Conflicts:
libavformat/movenc.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This should be more correct. This also should give more sensible
switching between video streams with different amount of b-frame
delay.
The current dash.js release (1.2.0) fails to start playback of
such files from the start (if the start pts is > 0), but this has
been fixed in the current git version of dash.js.
Also enable the use of edit lists, so that streams in many cases
start at pts=0.
Signed-off-by: Martin Storsjö <martin@martin.st>
Use the more generic approach with the delay_moov flag, instead of
having a update mechanism specific to this one single atom.
Signed-off-by: Martin Storsjö <martin@martin.st>
This delays writing the moov until the first fragment is written,
or can be flushed by the caller explicitly when wanted. If the first
sample in all streams is available at this point, we can write
a proper editlist at this point, allowing streams to start at
something else than dts=0. For AC3 and DNXHD, a packet is
needed in order to write the moov header properly.
This isn't added to the normal behaviour for empty_moov, since
the behaviour that ftyp+moov is written during avformat_write_header
would be changed. Callers that split the output stream into header+segments
(either by flushing manually, with the custom_frag flag set, or by
just differentiating between data written during avformat_write_header
and the rest) will need to be adjusted to take this option into use.
For handling streams that start at something else than dts=0, an
alternative would be to use different kinds of heuristics for
guessing the start dts (using AVCodecContext delay or has_b_frames
together with the frame rate), but this is not reliable and doesn't
necessarily work well with stream copy, and wouldn't work for getting
the right initialization data for AC3 or DNXHD either.
Signed-off-by: Martin Storsjö <martin@martin.st>
If fragments == 0 it means we haven't written any moov atom yet.
If the empty_moov flag is set, we already have written an empty moov
atom at startup. Thus, the check for empty_moov is redundant.
This is in preparation for allowing writing the moov atom later,
even when using the empty moov flag.
Signed-off-by: Martin Storsjö <martin@martin.st>
Such data streams (which then contain no other packets except the faulty one)
confuse some user applications, like VLC
Works around vlcticket 12389
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'b91a5757fcbf723da99b05b298a6f820271dbc2b':
dashenc: Fix writing of timelines that don't start at t=0
Merged-by: Michael Niedermayer <michaelni@gmx.at>
When writing an explicit time, reset the cur_time variable to this
value as well. This avoids writing excessive time attributes for each
segment in the timeline, as long as the segments are continuous.
Signed-off-by: Martin Storsjö <martin@martin.st>
Fixes Ticket3514
See: ETSI EN 300 743 V1.3.1 (2006-11)
"In summary, all of the segments of a single display set shall be carried in one (or more) PES packets that have the same
PTS value."
with PTS = DTS and remuxing of such a stream it is to be expected that sometimes
multiple packets would have the same DTS
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Allows expansion of the filename template with strftime() with the option
-strftime 1 (disabled by default). This allows segments to be named by time of
creation, adding some flexibility.
Fixes Ticket 4104 (add strftime to segment muxer)
Signed-off-by: Pedro E. M. Brito <pedroembrito@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
In case of errors the cache file will be slightly larger than needed,
this should have no practical relevance though
Should fix build on VS201*
Found-by: jamrial
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This improves readability and makes it clear that the freed
value is not used after the end of an iteration
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '9cfa68c560bdec82d2d5ec079f9c5b0f9ca37af0':
mpegts: add support for Opus
Conflicts:
libavcodec/opus_parser.c
libavformat/mpegts.c
See: 74141f693d
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '8ebf02f8f530240edf7e45f35f7647ef9dd44a58':
libavformat: Only use MoveFileExA when targeting the desktop API subset
Conflicts:
configure
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'fc308b30bb24e623fed042ec78b10803b2362a18':
rtpenc_mpegts: Call write_trailer for the mpegts muxer even if no output buffer exists
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'e2ce16392205d8efe9143329ed3fb5fcb15498fa':
mpegts: Support running the write_trailer function without an AVIOContext
Merged-by: Michael Niedermayer <michaelni@gmx.at>
use av_get_codec_tag_string() in wav_read_header() for printing the
faulty start code from riff header
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Make it more readable and display an error message in case an invalid
header is detected (the current version just returns
AVERROR_INVALIDDATA)
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
The MoveFileExA is available in the headers regardless which API
subset is targeted, but it is missing in the Windows Phone link
libraries. When targeting Windows Store apps, the function is
available both in the headers and in the link libraries, and thus
there is no indication for the build system that this function
should be avoided - such an indication is only given by the
Windows App Certification Kit, which forbids using the MoveFileExA
function.
Therefore check the WINAPI_FAMILY defines instead, to figure out
which API subset is targeted.
Signed-off-by: Martin Storsjö <martin@martin.st>
Since the mpegts muxer now can handle being called with a NULL
AVIOContext, we don't need to try to allocate one before calling
write_trailer.
Signed-off-by: Martin Storsjö <martin@martin.st>
If opening and closing dynamic buffers as AVIOContext, we may
not have any AVIOContext available when wanting to close and
deallocate the muxer. Allow calling write_trailer despite this.
Signed-off-by: Martin Storsjö <martin@martin.st>
* commit '59f0275dd0a42a7f90271a83a78e9ca5e69ff5b0':
movenc: Adjust the pts of new fragments similarly to what is done for dts
Merged-by: Michael Niedermayer <michaelni@gmx.at>
The pts and the corresponding duration is written in sidx
atoms, thus make sure these match up correctly.
Signed-off-by: Martin Storsjö <martin@martin.st>
Since this structurally is quite different from normal RTP
(multiple streams are muxed into one single mpegts stream,
which is packetized into one single RTP session), it is kept
as a separate muxer.
Since this structurally also behaves differently than normal
RTP, all of the other muxers that do chained RTP muxing
(rtsp, sap, mp4) would need to be updated similarly to handle
this - in particular, creating one single rtp_mpegts muxer
for the whole presentation instead of one rtp muxer per stream.
Signed-off-by: Martin Storsjö <martin@martin.st>
The packetizer only supports splitting at GOB headers - if
such aren't available frequently enough, it splits at any
random byte offset (not at a macroblock boundary either, which
would be allowed by the spec) and sends a payload header pretend
that it starts with a GOB header.
As long as a receiver doesn't try to handle such cases cleverly
but just drops broken frames, this shouldn't matter too much
in practice.
Signed-off-by: Martin Storsjö <martin@martin.st>
Instead explicitly jump to the default case in the cases where
it is wanted, and avoid fallthrough between different codecs,
which could easily introduce bugs if people editing the code
aren't careful.
Signed-off-by: Martin Storsjö <martin@martin.st>
* commit 'df07c07b3de0a5e8890078944de1eb5cb8372ef8':
rtpdec_h263_rfc2190: Clear the stored bits if discarding buffered data
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '01f251c44d83eedc819625d2caac9ff9697a085d':
rtpenc: Set the timestamp properly when sending mpegts data, too
Merged-by: Michael Niedermayer <michaelni@gmx.at>
If we throw away the buffered incomplete frame, make sure to also
throw away the buffered bits of an incomplete byte at the same
time.
CC: libav-stable@libav.org
Signed-off-by: Martin Storsjö <martin@martin.st>
In particular, when packetizing mpegts into rtp, the input packet
timestamp may come from more than one stream, which could cause
multiple packets be written with the same timestamp.
Signed-off-by: Martin Storsjö <martin@martin.st>
* commit '456e93bfdd4cbc5e995dea415019abd0703d0e16':
dashenc: Adjust the start time of a segment to the end of the previous segment
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '2f628d5943c12389c07d652d23d3916997f9f0f6':
dashenc: Write segment timelines properly if the timeline has gaps
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This is the same adjustment that the mp4 muxer does to the start
timestamp of fragments, since the timestamp of a sample in an mp4
file is implicit from the sum of earlier sample durations.
This avoids gaps in the timeline (which can stop dash.js from
playing it back), and makes sure the timestamp on the segmenter
level matches what the mp4 muxer actually writes into the segments.
This is only an issue if the AVPacket duration of the last
packet of a segment doesn't point to the actual start timestamp
of the next packet (the first in the next segment).
Signed-off-by: Martin Storsjö <martin@martin.st>
Write a new start time if the duration of the previous segment
didn't match the start of the next one. Check that segments
actually are continuous before writing a repeat count.
This makes sure timestamps deduced from the timeline actually
match the real start timestamp as written in filenames (if
using a template containing $Time$).
Signed-off-by: Martin Storsjö <martin@martin.st>
Close segment I/O context and append segment in hls_write_trailer() only
when segment I/O context is allocated.
Signed-off-by: Christian Suloway <csuloway@globaleagleent.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Since 3cec81f4d4, a zero-length metadata value would try to
allocate 2*0 bytes, where av_malloc() returns NULL.
Always add one to the allocated length, to allow space for
a null terminator in the zero-length case.
Incidentally, this fixes fate-alac on RVCT 4.0, where a compiler
bug seems to mess up the mov muxer to the point that it writes
the wrong sort of metadata. Previously this bug was undetected,
but since 3cec81f4d4 such mov files started returning
AVERROR(ENOMEM) in the mov demuxer.
Signed-off-by: Martin Storsjö <martin@martin.st>
In matroska_read_seek(), |tracks| is assigned at the begining of the
function. However, functions like matroska_parse_cues() could reallocate
the tracks and invalidate |tracks|.
This assigns |tracks| only before using it, so that it will not get
invalidated elsewhere.
Bug-Id: chromium/427266
This is primarly to maintain current behavior when r_frame_rate is set for muxers
and could be reverted if it has some advantage
Fixes Ticket3629 part1
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This was suggested by cbsrobot, ubitux and koda
There are files with huge amounts of XMP data, which would otherwise
be displayed in the terminal output of FFmpeg
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'e737a4aaafcb1d761b7f96043c2f83ce742c64ae':
dashenc: Change the duration fields to 64 bit
Conflicts:
libavformat/dashenc.c
See: e65849a70b
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This option flag deletes segment files removed from the playlist after a
period of time equal to the duration of the segment plus the duration of
the playlist.
Signed-off-by: Christian Suloway <csuloway@globaleagleent.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
For the last_duration field, it's mostly theoretical, but the
total_duration field more probably may need to actually be 64 bit.
Bug-Id: CID 1254944
Signed-off-by: Martin Storsjö <martin@martin.st>
As the manifest/segments are flushed to disk, log to stderr the
progress, when in verbose logging mode
Signed-off-by: Martin Storsjö <martin@martin.st>
Only the upper 2 bits of the first byte are known to be
a fixed value.
The lower bits in the first byte of a RTP packet could be set
if the input is from another RTP packetizers than libavformat's,
but for RTCP packets, they would also be set when sending RTCP RR
packets, triggering false warnings about incorrect input format
to the protocol.
Signed-off-by: Martin Storsjö <martin@martin.st>
* commit 'fccfc22d1f304aef42a0b960e4c1d55ce67107f5':
libavformat: Build hevc.o when building the RTP muxer
Merged-by: Michael Niedermayer <michaelni@gmx.at>