* commit '4d6d70292e91a7ef027824d731b6b6570ceabf2f':
rtmpproto: Pass the 'live' parameter in the right unit
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'a6b361325f2bfc8d9d4e5f761d6c1a07b209c4fb':
rtmpproto: Print the error code string if there's no description
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This wasn't an issue prior to 58404738, when the whole RTMP packet
was copied at once and the length of the individual embedded flv
packets only were validated by the flv demuxer.
Prior to this patch, this could lead to reads and writes out of bound.
Signed-off-by: Martin Storsjö <martin@martin.st>
If the embedded flv packets were incomplete and we aborted the
copying loop early, make sure the flv buffer is trimmed to
only contain full packets.
Signed-off-by: Martin Storsjö <martin@martin.st>
update_offset is also called from handle_metadata, where the
packet header sizes is already included in the size.
Previously this lead to flv_data/flv_size including 15 uninitialized
bytes at the end after each call to handle_metadata, making the
flv demuxer lose sync with the stream.
Also remove leftover copying in handle_metadata. This is a leftover
from the refactoring in 5840473. (Previously this final mempcy was
the one that copied all the packets at once, while this is done
within the loop right now.) After making sure flv_size is set to
the right size, this write was out of bounds.
Signed-off-by: Martin Storsjö <martin@martin.st>
This was overlooked in d872fb0f7 since I assumed all the realloc
issues in the rtmp code was fixed already.
Signed-off-by: Martin Storsjö <martin@martin.st>
The current magic numbers passed are values in seconds, while the
parameter itself should be passed over the wire in milliseconds.
This makes (some/all?) live streams from Red5 work correctly, that
previously returned StreamNotFound even with "-rtmp_live live". After
this commit, the default 'any' also works on these streams.
Signed-off-by: Martin Storsjö <martin@martin.st>
On (certain streams/setups at least on) Red5, the description string
actually is present, but empty. Therefore, first try loading the
description, but if not found or empty, load the code string instead.
The code string is quite understandable in most cases anyway (like
"NetStream.Play.StreamNotFound").
Signed-off-by: Martin Storsjö <martin@martin.st>
Here is an extract of fate-samples/sub/vobsub.idx, with an additional
text at the end of each line to better identify each bitmap:
timestamp: 00:04:55:445, filepos: 00001b000 Ace!
timestamp: 00:05:00:049, filepos: 00001b800 Wake up, honey!
timestamp: 00:05:02:018, filepos: 00001c800 I gotta go to work.
timestamp: 00:05:02:035, filepos: 00001d000 <???>
timestamp: 00:05:04:203, filepos: 00001d800 Look after Clayton, okay?
timestamp: 00:05:05:947, filepos: 00001e800 I'll be back tonight.
timestamp: 00:05:07:957, filepos: 00001f800 Bye! Love you.
timestamp: 00:05:21:295, filepos: 000020800 Hey, Ace! What's up?
timestamp: 00:05:23:356, filepos: 000021800 Hey, how's it going?
timestamp: 00:05:24:640, filepos: 000022800 Remember what today is? The 3rd!
timestamp: 00:05:27:193, filepos: 000023800 Look over there!
timestamp: 00:05:28:369, filepos: 000024800 Where are they going?
timestamp: 00:05:28:361, filepos: 000025000 <???>
timestamp: 00:05:29:946, filepos: 000025800 Let's go see.
timestamp: 00:05:31:230, filepos: 000026000 I can't, man. I got Clayton.
Note the two "<???>": they are basically split subtitles (with the
previous one), which the dvdsub decoder is now supposed to reconstruct
with a previous commit. But also note that while the first chunk has
increasing timestamps,
timestamp: 00:05:02:018, filepos: 00001c800
timestamp: 00:05:02:035, filepos: 00001d000
...it's not the case of the second one (and this is not an exception in the
original file):
timestamp: 00:05:28:369, filepos: 000024800
timestamp: 00:05:28:361, filepos: 000025000
For the dvdsub decoder, they need to be "filepos'ed" ordered, but the
FFDemuxSubtitlesQueue is timestamps ordered, which is the reason of the
introduction of a sub sort method in the context, to allow giving
priority to the position, and then the timestamps. With that change, the
dvdsub decoder get fed with ordered packets.
Now the packet size estimation was also broken: the filepos differences
in the vobsub index defines the full data read between two subtitles
chunks, and it is necessary to take into account what is read by the
mpegps_read_pes_header() function since the length returned by that
function doesn't count the size of the data it reads. This is fixed with
the introduction of total_read, and {old,new}_pos. By doing this change,
we can drop the unreliable len16 heuristic and simplify the whole loop.
Note that mpegps_read_pes_header() often read more than one PES packet
(typically in one call it can read 0x1ba and 0x1be chunk along with the
relevant 0x1bd packet), which triggers the "total_read + pkt_size >
psize" check. This is an expected behaviour, which could be avoided by
having a more chunked version of mpegps_read_pes_header().
The latest change is the extraction of each stream into its own
subtitles queue. If we don't do this, the maximum size for a subtitle
chunk is broken, and the previous changes can not work. Having each
stream in a different queue requires some little adjustments in the
seek code of the demuxer.
This commit is only meaningful as a whole change and can not be easily
split. The FATE test changes because it uses the vobsub demuxer.
previously only codec_ids could be forced, which did not allow
forcing a specific implementation like libopenjpeg vs jpeg2000.
Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'cc41167aede4c101ad17eeffa8f39bb6c23d3dad':
asfdec: Check the return value of asf_read_stream_properties
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This makes sure errors in setting stream parameters are passed
on to the caller. This avoids successfully opening files while
some parameters aren't filled in properly.
Reported-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
CC: libav-stable@libav.org
Signed-off-by: Martin Storsjö <martin@martin.st>
* commit '23d0fdcf6f30843fc3f14084d80581f1ca10f1f3':
Add support for multichannel ATRAC3+ streams.
Conflicts:
libavformat/oma.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'c231987662194d009dd91bfc57c678e0e70ca161':
mov: Make sure the read sample count is nonnegative
Conflicts:
libavformat/mov.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '640a2427aafa774b83316b7a8c5c2bdc28bfd269':
bfi: Add some very basic sanity checks for input packet sizes
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'a9221e39600a31ee13e736e9e47743cde23f0280':
electronicarts: Add more sanity checking for the number of channels
Note: This check is probably unnecessary
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '8d07258bb6063d0780ce2d39443d6dc6d8eedc5a':
avidec: Make sure a packet is large enough before reading its data
Conflicts:
libavformat/avidec.c
See: 028cc42a16
Note: data!=NULL implies that the allocated array is at least FF_INPUT_BUFFER_PADDING_SIZE large
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '68ff9981283a56c731f00c2ee7901103665092fc':
vqf: Make sure the bitrate is in the valid range
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '9277050e2918e0a0df9689721a188a604d886616':
vqf: Make sure sample_rate is set to a valid value
See: e481ba2ed7
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Fixes sync in some samples (e.g. bugs 7581 and 8374 in VLC).
Based on a commit by Matthieu Bouron <matthieu.bouron@gmail.com>
Reported-by: Jean-Baptiste Kempf <jb@videolan.org>
CC: libav-stable@libav.org
This avoids setting a negative number of frames, ending up with a
negative average frame rate.
Reported-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
CC: libav-stable@libav.org
Signed-off-by: Martin Storsjö <martin@martin.st>
If a zero-length video packet is to be returned, just return
AVERROR(EAGAIN) and switch back to the audio stream.
Reported-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
CC: libav-stable@libav.org
Signed-off-by: Martin Storsjö <martin@martin.st>
This avoids a division by zero for G726.
Reported-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
CC: libav-stable@libav.org
Signed-off-by: Martin Storsjö <martin@martin.st>
This avoids a division by zero.
Reported-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
CC: libav-stable@libav.org
Signed-off-by: Martin Storsjö <martin@martin.st>
Even if the sample rate is valid, an invalid bitrate could
pass the mode combination test below.
CC: libav-stable@libav.org
Signed-off-by: Martin Storsjö <martin@martin.st>
This avoids divisions by zero later (and possibly assertions in
time base scaling), since an invalid rate_flag combined with an
invalid bitrate below could pass the mode combination test.
Reported-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
CC: libav-stable@libav.org
Signed-off-by: Martin Storsjö <martin@martin.st>
* qatar/master:
lxf: check the nb_streams instead of relying on padding
Conflicts:
libavformat/lxfdec.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '06ebc0bf9a6401733a4ce1310325de19f631819a':
lavf: Allocate arrays with av_realloc if they will be realloced later
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '5c53bf7aaf03748464cbf978bffe7ffdb71112b1':
http: Pass options through to the nested protocol
Conflicts:
libavformat/http.c
See: b6f435fbc8
Merged-by: Michael Niedermayer <michaelni@gmx.at>
When av_reallocp fails, the associated variables that keep track of
the number of elements in the array (and in some cases, the
separate number of allocated elements) need to be reset.
Not all of these might technically be needed, but it's better to
reset them if in doubt, to make sure variables don't end up
conflicting.
Signed-off-by: Martin Storsjö <martin@martin.st>
Also add options for specifying a certificate and key, which can
be used both when operating as client and as server.
Partially based on a patch by Peter Ross.
Signed-off-by: Martin Storsjö <martin@martin.st>
When passing a dict to the nested protocol, it will consume
the used options from it, so a separate copy needs to be used
when reopening the connection multiple times.
Signed-off-by: Martin Storsjö <martin@martin.st>
A file containing the trusted CA certificates needs to be
supplied via the ca_file AVOption, unless the TLS library
has got a system default file/database set up.
This doesn't check the hostname of the peer certificate with
openssl, which requires a non-trivial piece of code for
manually matching the desired hostname to the string provided
by the certificate, not provided as a library function.
That is, with openssl, this only validates that the received
certificate is signed with the right CA, but not that it is
the actual server we think we're talking to.
Verification is still disabled by default since we can't count
on a proper CA database existing at all times.
Signed-off-by: Martin Storsjö <martin@martin.st>
Values outside would not be possible due to limitations of jpeg itself
Fixes very long running loop
Fixes Ticket2977
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'f1eac2b8a0370b908cd691086d11f51342054730':
movenc: Use keyframes as default fragmentation point in ismv
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'a9553bbb336a7186c62b3b14a0499c1b6ba61ebd':
movenc: Set all implicit flags immediately in mov_write_header
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '187023f6b2b43966acb2449a379b4ededdc4b22e':
movenc: Set mov->mode earlier in mov_write_header
Conflicts:
libavformat/movenc.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '5055035670bd1a1eaca64bd3bc71fb07de9df2c3':
tls: Do not abort on non-fatal TLS alerts with gnutls
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Fragmenting blindly to a certain duration isn't a good choice
if one should be able to switch between different qualities,
therefore default to keyframes instead.
Signed-off-by: Martin Storsjö <martin@martin.st>
This makes sure other sanity checks for conflicting options
can work properly, e.g. for the conflict between the faststart
flag when using the ismv mode.
Signed-off-by: Martin Storsjö <martin@martin.st>
Use update_offset() as done for rtmp audio, video and notifications and
read update and write the fields instead of replacing them in the rtmp
packet and then memcpying it to the output buffer.
And fix the AMF_DATA_TYPE_ARRAY parsing while at it.
A MIXEDARRAY type, as the ARRAY, store the number of elements in
an uint32 before the list. The ARRAY is strict and does not have
an OBJECT terminator, MIXEDARRAY behaves like an OBJECT type and
a different than stated number of element can be present.
Use it only on subtitle CuePoints.
With proper demuxer/splitter support this should improve the display
of subtitles right after seeking to a given point in the stream.
Signed-off-by: James Almer <jamrial@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'b97b1adb3f807e1acd00d56319ee6cb41cc727e4':
rtmpproto: Add a comment explaining the logic in handle_notify
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '83c285f88016b087c2f0f4b9ef356ad8ef12d947':
wtv: Add more sanity checks for a length read from the file
Conflicts:
libavformat/wtv.c
See: c42efad3c3
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'd8b68660145c76a23fc9665f96932449514ecad2':
yop: Clear all references to the AVBuffer in the local AVPacket
Conflicts:
libavformat/yop.c
See: 551f683861
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '72fe16a13e3ebd5396ac173bf84c8b20085c16d5':
movenc: Use null buffers for measuring the amount of data to be written
Conflicts:
libavformat/movenc.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '09f3c937ed6fd7c5bd64450d45f73b0f4975f4c9':
asfenc: remember send time and offset of the index entries
Conflicts:
libavformat/asfenc.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '1eb932803037a3c9f98f66aeb80024dfa3c5c743':
asfenc: add ASF_Reserved_4 as defined in section 10.10 of the ASF spec
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '5f408333601a827054335f309defcb246a532b21':
asfdec: substract preroll time from marker presentation time
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Minor change to fix for Trac #1003 to avoid squawking about files
with valid keyframes that aren't marked (as opposed to frames that are
marked as keyframes and aren't).
Change correctly surpresses the spurious warnings, while still complaining
about (and handling) the genuinely broken file attached to bug #1003.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Also make sure the existing length check can't overflow.
Reported-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
CC: libav-stable@libav.org
Signed-off-by: Martin Storsjö <martin@martin.st>
This makes sure that it doesn't try to free an AVBuffer belonging
to an earlier packet when we free the local packet at the end.
Reported-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
CC: libav-stable@libav.org
Signed-off-by: Martin Storsjö <martin@martin.st>
This avoids divisions by zero later.
Reported-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
CC: libav-stable@libav.org
Signed-off-by: Martin Storsjö <martin@martin.st>
Null buffers are useful for simulating writing to a real buffer
for the sake of measuring how many bytes are written.
Signed-off-by: Martin Storsjö <martin@martin.st>
ASF markers only have a start time, so we lose the chapter end times,
but that is ASF for you
Signed-off-by: Vladimir Pantelic <vladoman@gmail.com>
Signed-off-by: Anton Khirnov <anton@khirnov.net>
this was forgotten when we changed ASF to not output the preroll time
Signed-off-by: Vladimir Pantelic <vladoman@gmail.com>
Signed-off-by: Anton Khirnov <anton@khirnov.net>
The deallocated memory contains resources that need to be freed before it
can be deallocated. The original code was correct.
This also fixes a double free
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'bcbe4f3ceb6ee0210d3a401963518906c8b9b230':
idroqdec: Make sure a video stream has been allocated before returning packets
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '0f310a6f333b016d336674d086045e8473fdf918':
rmdec: Validate the fps value
Conflicts:
libavformat/rmdec.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Files won't validate with mkvalidtor if these two elements are missing.
Use a const "Lavf" string that wont change with library version bumps.
Signed-off-by: James Almer <jamrial@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* qatar/master:
movenc: Add an option for omitting the tfhd base offset
Conflicts:
libavformat/version.h
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'd4c2a3740fb95f952a87ba320d2bf31f126bdf68':
xmv: Add more sanity checks for parameters read from the bitstream
Conflicts:
libavformat/xmv.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'dc4acc820076b2149ef6c921bdabe05d07ca1bc6':
rtmpproto: Extend a comment to explain the prev_pkt arrays roles
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '647d655d19c38e9716328e4787199149097d6089':
rtmpproto: Consistently use the right prev_pkt array
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Abort if it is invalid if strict error checking has been requested.
Reported-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
CC: libav-stable@libav.org
Signed-off-by: Martin Storsjö <martin@martin.st>
This makes the output fragments independent of their position in
the output stream, making the output work better when streamed.
QuickTime Player doesn't support fragmented mp4 without the base
data offset, though.
Signed-off-by: Martin Storsjö <martin@martin.st>
This is a bit more work, but avoids having to fill in
the data offset field afterwards instead of directly when
the rest of the trun atom is written.
This simplifies future cases where this field needs to be set to
something different.
Signed-off-by: Martin Storsjö <martin@martin.st>
A given packet won't always come in contiguously; sometimes
they may be broken up on chunk boundaries by packets of another
channel.
This support primarily involves tracking information about the
data that's been read, so the reader can pick up where it left
off for a given channel.
As a side effect, we no longer over-report the bytes read if
(toread = MIN(size, chunk_size)) == size
Signed-off-by: Martin Storsjö <martin@martin.st>
Since the number of channels is multiplied by 36 and assigned to
to a uint16_t, make sure this calculation didn't overflow. (In
certain cases the calculation could overflow leaving the
truncated block_align at 0, leading to divisions by zero later.)
Reported-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
CC: libav-stable@libav.org
Signed-off-by: Martin Storsjö <martin@martin.st>
* commit '7f8d41eb097e8d4223c9caf97dd332a2fdb29d52':
mov: Don't use a negative duration for setting other fields
Conflicts:
libavformat/mov.c
See: 87d073eacc
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '19b9659f3174599e8685d329c4330b1ea8c4c6db':
oggparseogm: Convert to use bytestream2
Conflicts:
libavformat/oggparseogm.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'd4aef997809167832ecc64e89dda8cb445e5fe10':
rtmp: Follow Flash player numbering for channels.
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '68b467742092364f9306283f40effde2c12efe08':
lavf: Make probe_codec return an error code
Conflicts:
libavformat/utils.c
A failure to reallocate should not free the array as it is used
to probe the codec. And failure to reallocate if the following
probe succeeds isnt a fatal error for probe_codec(). Thus this
is only partially merged to ensure probing still is attempted
with the data available.
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '73084391588b0f150737990038829cac5013dd68':
lavf: Don't explicitly flush after each written packet in muxers
Conflicts:
libavformat/assenc.c
libavformat/yuv4mpeg.c
See: 8de9bb6e5e
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '596e5d4783ca951258a7c580951fd161f1785ec1':
lavf: Add a flag to enable/disable per-packet flushing
Conflicts:
libavformat/avformat.h
libavformat/mux.c
libavformat/version.h
This adds a 2nd API to set per packet flushing
If the user application indicates through either a non default then this non default takes
precedence over the other still default value
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'fe0337e89bbbe84b7274fbb0d9d56ed992937931':
rtmp: Do not send the first field twice within the handshake
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Some files have the duration set to -1 in the mdhd atom, more
or less legitimately. (We produce such files ourselves, for the
initial duration in fragmented mp4 files.)
Reported-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
CC: libav-stable@libav.org
Signed-off-by: Martin Storsjö <martin@martin.st>
This more closely corresponds to the usage of the field.
Its usage here is unrelated to the channel ID.
Signed-off-by: Martin Storsjö <martin@martin.st>
Channel 4 is typically used by the Flash player to transmit
audio, channel 6 for video, and various stream-specific invokes
get sent over channel 8, which is designated the source channel.
This more closely matches the behavior of the Flash player,
including the transmission of play requests over channel 8.
Signed-off-by: Martin Storsjö <martin@martin.st>
Sending non-monotonic packets (e.g. when the audio and video
streams are monotonic within themselves but not muxed
monotonically) will lead to negative values the RTMP timestamp
field (where timestamps are transmitted only as deltas for each
channel), and this delta can end up being incorrectly written as
a large unsigned number.
Signed-off-by: Martin Storsjö <martin@martin.st>
Re-wording a log message that's no longer true and changing its
severity level to debug.
Signed-off by: Vignesh Venkatasubramanian <vigneshv@google.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Since 596e5d4783, this is not necessary anymore. It also allows to
actually disable the flushing, improving write performance (but
possibly giving worse latency in real-time streaming).
Signed-off-by: Martin Storsjö <martin@martin.st>
This is enabled by default and can be disabled with
"-fflags -flush_packets".
Inspired by a patch from Nicolas George <nicolas.george@normalesup.org>.
Signed-off-by: Martin Storsjö <martin@martin.st>
Adding support for end trimming Opus embedded in Ogg container.
Signed-Off By: Vignesh Venkatasubramanian <vigneshv@google.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '342c43d154e586bc022c86b168fe8d36f69da9d3':
omadec: Properly check lengths before incrementing the position
See: f1d6f013b2
Merged-by: Michael Niedermayer <michaelni@gmx.at>
If we really want to support parameter changes, they need to be
signalled along with the AVPackets as parameter change side data,
not just changing the AVCodecContext parameters when a packet
is demuxed (since there may be other earlier packets yet undecoded).
Something similar was already done for the sample rate in 0883109b2,
but some parameters were left changeable.
This avoids having to recheck the channel count for validity for
each decoded frame in (ad)pcm decoders, unless the decoders
explicitly say that they accept parameter changes.
Reported-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
CC: libav-stable@libav.org
Signed-off-by: Martin Storsjö <martin@martin.st>
Limit the size to INT_MAX/2 (for simplicity) to be sure that
size + BYTES_PER_FRAME_RECORD won't overflow.
Also factorize other existing error return paths.
Reported-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
CC: libav-stable@libav.org
Signed-off-by: Martin Storsjö <martin@martin.st>
The muxer has been creating files with v4 elements for some time now,
and especially now that we can mux non-experimental Opus files, reporting
the DocTypeVersion as 2 is not correct.
Signed-off-by: James Almer <jamrial@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Removing the /EXPERIMENTAL suffix for codec id field for Opus. Doing this
as the implementation of embedding Opus in Matroska is complete.
Signed-Off By: Vignesh Venkatasubramanian <vigneshv@google.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* cehoyos/master:
Set bits_per_raw_sample when reading j2k frames.
libopenjpegdec.c: Correctly scale gray16 output if precision < 16
Use rc_max_rate if no video bit_rate was specified when muxing mxf_d10.
Store the video bit_rate in the context when muxing mxf.
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* qatar/master:
matroskaenc: Fix stray pointers left over from av_reallocp_array refactoring
Conflicts:
libavformat/matroskaenc.c
Mostly not merged as the buggy code was no longer part of FFmpeg
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '17d57848fc14e82f76a65ffb25c90f2f011dc4a0':
mpc8: Make sure the first stream exists before parsing the seek table
Conflicts:
libavformat/mpc8.c
See: 69fb605ad5
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '183b9d843a9533774fabd3984a52f3987001acbc':
ape: Don't allow the seektable to be omitted
See: e7cb161515
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '48d6556dd46d4f4fac10d0f4a819e314887cd50e':
dsicin: Add some basic sanity checks for fields read from the file
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Limit the size to INT_MAX/2 (for simplicity) to be sure that
size + FF_INPUT_BUFFER_PADDING_SIZE won't overflow.
Reported-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
CC: libav-stable@libav.org
Signed-off-by: Martin Storsjö <martin@martin.st>
The seektable is required for filling in ape->frames[i].pos
further down.
Reported-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
CC: libav-stable@libav.org
Signed-off-by: Martin Storsjö <martin@martin.st>
The caller does not expect this, and in case of adding new streams would then
not even be able to deallocate them anymore.
This reverts a hunk from "avformat: Use av_reallocp_array() where suitable"
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
The caller does not expect this and there are variables left that index to otherwise
deallocated data.
This reverts a hunk from "avformat: Use av_reallocp_array() where suitable"
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Implementing support for end trimming Opus in Matroska by making
use of the DiscardPadding value from the container and discarding
the samples accordingly.
Signed-off-by: Vignesh Venkatasubramanian <vigneshv@google.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '8b524ab0c43c1767919530abb79d3656113cdc47':
movenc: Add a warning message if conflicting options have been specified
Conflicts:
libavformat/movenc.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
In order to represent the codec delay accurately in Matroska, a
new element CodecDelay has been introduced. It contains the
overall delay added by the codec in nanoseconds. This patch adds
support for muxing CodecDelay value in the container.
Matroska spec for CodecDelay element can be found here:
http://matroska.org/technical/specs/index.html#CodecDelay
Signed-off-by: Vignesh Venkatasubramanian <vigneshv@google.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Support for end trimming Opus in Matroska is implemented by using
the DiscardPadding container element in the Block data. The last
chunk is stored as a Block instead of SimpleBlock and the
trimming information is stored and used to discard samples that
were padded by the Opus codec. This patch adds support for muxing
DiscardPadding element into the container with appropriate value.
Matroska spec for the DiscardPadding element can be found here:
http://matroska.org/technical/specs/index.html#DiscardPadding
Signed-off-by: Vignesh Venkatasubramanian <vigneshv@google.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This makes sure the faststart vs fragmentation check works as
intended when fragmentation is enabled due to using the ismv mode.
Signed-off-by: Martin Storsjö <martin@martin.st>
This fixes warnings about making integers from pointers without
a cast, and avoids the theoretical case where the lower 32 bits of
the pointer would all be zero where the implicit cast wouldn't give
the right result.
Signed-off-by: Martin Storsjö <martin@martin.st>
This fixes a bunch of possible overread in avformat with the idiom p +=
strcspn(p, "\n") + 1 (strcspn() can focus on the trailing '\0' if no
'\n' is found, so the +1 leads to an overread).
Note on lavf/matroskaenc: no extra subtitles.o Makefile dependency is
added because only the header is required for ff_subtitles_next_line().
Note on lavf/mpsubdec: code gets slightly complex to avoid an infinite
loop in the probing since there is no more forced increment.
* qatar/master:
lavf: fix the comparison in an overflow check
Conflicts:
libavformat/utils.c
See: a5d67bc796
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '7ee191cab0dc44700f26c5784e2adeb6a779651b':
dv: Add a guard to not overread the ppcm array
See: 3669915e93
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* qatar/master:
matroskaenc: Allow chapters to be written in trailer
Conflicts:
libavformat/matroskaenc.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This allows creation of frame accurate chapter marks from sources like
DVD and BD where the precise chapter location is not known until the
chapter mark has been reached during reading.
Signed-off-by: Anton Khirnov <anton@khirnov.net>
* commit 'd719981273bc779c7d1e879d88404fd867f93a0e':
4xm: Check that the read track value is non-negative
Conflicts:
libavformat/4xm.c
See: 0838cfdc8a
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '5bcd3ae5b167fb74215520b01d5d810e0c8986ab':
matroskadec: Check that .lang was allocated and set before reading it
Conflicts:
libavformat/matroskadec.c
See: 01fd1aa0ad
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This ensures that no read timestamp functions finds packets before the search window in ff_find_last_ts()
which could cause an infinite loop
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This fixes an infinite loop
An alternative fix would be to revert d73cbc22c5
but that would worsen error resilience.
Found-by: Justin Ruggles
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Skip the "\r" as normal text. Otherwise it will be the first character
of the string passed to sscanf(), which then fill fail to match the
timestamps.
Signed-off-by: Clément Bœsch <u@pkh.me>
* commit '488b2984fece7ad0c2596826fee18e74aa904667':
ape demuxer: check for EOF in potentially long loops
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'a7c1689dedd11689edb30088d467ac03f9b8d1cf':
4xm: check that bits per sample is strictly positive
Merged-by: Michael Niedermayer <michaelni@gmx.at>
The check added in df33a58e53 does not work
at all, rather it broke the summing of bitrates completely.
The comparission was wrong way around.
This commit replaces it by a simpler and hopefully clearer check
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'fab694dd3931b1c0bc3c598c3f88b1902c14a303':
lavf: move a variable declaration to the block where it's used
Conflicts:
libavformat/utils.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This should improve write performance quite significantly.
---
Tested with both writing a normal mp4, by using the faststart
feature and writing a fragmented mp4 file; all turn out with the
same md5sum as before.
Signed-off-by: Martin Storsjö <martin@martin.st>
Remove the header decoding for PCM audio from mpeg.c and the
20/24bit parts from pcm.c and merge them into a new decoder in
pcm-dvd.c.
The decoder has added support for samples that span multiple
packets and modified 20/24bit group decoding. Both is needed to
decode samples that have been generated with DVD-Lab Pro 2. The
decoding of 16bit PCM and two channel 24bit is identical to
before. No other samples are known to verify the correctness of
the encoding this software does.
The complete list of tested formats is
48kHz/16bit/2-8 channels
48kHz/24bit/2-5 channels
96kHz/16bit/2-4 channels
96kHz/24bit/2 channels
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
When streaming to limelight, the app name is either a full
"appname/subaccount" or "appname/_definst_". In the latter case,
the app name can be simplified into simply "appname", but the
authentication hashing assumes the /_definst_ still to be present.
Signed-off-by: Martin Storsjö <martin@martin.st>
* commit '310cc4bf82824f09bdd0b9147ed725cdbeaf9bdd':
smoothstreamingenc: Write to a temp file while updating the manifest
Merged-by: Michael Niedermayer <michaelni@gmx.at>
If a client tries to read the file while it's being updated, the client
would get an incomplete manifest. Instead write to a separate temp file
and atomically rename it to replace the previous one.
Signed-off-by: Martin Storsjö <martin@martin.st>
The element was only being written when the value == 1. But the default
value of this element is 1, so this has no useful effect. This element
needs to be written when the value == 0.
Signed-off-by: Anton Khirnov <anton@khirnov.net>
* commit '2bbad1f94cbc5eab0aa2d937bc79d085477d0242':
movenc: Properly free allocated data on failures in mov_write_header
Conflicts:
libavformat/movenc.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '3559fb97c459c88b4f1d0eef80d55933d3b7fabe':
movenc: Check that tracks->enc exists before trying to free extradata
Conflicts:
libavformat/movenc.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '4d122b01e4ce539269ee2df193b061772c7374f6':
movenc: Check for allocation failures in mov_create_chapter_track
Merged-by: Michael Niedermayer <michaelni@gmx.at>
On failures in the write_trailer function, we could also ignore
the errors and try to finish the file despite these errors (which
would only leave an incomplete chapters track). It's probably better
to signal the error clearly to the caller though (and if this
function failed there's no guarantee that there's enough memory to
finish the trailer either).
Signed-off-by: Martin Storsjö <martin@martin.st>
* commit 'b89e8759e053792704741d08cbc41c9ac3c7ed63':
mov: Write tmcd extradata
This commit should make no difference as we had tmcd support
already, which is not changed.
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '08504380ddf25d6905e189e9bf52e7a4c771a415':
mov: Refactor codec specific final steps in mov_finalize_stsd_codec
Conflicts:
libavformat/mov.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'dc518a3ae21e7b6420131b813cfc6bcdcad26b7e':
mov: Refactor subtitle specific parsing in mov_parse_stsd_subtitle
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'a3b53ff062eaccdaa28964899c63520ef2978c2e':
mov: Refactor video specific parsing in mov_parse_stsd_video
Conflicts:
libavformat/mov.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
When a id3 tag is larger than the amount of space we will probe
give it a score similar to what a .mp3 extension would have given it
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Fixes out of array reads
Found-by: Laurent Butti <laurentb@gmail.com>
Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '1f70a5ad284b33e8b3e2b40a5cb33055419781b7':
mov: use tkhd enabled flag to set the default track
Merged-by: Michael Niedermayer <michaelni@gmx.at>
QuickTime will play multiple audio tracks concurrently if this flag is
set for multiple audio tracks. And if no subtitle track has this flag
set, QuickTime will show no subtitles in the subtitle menu.
Signed-off-by: Anton Khirnov <anton@khirnov.net>
Faststart moves the moov atom to the beginning of the file and rewrites
the rest of the file after muxing is complete.
Signed-off-by: Martin Storsjö <martin@martin.st>
* commit '6c786765cd5eb794dedd4a0970dfe689b16dfeeb':
movenc: Allow chapters to be written in trailer
Conflicts:
libavformat/movenc.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '64af59bc4916fac5578b31c89da13c30b591bddf':
avformat: Fix references to removed av_close_input_file in Doxygen
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This allows creation of frame accurate chapter marks from sources
like DVD and BD where the precise chapter location is not known until
the chapter mark has been reached during reading.
Signed-off-by: Martin Storsjö <martin@martin.st>
* commit '22de0f8369f1f3edf1a55e1d275f3c07c617b53e':
mov: Compute max duration among the tracks with a timescale
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '39523030108815242178ac5e209c83070bd1baef':
mov: Set the timescale for data streams
Conflicts:
libavformat/movenc.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'b886f5c2f1e71b3e60e4265c500158d392b4b9a4':
mkv: Allow flushing the current cluster in progress
Conflicts:
libavformat/matroskaenc.c
libavformat/version.h
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '59f595921eb2b848a80a74aa81b6bb43038c9ebe':
mkv: Flush the old cluster before writing a new one
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Allow emitting the current cluster that is being written before
starting a new one, simplifying how to figure out where clusters
are positioned in the output stream (for live streaming).
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
WebM files now support inband text tracks, as described in the
following specification:
http://wiki.webmproject.org/webm-metadata/temporal-metadata/webvtt-in-webm
The Matroska demuxer now detects the presence of WebVTT tracks,
synthesizing WebVTT packets (having codec id AV_CODEC_ID_WEBVTT) and
pushing them downstream in the normal way.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Seeking in certain broken files would cause ogg_read_timestamp
to fail because ogg_packet would go into a state where all packets
of stream 1 would be discarded until the end of the stream.
Bug-Id: 553
CC: libav-stable@libav.org
Signed-off-by: Jan Gerber <j@v2v.cc>
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
This avoids the loss of a packet in many cases if the packet size was wrong.
It also improves detection of packet size changes
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
No case is known to have triggered this, but its more correct to check that the
new size differs.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Calculate the duration as accurately as possible to improve decoding of samples
where the last frame is smaller than the rest.
Example:
Take lossless-audio/luckynight-partial.tak from the FATE suit and convert it
to TTA muxed into matroska:
ffmpeg -i $(SAMPLES)/lossless-audio/luckynight-partial.tak -c:a tta lucky.mka
The framemd5 output for lucky.mka without this patch:
0, 0, 0, 46080, 184320, 7c3751ddd571d2903c3cf0ab4b3e3d0a
0, 46080, 46080, 46080, 184320, 6b70c782ba1da3f933fde2daa4f96b73
0, 92160, 92160, 46080, 184320, dcf70d89c54b9a4f0b302d4ec4fb302d
0, 138240, 138240, 46080, 184320, 48713ca38b388d2ea4abf5b86ed1226f
0, 184320, 184320, 46080, 184320, 12188a23648e7ebfb07cd6fe9197b2ea
0, 230400, 230400, 46080, 184320, 49653ab8186a5d4a044ed284671a26e0
0, 276480, 276480, 46080, 184320, 5e82c6a7fe58c7ea612c03a0a2927dd4
0, 322560, 322560, 46080, 184320, 83dc449dbd9eab5f2e8ad2b4403d6a21
0, 368640, 368640, 46080, 184320, bdd6b92c23d30978d4e802d305b0fc49
With this patch:
0, 0, 0, 46080, 184320, 7c3751ddd571d2903c3cf0ab4b3e3d0a
0, 46080, 46080, 46080, 184320, 6b70c782ba1da3f933fde2daa4f96b73
0, 92160, 92160, 46080, 184320, dcf70d89c54b9a4f0b302d4ec4fb302d
0, 138240, 138240, 46080, 184320, 48713ca38b388d2ea4abf5b86ed1226f
0, 184320, 184320, 46080, 184320, 12188a23648e7ebfb07cd6fe9197b2ea
0, 230400, 230400, 46080, 184320, 49653ab8186a5d4a044ed284671a26e0
0, 276480, 276480, 46080, 184320, 5e82c6a7fe58c7ea612c03a0a2927dd4
0, 322560, 322560, 46080, 184320, 83dc449dbd9eab5f2e8ad2b4403d6a21
0, 368640, 368640, 46080, 184320, bdd6b92c23d30978d4e802d305b0fc49
0, 414720, 414720, 4230, 16920, b50b440c5bbcecb8e9fbece643447593
The duration without this patch was calculated as 418950000000, which is bigger
than uint32_t and as such stored as 2338172288.
With this patch the duration is correctly calculated as 418950.
Signed-off-by: James Almer <jamrial@gmail.com>
Approved-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
In order to encapsuate Opus in Matroska, there is a new element
that has been added to the Matroska Spec, SeekPreRoll. It has the
duration in nanoseconds that has to be decoded before every seek.
Spec: http://matroska.org/technical/specs/index.html#SeekPreRoll
Proposal for encapsulateing Opus in Matroska:
http://wiki.xiph.org/MatroskaOpus
Signed-off-by: Vignesh Venkatasubramanian <vigneshv@google.com>
Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
The mov/mp4 muxer has support for handling negative timestamps
via edit lists (which customarily is used for handling the 1-frame
delay due to B-frames as well).
Using the muxer's native way of handling it is better than using
the generic offsetting. The generic offsetting is a bit too
crude when e.g. the timebase of one track is 1/fps, where the
edit lists can handle it accurately.
Signed-off-by: Martin Storsjö <martin@martin.st>
Uses the 2.5 compatibility header included with the variant of
FFMS2 that uses AviSynth's C-interface. A copy of this header is
now provided in compat/avisynth.
avs_get_row_size_p and avs_get_height_p changed between versions
2.5 and 2.6. Since the avisynth_c.h header that avformat uses
assumes AviSynth 2.6, it would cause 2.5 to crash if given any
kind of real video (the Version() function was known to work,
though).
AvxSynth was unaffected by this issue because, despite being based
on AviSynth 2.5.8 and using 2.5.8's interface version number of 3,
it actually uses 2.6's versions of these functions.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '09c93b1b957f2049ea5fd8fb0e6f4d82680172f2':
hlsenc: Append the last incomplete segment when closing the output
Conflicts:
libavformat/hlsenc.c
See: 4630dfd1eb
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'c9031c7c1446a1a63eff7c0bf50d1ee559adf3fb':
hlsenc: Add a proper dependency on the mpegts muxer
Conflicts:
libavformat/Makefile
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '4b054a3400f728c54470ee6a1eefe1d82420f6a2':
rtpproto: Check the right feature detection macro
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '163a729725c6eb0081b0af41a7279f7d19aee86e':
electronicarts: Let functions always returning the same value return void
Merged-by: Michael Niedermayer <michaelni@gmx.at>
The counter itself shouldn't be wrapped, since it is used for
determining end_pts for the next segment - only wrap the number
used for the segment file name.
Signed-off-by: Martin Storsjö <martin@martin.st>