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>
The RTP muxer enables the actual codepaths within sdp.c,
which depend on hevc.o since e5cfc8fd.
This fixes builds with --disable-everything --enable-muxer=rtp.
Signed-off-by: Martin Storsjö <martin@martin.st>
* commit '3c01039e0bc7d269900e15551f8171c4328a0223':
mov: further expand the list of parsed metadata tags
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'b704b648f9ecb830874627db958a37e004107d1b':
mov: parse XMP metadata on demand
Conflicts:
libavformat/isom.h
libavformat/version.h
See: 054c506e3d
The default is left unchanged at enabled
We can change the default if people prefer but i do not want to do that
in a merge.
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '35384934d6e27e0334060a23a0c83a3cb5cef198':
mov: cosmetics: reorder the list of tags
Conflicts:
libavformat/mov.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
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. So display XMP metadata only when the
user explicitly requires it.
Based on a patch by Marek Fort <marek.fort@chyronhego.com>.
These tags describe the product and quicktime library version respectively.
They originate from Adobe Premiere, but also some other programs use them.
Contrary to other tags, they contain 'raw' data which is not to be
interpreted as iso639 or mac strings.
Based on a patch by Peter Ross <pross@xvid.org>.
This uses the RIFF header stored size to figure out the expected AVI
file size, instead of the actual file. To work fully it requires handling
failed avio_seek() instead of assuming they always succeed.
Some fate file has been cut off and contains half a frame at the end which
previously was not output during demuxing. This frame is now output to
encoder, thus the fate diff update.
Bug-Id: 261
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
* commit '29bc7bfba288ff8572ed967a8752a1dbde7b724b':
rtpproto: Write a warning if the input data written isn't RTP packetized
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Tell the user that the RTP muxer needs to be used to packetize
the data - using the RTP protocol on its own isn't enough.
Signed-off-by: Martin Storsjö <martin@martin.st>
When matroska_execute_seekhead() is called, it goes through the list of
seekhead entries and attempts to read elements not read yet. When doing
this, the parser can find further SeekHead elements, and will extend the
matroska->seekhead list. This can lead to a (practically) infinite loop
with certain broken files. (Maybe it can happen even with valid files.
The demuxer doesn't seem to check correctly whether an element has
already been read.)
Fix this by ignoring elements that were added to the seekhead field
during executing seekhead entries.
This does not fix the possible situation when multiple SeekHead elements
after the file header (i.e. occur after the "before_pos" file position)
point to the same elements. These elements will probably be parsed
multiple times, likely leading to bugs.
Fixes ticket #4162.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Having more than 10 consecutive frames decoded as mp3 should be
considered a clear signal that the sample is mp3 and not mpegps.
Reported-By: Florian Iragne <florian@iragne.fr>
CC: libav-stable@libav.org
This option allows segment filenames to be specified. Unless -hls_flags
single_file is set the filename is used as a string format with the
segment number.
Example:
ffmpeg -f lavfi -i testsrc -c:v h264 -map 0 -hls_segment_filename
bar%03d.ts foo.m3u8
Signed-off-by: Christian Suloway <csuloway@globaleagleent.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Fixes decting channel layout for files with uncommon audio, such as
FL and FR in two separate streams. Introduced in 3bab7cd.
CC: libav-devel@libav.org
Sample-Id: ticket1474.mov
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
I think this is a better way to deal with single frame essence data then my
previous way.
Reviewed-by: Tomas Härdin <tomas.hardin@codemill.se>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '3cec81f4d4f26b62bc2d22bb450bbf51ec3a7f09':
mov: allocate the tag value dynamically
Conflicts:
libavformat/mov.c
See: f31445a82d
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'e352b293712ff7cbde67eba3ce3f8510b037de09':
mov: Add an option for exporting all metadata
Conflicts:
libavformat/isom.h
libavformat/mov.c
libavformat/version.h
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '5639ed9abb58311f82cf3499b682d228290adb09':
mov: do not truncate the language-prefixed tag
Conflicts:
libavformat/mov.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '604c9b1196c70d79bbbc1f23e75f6a8253a74da3':
rtsp: move the CONFIG_ macros to the beginning of the check
Conflicts:
libavformat/rtsp.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This allows to load metadata entries longer than 1024 bytes.
Displaying them is still limited to 1024 characters, but applications
can load them fully now.
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
* commit '01eac895ab350027467ffbe7278740f89ae8be75':
rtmpproto: Only prepend @setDataFrame for onMetaData and |RtmpSampleAccess
Conflicts:
libavformat/rtmpproto.c
See: 60fd790f38
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '3c3b8003a13d9c3668c0bb6d79d2376da3b2b352':
rtmpproto: Simplify code for copying data into the output packet
Conflicts:
libavformat/rtmpproto.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This fixes the build on compilers that interpreted the earlier
code as a variable length array (which we intentionally disallow).
Signed-off-by: Martin Storsjö <martin@martin.st>
This allows one to specify templated segment names for init-segments,
media-segments, and for the base-url in the case of single-file.
Signed-off-by: Martin Storsjö <martin@martin.st>
Currently, when streaming to an RTMP server, any time a packet of type
RTMP_PT_NOTIFY is encountered, the packet is prepended with @setDataFrame
before it gets sent to the server. This is incorrect; only packets for
onMetaData and |RtmpSampleAccess should invoke @setDataFrame on the RTMP
server. Specifically, the current bug manifests itself when trying to
stream onTextData or onCuePoint invocations.
This fix addresses that problem and ensures that the @setDataFrame is
only prepended for onMetaData and |RtmpSampleAccess.
Since data is fed to the rtmp_write function in smaller pieces (depending
on the calling IO buffer size), we can't generally assume that the
whole packet (or even the whole command string) is available at once,
therefore we can only check the command string once the full packet
has been transferred to us for sending.
Based on a patch by Jeffrey Wescott.
Signed-off-by: Martin Storsjö <martin@martin.st>
We try to avoid mixing av_malloc with av_realloc, since av_malloc
may be implemented with functions that can't (formally) be mixed
with the functions used in av_realloc.
Signed-off-by: Martin Storsjö <martin@martin.st>
ffmenc will store recommended encoder configuration if present.
This will allow the user to base on local defaults and
apply only explicitly set options.
If recommended encoder configuration is not present, then
non-default context's options are stored.
Signed-off-by: Lukasz Marek <lukasz.m.luki2@gmail.com>
By appending `?dscp=26` to the URL, IP packets will be classified as
AF31 (assured forwarding for multimedia flows with low probability of
loss). On congested network, this allows a user to assign priorities to
flows.
Signed-off-by: Vincent Bernat <vincent@bernat.im>
By appending `?dscp=26` to the URL, IP packets will be classified as
AF31 (assured forwarding for multimedia flows with low probability of
loss). On congested network, this allows a user to assign priorities to
flows.
Signed-off-by: Vincent Bernat <vincent@bernat.im>
Ensures that the header include order is such that winsock2.h is always
included before windows.h or that windows.h does not include winsock.h.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '79fd186a5035cf16fc0ab288d8f59da8b1ba2c0e':
lavf: Use MoveFileEx instead of rename/_wrename on windows
Conflicts:
configure
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '9326d64ed1baadd7af60df6bbcc59cf1fefede48':
Share the utf8 to wchar conversion routine between lavf and lavu
Conflicts:
libavformat/os_support.h
libavutil/file_open.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This reverts commit b9d08c77a4.
After taking MoveFileEx into use, we can replace files with renames
on windows as well.
Signed-off-by: Martin Storsjö <martin@martin.st>
This allows getting the normal unix semantics, where a rename
allows replacing an existing file.
Based on a suggestion by Reimar Döffinger.
Signed-off-by: Martin Storsjö <martin@martin.st>
This doesn't add any dependency on library internals, since this
only is a static inline function that gets built into each of the
calling functions - this is only to reduce the code duplication.
Signed-off-by: Martin Storsjö <martin@martin.st>
Also see [FFmpeg-devel] [PATCH] avformat/mov: strengthen some table allocations
which contains more fixes but is unfinished
Fixes: signal_sigabrt_7ffff6ac7bb9_3484_cov_1830000177_starfox2.mov
Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '234fb81e3145e9c9aec4ec16266676fab7dc21fa':
movenc: Expose the fragment index as an avoption
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'ee37620b6ae4783cda637408422044b2d14a688c':
movenc: Add a flag for indicating a discontinuous fragment
Conflicts:
libavformat/movenc.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This allows setting the right fragment number if doing
random-access writing of fragments, and also allows reading the
current sequence number.
Signed-off-by: Martin Storsjö <martin@martin.st>
This allows creating a later mp4 fragment without sequentially
writing the earlier ones before (when called from a segmenter).
Normally when writing a fragmented mp4 file sequentially, the
first timestamps of a fragment are adjusted to match the
end of the previous fragment, to make sure the timestamp is the
same, even if it is calculated as the sum of previous fragment
durations. (And for the first packet in a file, the offset of
the first packet is written using an edit list.)
When writing an individual mp4 fragment discontinuously like this
(with potentially writing the earlier fragments separately later),
there's a risk of getting a gap in the timeline if the duration
field of the last packet in the previous fragment doesn't match up
with the start time of the next fragment.
Using this requires setting -avoid_negative_ts make_non_negative
(or -avoid_negative_ts 0).
Signed-off-by: Martin Storsjö <martin@martin.st>
Based on discussion and patch from
"[FFmpeg-devel] [PATCH]Do not ask for mxf samples with unknown field dominance"
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
When the dimensions are the entire frame ones, and the dispose operation
is to reset to background, or the new frame overwrites the new one, then
consider the frame as a key one.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '960aff379da46dcaff61504a57714d4d4e758e41':
lavf: Use wchar functions for filenames on windows for mkdir/rmdir/rename/unlink
Conflicts:
libavformat/os_support.h
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'b9d08c77a44390b0848c06f20bc0e9e951ba6a3c':
lavf: Don't try to update files atomically with renames on windows
Conflicts:
libavformat/dashenc.c
libavformat/hdsenc.c
libavformat/internal.h
libavformat/smoothstreamingenc.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '40665d27e38e6a2f65037878202bd1a398c7683e':
flvdec: Document how the duration is retrieved at the end of the file
Conflicts:
libavformat/flvdec.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This makes sure that the internal utf8 path names are handled
properly - the normal file handling functions assume path names
are in the native codepage, which isn't utf8.
This assumes that the tools outside of lavf don't use the mkdir
definition. (The tools don't do the same reading of command line
parameters as wchar either - they probably won't handle all possible
unicode file parameters properly, but at least work more predictably
if no utf8/wchar conversion is involved.)
This is moved further down in os_support.h, since windows.h shouldn't
be included before winsock2.h, while io.h needs to be included before
the manual defines for lseek functions.
Signed-off-by: Martin Storsjö <martin@martin.st>
On windows, rename(2) will fail if the target file exists. On
unix this trick is used to make sure that people reading the file
either will get the full previous file, or the full new version
of the file, but no intermediate version.
Signed-off-by: Martin Storsjö <martin@martin.st>
In order to support multiple IDAT of fdAT chunks following an fcTL one,
transmit all the chunks between two fcTL ones (or between fcTL and IEND
one).
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'fe42f94ce1023f9c2f7e86404c60afcee5b078a9':
dashenc: Don't segment all video streams when one stream gets a keyframe
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This makes sure that segments actually start at a keyframe (and
makes sure we don't split segments twice in a row, with one segment
consisting of only a handful of packets), when one stream uses b-frames
while another one doesn't.
Signed-off-by: Martin Storsjö <martin@martin.st>
In current versions of ffmpeg, when streaming to an RTMP server, anytime a packet of type
RTMP_PT_NOTIFY is encountered, the packet is prepended with @setDataFrame before it gets sent
to the server. This is incorrect; only packets for onMetaData and |RtmpSampleAccess should
invoke @setDataFrame on the RTMP server. Specifically, the current bug manifests
itself when trying to stream onTextData or onCuePoint invocations.
This fix addresses that problem and ensures that the @setDataFrame is only prepended
for onMetaData and |RtmpSampleAccess.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'f856d9c2f314c493c672dfb9c876da182525da3d':
dashenc: Don't require the stream bitrate to be known
Conflicts:
libavformat/dashenc.c
See: 5f8fcdd448
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Don't write any bitrate attribute if it isn't known. As long as one
doesn't want automatic bitrate switching, playback can work just
fine even if it isn't set.
If strict standard compliance is requested, this is still considered
an error, since the attribute is mandatory according to the spec.
Based on a patch by Rodger Combs.
Signed-off-by: Martin Storsjö <martin@martin.st>
* commit 'fd9badd3cb3b60f5c54dcea35523e1ecca2f67a6':
xwma: Do not leak on failure path
Conflicts:
libavformat/xwma.c
See: 375a0c03a9
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '7fd10f66b722eccc2ada9128766d002f6d751f79':
hdsenc: Clear the previous codec tag when setting up the chained muxer
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'f918b8a2933a65020cbe490ec637d5485c11a692':
hdsenc: Use the right filename in an error message
Merged-by: Michael Niedermayer <michaelni@gmx.at>
The chained flv muxer wants one set of tags - normally this set
could be signaled via the AVOutputFormat codec_tag field (as
smoothstreamingenc and dashenc do). hdsenc doesn't signal it, since
the FLV codec tag arrays aren't exported from flvenc.c. This can
lead to the caller keeping an original codec tag from the originating
container here, which would then be a mismatch for the FLV muxer.
Since we don't really care about what codec tag the caller might
have set, just clear it and let the lavf muxer layer set the right
one for the chained FLV muxer later instead.
Signed-off-by: Martin Storsjö <martin@martin.st>
If a stream's bitrate is not set, this attempts to use its rc_max_rate;
if neither is set, it avoids writing a bandwidth attribute at all.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Regression since 745730c9c2.
The dynamic buffer was not being used or freed.
Reviewed-by: Michael Niedermayer <michaelni@gmx.at>
Signed-off-by: James Almer <jamrial@gmail.com>
* commit '9257692ac15eff7b07540c1f61cebde0d8823fbd':
lavf: Only initialize s->offset once when using avoid_negative_ts make_zero
Conflicts:
libavformat/mux.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '40ed1cbf147d09fc0894bee160f0b6b6d9159fc5':
movenc: Allow writing a DASH sidx atom at the start of files
Conflicts:
libavformat/movenc.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '3847f3ab58b3b74604807394247bf68827258103':
movenc: Add tfra entries for all tracks in a moof
Merged-by: Michael Niedermayer <michaelni@gmx.at>
When given a stream starting at dts=0, it would previously consider
s->offset as uninitialized and set an offset when the second packet
was written, ending up writing two packets with dts=0. By initializing
this field to AV_NOPTS_VALUE, we make sure that we only initialize it
once, on the first packet.
Signed-off-by: Martin Storsjö <martin@martin.st>
* commit '2ded57371abead879bcee56da5131e5fac0d17ef':
movenc: Add support for writing sidx atoms for DASH segments
Conflicts:
Changelog
libavformat/version.h
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '2d9d6afb8d2f284f5e620ecc19f643d5cd3facb8':
movenc: Factorize adding fragment info into a separate function
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '0f9eb9165bb7d7982fdedf64f6bcec856f1bedd6':
movenc: Include empty tracks in iods when writing fragmented mp4
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This is mapped to the faststart flag (which in this case
perhaps should be called "shift and write index at the
start of the file"), which for fragmented files will
write a sidx index at the start.
When segmenting DASH into files, there's usually one sidx
at the start of each segment (although it's not clear to me
whether that actually is necessary). When storing all of it
in one file, the MPD doesn't necessarily need to describe
the individual segments, but the offsets of the fragments can be
fetched from one large sidx atom at the start of the file. This
allows creating files for the DASH ISO BMFF on-demand profile.
Signed-off-by: Martin Storsjö <martin@martin.st>
Previously only tfra entries were added for the first track in each moof.
The frag_info array used for tfra can also be used for writing
other kinds of fragment indexes, where it's more important to
include all tracks.
When the separate_moof option is enabled (as in ismv), we write
a separate moof for each track, so this doesn't make any difference
in that case.
Signed-off-by: Martin Storsjö <martin@martin.st>
This is mostly to serve as a reference example on how to segment
the output from the mp4 muxer, capable of writing the segment
list in four different ways:
- SegmentTemplate with SegmentTimeline
- SegmentTemplate with implicit segments
- SegmentList with individual files
- SegmentList with one single file per track, and byte ranges
The muxer is able to serve live content (with optional windowing)
or create a static segmented MPD.
In advanced cases, users will probably want to do the segmenting
in their own application code.
Signed-off-by: Martin Storsjö <martin@martin.st>
A flag "dash" is added, which enables the necessary flags for
creating DASH compatible fragments.
When this is enabled, one sidx atom is written for each track
before every moof atom.
Signed-off-by: Martin Storsjö <martin@martin.st>
By calling this after writing the moof the first time (for
calculating the moof size), we can avoid intermediate storage
of tfrf_offset in MOVTrack.
Signed-off-by: Martin Storsjö <martin@martin.st>
When writing fragmented streams with an empty initial moov,
we won't have any samples in any tracks when writing the
moov atom, thus trust that any tracks that are added actually
will be present.
Signed-off-by: Martin Storsjö <martin@martin.st>
* commit 'c64f3615118d757dcf76040fe5407bf2b3883206':
flvenc: Send new metadata when FLAG_METADATA_UPDATED is set.
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '4d0cd5f58c892276716f46f4b2702915e5018215':
flvenc: move metadata updates into a single function
Conflicts:
libavformat/flvenc.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This is a generic solution that will not reqiore modifications when new options are added.
This also fixes problem with current implementation when qmin or qmax=-1.
Only 8 bits was sent and read back as 255.
Fixes#1275Fixes#1461
Signed-off-by: Lukasz Marek <lukasz.m.luki2@gmail.com>
In http_open_cnx, the patch restores the AVDictionary if connection needs to be re-tried
because of a authentication/redirect status code.
Previously, if a 401/407/30x status code was encountered, http_open_cnx would restart at the redo label, but any options
used by the underlying protocol would be missing because they were removed by the first attempt.
Signed-off-by: Brandon Lees <brandon@n-hega.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '3a6bb9735053c453f806ceab1d91124648d90aca':
Icecast: Send 100-continue header if possible
See: 17dc39e76b
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This is needed because Icecast since version 2.4.1 doesn't default
to audio/mpeg anymore. AVOption default not used here, since a later
check if -content_type is set is performed and would break.
Signed-off-by: Anton Khirnov <anton@khirnov.net>
This allows for proper error reporting. Only do
this for non-legacy requests as only Icecast >2.4.0
will reply with a proper status.
Libav seems to accept both, 100 and 200 status codes, but
let's stay close to spec.
Signed-off-by: Anton Khirnov <anton@khirnov.net>
According to the DASH spec, Representation IDs should be unique
across all adaptation sets. Fixing that and updating the fate
reference file to reflect this change.
Signed-off-by: Vignesh Venkatasubramanian <vigneshv@google.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Using 100-continue ffmpeg will only send data if the server confirms it,
so if there is an error with auth or mounpoint, this allows that it is
properly reported to the user. Else ffmpeg sends data and just quits at
some point without an error message.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
use a default (audio/mpeg for historical reason) if none. Required since Icecast 2.4.1
Not using AVOption default because this breaks content-type warnings (needs to
detect if no type was set by the user)
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This allows selecting if the demuxer should consider all streams to be
found after the first PMT and add further streams during decoding or if it rather
should scan all that are within the analyze-duration and other limits
Fixes Ticket3762
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '8cb7b7b461b52898765b38e3eff68c0ce88347f3':
movenc: Avoid leaking locally allocated data when returning on errors
Conflicts:
libavformat/movenc.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This avoids a potential crash if writing a fragmented psp mp4
(which probably is only a hypothetical scenario).
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 so
that |tracks| can get invalidated.
This CL assigns |tracks| only before we use it so that it won't be invalidated.
BUG=427266
TEST=Test case in associated bug passes now.
Change-Id: I9c7065fe8f4311ca846076281df2282d190ed344
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '1d8a0c1b43e58332a3a15c67d4adc161713cade8':
movenc: Allow to request not to use edit lists
Conflicts:
libavformat/movenc.c
See: 537ef8bebf
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '897d5c3a4296f3da80b8699d1487328ca2de8e55':
lavf: Print a warning if failed to avoid negative timestamps when requested
Conflicts:
libavformat/mux.c
See: ec6a5fc6cc
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Previously we wrote decoding timestamps here, while the specs
say it should be presentation timestamps.
Signed-off-by: Martin Storsjö <martin@martin.st>
When using the new first_trun flag instead of checking the track id,
we don't need to have a special case for the separate_moof flag
any longer.
This simplifies the complicated codepath ever so slightly.
Signed-off-by: Martin Storsjö <martin@martin.st>
In this case, shift tracks to start from zero instead (potentially
stretching the first sample in tracks that start later than the
first one).
Some software does not support edit lists at all, the adobe flash
player seems to be one of these. This results in AV sync errors when
edit lists are used to adjust AV sync.
Some players, such as QuickTime, don't respect the duration for
audio packets, so if an audio track starts later than the video
track and the first audio sample gets a duration longer than the
actual amount of data in it, the result will be out of sync.
Based on patches by Michael Niedermayer.
Signed-off-by: Martin Storsjö <martin@martin.st>
This is the same logic as is invoked on AVFMT_TS_NEGATIVE,
but which can be enabled manually, or can be enabled
in muxers which only need it in certain conditions.
Also allow using the same mechanism to force streams to start
at 0.
Signed-off-by: Martin Storsjö <martin@martin.st>
* commit '56dc46a1893251e74be1ad63e54fb38d754bb1fe':
riffenc: do not fall back on AVCodecContext.frame_size for MP3
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '91e8d2eb1f7bf3af949008b106ec1ca037b88b0e':
lavf: use the format context strict_std_compliance instead of the codec one
Conflicts:
libavformat/mux.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '2f3fadfbe3c6ad52fad5c614b6067c5401227959':
lavc,lavf: switch to the new vorbis parse API
Conflicts:
libavformat/oggparsevorbis.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '5e80fb7ff226f136dbcf3fed00a2966bf8e9bd70':
lavc: add a public API for parsing vorbis packets.
Conflicts:
doc/APIchanges
libavcodec/Makefile
libavcodec/version.h
libavcodec/vorbis_parser.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '6896f95b2483e52e717e2c75a4fd24fcb0e14b67':
vorbis_parser: add an AV prefix to VorbisParseContext
Conflicts:
libavcodec/vorbis_parser.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
The only parameters needed by the demuxers are the sample rate and sample
count, which can be trivially extracted manually, without resorting to
an avpriv function.
It will not be set unless the codec context is used as the encoding
context, which is discouraged. For MP2, av_get_audio_frame_duration()
will already set the frame size properly. For MP3, set the frame size
explicitly.
It is never an error if this method failed. If rt->live was
explicitly set to 0 (known to be a recorded file), print it
as a warning, otherwise print it as a debug message.
Based on a patch by Michael Niedermayer.
Signed-off-by: Martin Storsjö <martin@martin.st>
TDRL is what we used as a replacement of TYER, and, according to
http://id3.org/id3v2.4.0-changes :
TYER - Year
This frame is replaced by the TDRC frame, 'Recording time'
[F:4.2.5].
So change TDRL usages to TDRC.
Fixes ticket #3694
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This way if we by chance run into a valid PMT we have a more complete
set of streams, also do not reset streams in case we run into a worse
PMT
Fixes Ticket4046
alternatively Ticket4046 could be closed as invalid or wontfix as it contains
some PMTs which lack the 2 subtitle streams
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
* commit '2f221b6a9365aa400061e16266f2d1242f7169f8':
movenc: Define the flag bits using shifts instead of as decimal numbers
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Avoid the creation of files which cannot be successfully decoded by
ffmpeg, for example generated with:
ffmpeg -f lavfi -i sine -af "aselect='not(between(t,100,500))',aresample=min_comp=0.001:min_hard_comp=0.100000" -acodec pcm_s16le -t 1000 -y out_audio.flv
* commit 'aae6b3b918b4133b8cc2d1631196c1d406d0351a':
movenc: Don't write any iso brands in ismv files
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'c55d1d382cd41345a79782ace41f9b43f45dca9a':
movenc: Don't write any tfdt atom for ismv files
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '00c67fe1d0bc7c2ce49daac9c80ea39d5a663b73':
movenc: Write a 0 duration in mdhd and tkhd for an empty initial moov
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'cf589faa5b7aed3bb38e08dcd00bd951e69686d1':
movenc: Add a flag for using default-base-is-moof in tfhd atoms
Conflicts:
libavformat/version.h
Merged-by: Michael Niedermayer <michaelni@gmx.at>
The tfdt atom shouldn't be needed in those cases, we already
write tfxd atoms for ismv anyway, which is roughly equivalent.
This avoids having to declare the iso6 brand for ismv files.
Signed-off-by: Martin Storsjö <martin@martin.st>
ISO/IEC 14496-12:2012/Cor 1:2013 is explicit about how this should be
handled. All zeros doesn't mean that the full file has got a zero
duration, only that the track samples described within the initial moov
have got zero duration. An all ones duration means an indeterminate
duration.
Keep writing a duration consisting of all ones for the ISM mode -
older windows media player versions won't play a file if this is
zero. (Newer windows media player versions play either version fine.)
Signed-off-by: Martin Storsjö <martin@martin.st>
* commit '600d5ee6b12bad144756b0772319bb04796bc528':
movenc: Signal iso6 in compatible_brands when using tfdt
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit 'b2b79eca6fae2466a53c5daa163a37e2474364fc':
movenc: Don't check the custom IO flag when using faststart
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '573b1de2d7f1db71030f91ecdded7d0bc071f6b6':
movenc: Don't use track_id to decide which track is the first in a moof
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Similarly to the omit_tfhd_offset flag added in e7bf085b, this
avoids writing absolute byte positions to the file, making them
more easily streamable.
This is a new feature from 14496-12:2012, so application support
isn't necessarily too widespread yet (support for it in libav was
added in 20f95f21f in July 2014).
Signed-off-by: Martin Storsjö <martin@martin.st>
The custom IO flag actually never is set for muxers, only for
demuxers, so the check was pointless (unless a user intentionally
would set the flag to signal using custom IO).
Signed-off-by: Martin Storsjö <martin@martin.st>
If one track doesn't have any samples within a moof, no traf/trun
is written for it. When the omit_tfhd_offset flag is set, none
of the tfhd atoms have any base_data_offset set, and the implicit
offset (end of previous track fragment data, or start of the moof
for the first trun) is used.
Signed-off-by: Martin Storsjö <martin@martin.st>
* commit 'f64d7e919eabd427f3e6dd4a1219e448c78deb42':
mtv: improve header check and avoid division by zero
Conflicts:
libavformat/mtv.c
See: 8b9b6332df
Merged-by: Michael Niedermayer <michaelni@gmx.at>
add support for AVC Intra 50 720p and 1080p without SPS/PPS header in mxf and mov demuxers. I got the SPS/PPS tables from libbmx.
Reviewed-by: tomas.hardin@codemill.se
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
To keep h264 parsing simple and fast, I used the framesize for selecting the right Panasonic codec label. The framesize is fixed for Panasonic AVC Intra.
This patch only supports AVCI50/100. But in all flavours, i.e. with no SPS/PPS in header.
Reviewed-by: tomas.hardin@codemill.se
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
FooterPartition offset specified in RIP takes precedence over any value written
in PartitionPacks. This fixes the same issue f06f6da tries to fix without
introducing an extra variable.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Without this patch the demuxer can get stuck in a loop if PreviousPartition
points somewhere where there's no PartitionPack, or if klv_read_packet() syncs
back up to the current partition.
This should fix Ticket3278 properly and unbreak Ticket4040.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This check is redundant with the previous commit but it provides
better error messages and feedback while the previous commit
ensures that var_read_string() doesnt return uninitialized arrays
if it itself is feeded with an invalid size possibly through a
different future codepath.
Fixes: asan_heap-oob_49b1e5_12_011.movie
Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Fixes out of array read
Fixes: asan_heap-oob_49b1e5_12_011.movie
Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
should be the raw amount of pixels (for example 3840x1080 for full HD side by
side) and the DisplayWidth/Height in pixels should be the amount of pixels for
one plane (1920x1080 for that full HD stream)."
So, move the aspect ratio check in the mkv_write_stereo_mode() function
and always write the embl when stereo format and/or aspect ration is set.
Also add a few comments to that function.
CC: libav-stable@libav.org
Found-by: Asan Usipov <asan.usipov@gmail.com>
* commit '82ee7d0dda0fec8cdb670f4e844bf5c2927ad9de':
Use gmtime_r instead of gmtime and localtime_r instead of localtime
Conflicts:
libavformat/mov.c
libavformat/mxfenc.c
libavformat/wtvdec.c
libavutil/parseutils.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '9dcf2397219ca796f0fafce2a703770d6fd09920':
lavf: Check the return value of strftime
Conflicts:
libavformat/wtvdec.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
* commit '851ace79a307bea54b44bd6f7ecd3b7861c28ec6':
wtv: Avoid needlessly calling gmtime twice with the same argument
Conflicts:
libavformat/wtvdec.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
While a standalone implementation is nice, we already depend on
gmtime and gmtime_r in a number of places.
Signed-off-by: Martin Storsjö <martin@martin.st>
gmtime isn't thread safe in general. In msvcrt (which lacks gmtime_r),
the buffer used by gmtime is thread specific though.
One call to localtime is left in avconv_opt.c, where thread safety
shouldn't matter (instead of making avconv depend on the libavutil
internal header).
Signed-off-by: Martin Storsjö <martin@martin.st>
If the buffer provided to strftime is too small, the buffer contents
are indeterminate - it does not guarantee actually null terminating
the buffer.
Signed-off-by: Martin Storsjö <martin@martin.st>
* commit '0b66fb4505e0bb43de3797f63f3290f0188d67cc':
flac_picture: prevent a possible out of bound write
This is only partly merged, the condition this checks for
is impossible to be true as it would imply avio_read() to
read more than the size passed to it
See: 731f7eaaad
Merged-by: Michael Niedermayer <michaelni@gmx.at>
None of these are likely unless the user is writing a file with two billion
streams or a duration of around two months.
CC: libav-stable@libav.org
Bug-Id: CID 700568 / CID 700569 / CID 700570 /
CID 700571 / CID 700572 / CID 700573
The new function wraps errno so that its value is correctly reported
when other functions overwrite it (eg. in case of logging).
CC: libav-stable@libav.org
Bug-Id: CID 1135748
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
This has also been independently found and fixed similarly by carl in
f4a3bbf4a3cd375121ea2495817f3e50e831ed48
The 2nd magic check is taken from carls implementation
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
The quality scale field is only supposed to be present if the fourth bit
is set. In practice, lame always sets it, but other tools might not.
CC:libav-stable@libav.org
The ones left using av_gettime are NTP timestamps (for RTCP,
which is specified to send the actual current realtime clock
in RTCP SR packets), and the NUT muxer timestamper, which is
documented as using wallclock time.
Signed-off-by: Martin Storsjö <martin@martin.st>
Previously, AVERROR(EIO) was returned. Now the value is passed from
lower level, thus it is possible to distinguish ECONNREFUSED, ETIMEDOUT,
ENETUNREACH etc.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Previously, AVERROR(EIO) was returned on failure of
http_open_cnx_internal(). Now the value is passed to upper level, thus
it is possible to distinguish ECONNREFUSED, ETIMEDOUT, ENETUNREACH etc.
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>