1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-11-26 19:01:44 +02:00
Commit Graph

1219 Commits

Author SHA1 Message Date
James Almer
c100330a8f avformat/movenc: reindent after the previous commit 2017-08-09 23:15:38 -03:00
Sasi Inguva
e7e1fbc49b lavf/movenc.c: Set sgpd and sbgp atoms to represent decoder delay for AAC.
According to https://developer.apple.com/library/content/documentation/QuickTime/QTFF/QTFFAppenG/QTFFAppenG.html and ISO-IEC-14496-12 Section 10.1.1.1 and 10.1.1.3

Signed-off-by: Sasi Inguva <isasi@google.com>
Reviewed-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2017-08-10 02:43:53 +02:00
Clément Bœsch
850a45aef1 lavf/movenc: support GPMF track (gpmd) remuxing
See https://github.com/gopro/gpmf-parser for more information on the
data stream itself.
2017-07-24 14:43:40 +02:00
Kieran O'Leary
264f6c6f95 movenc: Add 'keywords' metadata
Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
2017-07-13 13:34:01 +01:00
John Stebbins
369a3e111c movenc: allow alternative hvc1 h.265 codec tag
If AVCodecParameters.codec_tag is 'hvc1' use it instead of 'hev1' for
h.265 streams. QuickTime (and other Apple software) requires 'hvc1'.

(cherry picked from commit 84ab1cc437)
Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
2017-07-05 15:55:25 -04:00
John Stebbins
974d508e57 movenc: write correct format hvcc when tag is hvc1
(cherry picked from commit 1ea9b7fdf9)
Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
2017-07-05 15:55:25 -04:00
John Stebbins
38d808d72e movenc: move tags definitions to where they are used
(cherry picked from commit 1c64bae648)
Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
2017-07-05 15:55:25 -04:00
John Stebbins
e199d90da6 movenc: simplify codec_tag lookup
mux.c init_muxer() already sets codec_tag correctly in the cases
simplified here.

This also adds the capability to support alternative tags for the
same codec_id.

(cherry picked from commit f6f86f432f)
Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
2017-07-05 15:55:25 -04:00
John Stebbins
95f3c85976 movenc: use correct tag list for AVOutputFormat.codec_tag
ff_mp4_obj_type contains the wrong type of tags for
AVOutputFormat.codec_tag. AVOutputFormat.codec_tag is used to
validate AVCodecParameters.codec_tag so needs to be the same
type of tag.

Creates new tag lists for mp4 and ismv.  New tag lists support
same list of codecs found in ff_mp4_obj_type. psp uses the same
tag list as mp4 since these both use mp4_get_codec_tag to look up tags.

(cherry picked from commit 713efb2c0d)
Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
2017-07-04 15:49:34 -04:00
erankor
15bd309af8 movenc: encryption with time code track fix
instead of deciding whether to encrypt based on the encryption scheme,
decide according to whether cenc was initialized or not.
mov_create_timecode_track calls ff_mov_write_packet with a track that
doesn't have cenc initialized.

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2017-05-28 03:05:59 +02:00
James Almer
f8c73e8753 avformat/movenc: always check for new extradata on a packet
Don't just look at zero sized packets, and also check for AAC extradata
updates, in preparation for the following patches.

Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
Signed-off-by: James Almer <jamrial@gmail.com>
2017-05-24 20:27:59 -03:00
James Almer
5ff31babfc avformat/movenc: remove experimental check for VP9 streams
The muxer has been updated and is now complaint with the v1.0 of the spec.
2017-05-17 20:52:50 -03:00
Hendrik Leppkes
64ad44a381 movenc/isom: update vpcC box to version 1.0 of the specification
This brings our generation of the vpcC box up to date to version 1.0
of the VP Codec ISO Media File Format Binding.

Specifically, color/transfer properties are now written with values
based on ISO/IEC 23001-8, which is the same reference specification the
AVColor* enumerations are based on.
2017-05-16 01:53:05 +02:00
Lucas Cooper
77bc507f6f avformat/movenc: Explicitly address potential division by zero.
find_fps attempts to infer framerate from AVCodec's timebase. When this
results in a frame rate that isn't explicitly marked as supported in
av_timecode_check_frame_rate, find_fps returns the AVStream's
avg_frame_rate, which, per avformat.h, _may_ be set (or not).

mov_get_mpeg2_xdcam_codec_tag, mov_get_h264_codec_tag and
find_compressor attempt to call av_q2d on the return value of find_fps,
which in the above case, may result in division by zero and therefore,
an undefined frame rate when NaN is converted to int.

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2017-04-29 03:54:31 +02:00
Matthew Gregan
b905ba5bc1 avformat/movenc: Fix potential leak of sgpd_entries array.
Signed-off-by: Matthew Gregan <kinetik@flim.org>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2017-04-12 23:12:06 +02:00
Michael Niedermayer
6268f2ca7b avformat/movenc: Fix mix of declaration and statement
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2017-04-11 23:38:38 +02:00
Matthew Gregan
0c4d208296 avformat/movenc: Add experimental muxing support for Opus in ISO BMFF (MP4).
Based on the draft spec at http://vfrmaniac.fushizen.eu/contents/opus_in_isobmff.html

'-strict -2' is required to create files in this format.

Signed-off-by: Matthew Gregan <kinetik@flim.org>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2017-04-11 21:28:44 +02:00
James Almer
d36a3f5a78 avformat/movenc: auto insert vp9_superframe bsf when needed
Experimental VP9 support was added to the muxer recently.

Reviewed-by: Ronald S. Bultje <rsbultje@gmail.com>
Signed-off-by: James Almer <jamrial@gmail.com>
2017-04-10 10:26:44 -03:00
Clément Bœsch
549045254c Fix all -Wformat warnings raised by DJGPP 2017-03-29 14:49:29 +02:00
Clément Bœsch
cd4d6cba12 lavf: fix usages of av_get_codec_tag_string() 2017-03-29 14:49:29 +02:00
James Almer
86dee47e39 avformat/movenc: allow st3d and sv3d mov atoms to be written in strict unofficial mode
They are unofficial extensions to the format for the time being, not
an experimental feature.
2017-03-27 18:54:42 -03:00
James Almer
a715e5a276 avformat/movenc: restrict st3d and sv3d mov atoms to MODE_MP4 2017-03-27 18:53:52 -03:00
Aaron Colwell
b4189590a5 movenc: Add support for writing st3d and sv3d boxes.
Signed-off-by: James Almer <jamrial@gmail.com>
2017-03-27 18:53:52 -03:00
wm4
ddef3d902f avformat, ffmpeg: deprecate old rotation API
The old "API" that signaled rotation as a metadata value has been
replaced by DISPLAYMATRIX side data quite a while ago.

There is no reason to make muxers/demuxers/API users support both. In
addition, the metadata API is dangerous, as user tags could "leak" into
it, creating unintended features or bugs.

ffmpeg CLI has to be updated to use the new API. In particular, we must
not allow to leak the "rotate" tag into the muxer. Some muxers will
catch this properly (like mov), but others (like mkv) can add it as
generic tag. Note applications, which use libavformat and assume the
old rotate API, will interpret such "rotate" user tags as rotate
metadata (which it is not), and incorrectly rotate the video.

The ffmpeg/ffplay tools drop the use of the old API for muxing and
demuxing, as all muxers/demuxers support the new API. This will mean
that the tools will not mistakenly interpret per-track "rotate" user
tags as rotate metadata. It will _not_ be treated as regression.

Unfortunately, hacks have been added, that allow the user to override
rotation by setting metadata explicitly, e.g. via

  -metadata:s:v:0 rotate=0

See references to trac #4560. fate-filter-meta-4560-rotate0 tests this.
It's easier to adjust the hack for supporting it than arguing for its
removal, so ffmpeg CLI now explicitly catches this case, and essentially
replaces the "rotate" value with a display matrix side data. (It would
be easier for both user and implementation to create an explicit option
for rotation.)

When the code under FF_API_OLD_ROTATE_API is disabled, one FATE
reference file has to be updated (because "rotate" is not exported
anymore).

Tested-by: Michael Niedermayer <michael@niedermayer.cc>
Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
2017-03-27 13:20:27 +02:00
James Almer
4de591e6fb Merge commit '83548fe894cdb455cc127f754d09905b6d23c173'
* commit '83548fe894cdb455cc127f754d09905b6d23c173':
  lavf: fix usage of AVIOContext.seekable

Merged-by: James Almer <jamrial@gmail.com>
2017-03-21 17:02:30 -03:00
Jan Ekström
763e823754 movenc: add support for track names in ISML manifests
This enables having multiple tracks of the same type which would
be treated as different things by the media server (as opposed to
different bit rate versions of the same track). According to the
smooth streaming specification, just setting the systemLanguage
tag is not enough to note that a track with the same attributes
differs from another one.

Reviewed-by: Martin
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2017-02-12 20:18:32 +01:00
Carl Eugen Hoyos
74c576957a lavf/movenc: Remove two unused variables. 2017-02-10 12:40:43 +01:00
Diego Biurrun
a25dac976a Use bitstream_init8() where appropriate 2017-02-07 18:27:21 +01:00
Anton Khirnov
fd9212f2ed Mark some arrays that never change as const. 2017-02-01 10:42:59 +01:00
Alexandra Hájková
a895292f27 mov: Convert to the new bitstream reader 2017-01-13 10:27:03 +01:00
Diego Biurrun
0b77a59336 Use correct printf conversion specifiers for POSIX integer types 2016-12-23 19:30:00 +01:00
Matthew Gregan
156fbbb562 avformat/movenc: Restrict experimental VP9 support to MODE_MP4.
Signed-off-by: Matthew Gregan <kinetik@flim.org>
Signed-off-by: James Almer <jamrial@gmail.com>
2016-11-21 16:07:14 -03:00
Matthew Gregan
7dc4200c38 Add experimental muxing support for FLAC in ISO BMFF (MP4).
Based on the draft spec at https://git.xiph.org/?p=flac.git;a=blob;f=doc/isoflac.txt

'-strict experimental' is required to create files in this format.

Signed-off-by: Matthew Gregan <kinetik@flim.org>
Signed-off-by: James Almer <jamrial@gmail.com>
2016-11-21 15:36:42 -03:00
Michael Niedermayer
709c87109d avformat/movenc: Check frame rate before use.
Fixes division by 0
This is similar to how avg_frame_rate is checked elsewhere
Fixes: 6d24add0455f41b1b45b7ba615cd46f3/asan_generic_dc34c3_5480_0a2ef411cae999b9871ed71a2e481b71.mov

Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-11-17 19:03:41 +01:00
Hendrik Leppkes
4a485daa7f Merge commit '4f7723cb3b913c577842a5bb088c804ddacac8df'
* commit '4f7723cb3b913c577842a5bb088c804ddacac8df':
  movenc: Add an option for skipping writing the mfra/tfra/mfro trailer

Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
2016-11-17 14:54:51 +01:00
Hendrik Leppkes
8fad4b4e25 Merge commit '785c25443b56adb6dbbb78d68cccbd9bd4a42e05'
* commit '785c25443b56adb6dbbb78d68cccbd9bd4a42e05':
  movenc: Apply offsets on timestamps when peeking into interleaving queues

Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
2016-11-13 22:57:02 +01:00
Carl Eugen Hoyos
222f59afd1 lavf/movenc: Do not print an error when muxing gray8 rawvideo.
This was fixed in 9a27780821
2016-11-05 00:43:31 +01:00
Rodger Combs
42cb050a05
lavf/movenc+dashenc: add automatic bitstream filtering
This is disabled by default when the empty_moov flag is enabled
2016-10-24 03:53:23 -05:00
Rodger Combs
e83d5d7e58
lavf/movenc: add deinit function 2016-10-24 03:53:22 -05:00
Michael Niedermayer
18ad44d145 avformat/movenc: Skip duration check for discontinuous fragments
Found-by: Daemon404
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-10-19 13:25:21 +02:00
Michael Niedermayer
ed2112fb36 avformat/movenc: Check frame rate in mov_write_uuidprof_tag()
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-10-10 00:58:16 +02:00
Michael Niedermayer
21bffa93a6 avformat/movenc: Switch mov_write_uuidprof_tag() to avg_frame_rate
Using the stream timebase simply overflows
Fix integer overflow in psp framerate computation

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-10-10 00:58:16 +02:00
Anton Khirnov
83548fe894 lavf: fix usage of AVIOContext.seekable
It is supposed to be a flag. The only currently defined value is
AVIO_SEEKABLE_NORMAL, but other ones may be added in the future.
However all the current lavf code treats this field as a bool (mainly
for historical reasons).
Change all those cases to properly check for AVIO_SEEKABLE_NORMAL.
2016-09-30 16:54:33 +02:00
Carl Eugen Hoyos
e84eeca577 lavf/movenc: Put correct display aspect ratio in ARES atom. 2016-09-29 15:41:17 +02:00
Jan Ekström
cc725ebe48 movenc: Add support for writing language codes into ISML manifests
Streaming servers appear to ignore all other language metadata.

Signed-off-by: Jan Ekström <jeebjp@gmail.com>
Signed-off-by: Josh de Kock <josh@itanimul.li>
2016-09-29 10:32:03 +01:00
Jan Ekström
6c10f8fe76 movenc: use similar logic to DASH when writing bit rate to ISML
This way, in case of bit rate not being set, max_bitrate will be
used instead. This enables, for example, re-using max_bitrate
information from the input or doing transcoding with a rate
control mode that is not bit rate based.

Signed-off-by: Jan Ekström <jeebjp@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-09-28 23:45:11 +02:00
Carl Eugen Hoyos
46aae84616 lavf/movenc: Allow to disable writing the timecode track.
Fixes ticket #5492.
2016-09-26 08:50:48 +02:00
Paul B Mahol
88d79dbd16 avformat/movenc: write pasp atom even if sar.num == sar.den
Signed-off-by: Paul B Mahol <onemda@gmail.com>
2016-09-22 23:59:46 +02:00
Michael Niedermayer
51000b9945 avformat/movenc: Make the packet check more tolerant
Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-09-16 11:44:13 +02:00
Michael Niedermayer
2834313933 avformat/movenc: Check packet in mov_write_single_packet() too
Fixes assertion failure

Found-by: durandal117
Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-09-16 11:43:56 +02:00
Michael Niedermayer
deabcd2c05 avformat/movenc: Factor check_pkt() out
Reviewed-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-09-16 11:43:47 +02:00
Michael Niedermayer
68f4c2163e avformat/movenc: Check first DTS similar to dts difference
Fixes assertion failure
Fixes: b84b53855a0b74560e64c6f45f505a13/signal_sigabrt_7ffff6ae7c37_3837_ef4e243ea5b4fa8d0becf4afe9166604.avi

Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-09-10 00:50:36 +02:00
Erkki Seppälä
499e8b0952 avformat/movenc: added ability to use original stream ids as track ids instead of regenerating them
Sometimes it's useful to be able to define the exact track numbers in
the generated track, instead of always beginning at track id 1. Using
the option use_stream_ids_as_track_ids now copies the use stream ids
to track ids. Dynamically generated tracks (ie. tmcd) have their track
numbers defined as continuing from the highest numbered stream id.

Signed-off-by: Erkki Seppälä <erkki.seppala.ext@nokia.com>
Signed-off-by: OZOPlayer <OZOPL@nokia.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-09-01 14:56:10 +02:00
Carl Eugen Hoyos
c1de1f0469 lavf/movenc: Add a missing assignment if memory allocation fails.
Fixes a warning:
libavformat/movenc.c:5947:17: warning: statement with no effect [-Wunused-value]
2016-08-24 07:38:19 +02:00
Michael Niedermayer
ca906e8190 avformat/movenc: Free extradata after successfull allocation of new instead of before
This avoids erroring out with extradata lost and extradata size mismatching

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-08-19 16:02:16 +02:00
Umair Khan
4f6f56114e avformat/movenc: allow rewriting extradata
Signed-off-by: Umair Khan <omerjerk@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-08-19 15:30:52 +02:00
James Almer
0c75bd8e3c avcodec/dnxhddata: move avpriv_dnxhd_parse_header_prefix to a header
It's a small and simple function that can be inlined.

This removes one private symbol and should reduce object dependencies with the next
major bump

Signed-off-by: James Almer <jamrial@gmail.com>
2016-07-25 12:19:39 -03:00
Mark Reid
e47981dab7 libavformat/movenc: add dnxhr compatibility for apple players
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-07-23 13:54:12 +02:00
Martin Storsjö
4f7723cb3b movenc: Add an option for skipping writing the mfra/tfra/mfro trailer
When writing a fragmented file, we by default write an index pointing
to all the fragments at the end of the file. This causes constantly
increasing memory usage during the muxing. For live streams, the
index might not be useful at all.

A similar fragment index is written (but at the start of the file) if
the global_sidx flag is set. If ism_lookahead is set, we need to keep
data about the last ism_lookahead+1 fragments.

If no fragment index is to be written, we don't need to store information
about all fragments, avoiding increasing the memory consumption
linearly with the muxing runtime.

This fixes out of memory situations with long live mp4 streams.

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-07-08 14:11:15 +03:00
Martin Storsjö
785c25443b movenc: Apply offsets on timestamps when peeking into interleaving queues
Signed-off-by: Martin Storsjö <martin@martin.st>
2016-06-28 14:16:06 +03:00
David Murmann
0296b4b8d8 avformat/movenc: add option to use keys/mdta atoms for metadata
Add -movflags use_metadata_tags to the mov muxer. This will cause
the muxer to write all metadata to the file in the keys and mtda
atoms.

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-06-25 14:38:14 +02:00
Clément Bœsch
1e9b79b2db movenc: mark astronomical_body const string as static 2016-06-25 10:30:28 +02:00
Michael Niedermayer
46a60fe184 avformat: Fix ff_interleaved_peek()
Fixes assertion failures in movenc

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-06-25 03:04:55 +02:00
Clément Bœsch
2c45254a77 Merge commit 'b84f3a40034d28828c4ca639d012479a7eaace28'
* commit 'b84f3a40034d28828c4ca639d012479a7eaace28':
  movenc: Write 'loci' geotag metadata for 3gp and mp4

Merged-by: Clément Bœsch <clement@stupeflix.com>
2016-06-24 11:08:33 +02:00
Clément Bœsch
7a1785014b Merge commit 'f12a705ee570e16ca692c66b62821a2dbdf82566'
* commit 'f12a705ee570e16ca692c66b62821a2dbdf82566':
  movenc: Factorize a function for finding a metadata entry and the associated language

Merged-by: Clément Bœsch <clement@stupeflix.com>
2016-06-24 11:01:40 +02:00
Matthieu Bouron
7e4e8fdd34 Merge commit '72d621069fc301b431fac36b5281699a362562f2'
* commit '72d621069fc301b431fac36b5281699a362562f2':
  movenc: Add a missed const

Merged-by: Matthieu Bouron <matthieu.bouron@stupeflix.com>
2016-06-23 22:30:37 +02:00
Matthieu Bouron
b1e1da52fe Merge commit 'e1eb0fc960163402bbb4e630185790488f7d28ed'
* commit 'e1eb0fc960163402bbb4e630185790488f7d28ed':
  movenc: Use packets in interleaving queues for the duration at the end of fragments

Merged-by: Matthieu Bouron <matthieu.bouron@stupeflix.com>
2016-06-23 22:02:31 +02:00
Matthieu Bouron
4e7a921282 Merge commit 'dbbaad32e36b9046cd19d6e3329e2ca7ab49b401'
* commit 'dbbaad32e36b9046cd19d6e3329e2ca7ab49b401':
  movenc: Provide output bytestream markers for fragmented content

Merged-by: Matthieu Bouron <matthieu.bouron@stupeflix.com>
2016-06-23 17:52:14 +02:00
Clément Bœsch
8df1dbd798 Merge commit '5afb94c817abffad030c6b94d7003dca8aace3d5'
* commit '5afb94c817abffad030c6b94d7003dca8aace3d5':
  Mark read-only tables as static

Merged-by: Clément Bœsch <u@pkh.me>
2016-06-21 22:09:35 +02:00
Clément Bœsch
8ef57a0d61 Merge commit '41ed7ab45fc693f7d7fc35664c0233f4c32d69bb'
* commit '41ed7ab45fc693f7d7fc35664c0233f4c32d69bb':
  cosmetics: Fix spelling mistakes

Merged-by: Clément Bœsch <u@pkh.me>
2016-06-21 21:55:34 +02:00
Kongqun Yang
54327c2b34 Add experimental support for vp9 in iso-bmff
Implemented according to the draft specification
"VP Codec ISO Media File Format Binding":
http://www.webmproject.org/vp9/#draft-vp-codec-iso-media-file-format-binding

'-strict -2' is required to use this feature.

Signed-off-by: Ronald S. Bultje <rsbultje@gmail.com>
2016-06-17 10:36:09 -04:00
Michael Niedermayer
5a8b41b4a7 avformat/movenc: Skip unsupported video tracks in timecode generation
Fixes Ticket5414

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-06-06 01:30:48 +02:00
Marton Balint
0d0b9397d6 avformat/movenc: remove useless if and reindent
Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
Signed-off-by: Marton Balint <cus@passwd.hu>
2016-05-31 00:35:16 +02:00
Marton Balint
15005701b5 avformat/movenc: propagate shift_data errors properly
The second one is not explicitly needed, as res is not reset, but it is there
for consistency.

Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
Signed-off-by: Marton Balint <cus@passwd.hu>
2016-05-31 00:35:16 +02:00
Mark Reid
d74cc61574 libavformat/movenc: remove unnecessary null check
Fixes CID1361955

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-05-30 02:33:06 +02:00
Michael Niedermayer
dac030d3aa avformat/movenc: Fix potential track width/height overflows
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-05-29 04:42:04 +02:00
Michael Niedermayer
17d320800b avformat/movenc: Avoid integer overflow
Fixes: CID1361947

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-05-29 03:56:23 +02:00
Michael Niedermayer
86d703fd55 avformat/movenc: Fix memleak of reshuffled packet
Fixes CID1361952

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-05-28 03:13:14 +02:00
Michael Niedermayer
5db111757c avformat/movenc: Rename reshuffles return variable to ensure it is not mixed up
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-05-28 02:55:33 +02:00
Martin Storsjö
b84f3a4003 movenc: Write 'loci' geotag metadata for 3gp and mp4
Signed-off-by: Martin Storsjö <martin@martin.st>
2016-05-19 10:46:55 +03:00
Martin Storsjö
f12a705ee5 movenc: Factorize a function for finding a metadata entry and the associated language
Signed-off-by: Martin Storsjö <martin@martin.st>
2016-05-19 10:46:54 +03:00
Michael Niedermayer
daec1651f1 movenc: Write ?xyz geotag metadata for mov files
Signed-off-by: Martin Storsjö <martin@martin.st>
2016-05-19 10:46:53 +03:00
Martin Storsjö
72d621069f movenc: Add a missed const
This was missed in e1eb0fc960, when ff_interleaved_peek was
changed to include const during the evolution of the patch.

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-05-18 21:59:48 +03:00
Martin Storsjö
e1eb0fc960 movenc: Use packets in interleaving queues for the duration at the end of fragments
As long as caller only writes packets using av_interleaved_write_frame
with no manual flushing, this should allow us to always have accurate
durations at the end of fragments, since there should be at least
one queued packet in each stream (except for the stream where the
current packet is being written, but if the muxer itself does the
cutting of fragments, it also has info about the next packet for that
stream).

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-05-18 10:37:03 +03:00
Martin Storsjö
dbbaad32e3 movenc: Provide output bytestream markers for fragmented content
Signed-off-by: Martin Storsjö <martin@martin.st>
2016-05-18 10:36:55 +03:00
Derek Buitenhuis
ee96b7b1c6 Merge commit '74383def8f46805faf3391c98516b248108a9a6b'
* commit '74383def8f46805faf3391c98516b248108a9a6b':
  movenc: Handle pts == NOPTS when autoflushing

Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
2016-05-12 14:27:34 +01:00
Derek Buitenhuis
a022c1fe76 Merge commit '0abb07bad7026a945a31ba4047e6583c8b3fa3da'
* commit '0abb07bad7026a945a31ba4047e6583c8b3fa3da':
  movenc: Update a comment to reflect how the code actually behaves

Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
2016-05-12 14:27:01 +01:00
Diego Biurrun
5afb94c817 Mark read-only tables as static 2016-05-05 10:48:34 +02:00
Vittorio Giovara
41ed7ab45f cosmetics: Fix spelling mistakes
Signed-off-by: Diego Biurrun <diego@biurrun.de>
2016-05-04 18:16:21 +02:00
Diego Biurrun
0f40c90984 Drop pointless assert.h #includes 2016-05-03 15:45:10 +02:00
Martin Storsjö
74383def8f movenc: Handle pts == NOPTS when autoflushing
This muxer generally handles pts == NOPTS by using dts instead;
do this for consistency here as well.

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-04-21 11:20:39 +03:00
Martin Storsjö
0abb07bad7 movenc: Update a comment to reflect how the code actually behaves
This codepath isn't quite as bad as it used to sound, if fragments
are cut automatically at video packets.

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-04-19 22:43:00 +03:00
Derek Buitenhuis
6f69f7a8bf Merge commit '9200514ad8717c63f82101dc394f4378854325bf'
* commit '9200514ad8717c63f82101dc394f4378854325bf':
  lavf: replace AVStream.codec with AVStream.codecpar

This has been a HUGE effort from:
    - Derek Buitenhuis <derek.buitenhuis@gmail.com>
    - Hendrik Leppkes <h.leppkes@gmail.com>
    - wm4 <nfxjfg@googlemail.com>
    - Clément Bœsch <clement@stupeflix.com>
    - James Almer <jamrial@gmail.com>
    - Michael Niedermayer <michael@niedermayer.cc>
    - Rostislav Pehlivanov <atomnuker@gmail.com>

Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
2016-04-10 20:59:55 +01:00
Lou Logan
06eef96b69 fix some a/an typos
Signed-off-by: Lou Logan <lou@lrcd.com>
2016-03-28 14:13:17 -08:00
Carl Eugen Hoyos
bd2cc3c42c lavf/movenc: Fix help output.
Fixes ticket #5323.
2016-03-10 18:42:27 +01:00
Mats Peterson
5111c1bef3 lavf/movenc: Add support for palette side data
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-03-04 04:02:27 +01:00
Syed Andaleeb Roomy
b4dcd351ec movenc: Timecode in MP4 Although MP4 does not have a concrete specification to store timecode information, the following technical note from Apple describes a way to achieve this via timecode track, similar to how it is done for MOV files.
https://developer.apple.com/library/mac/technotes/tn2174/_index.html

- Enabled creation of timecode tracks for MP4 in the same way as MOV.
- Used nmhd as media information header of timecode track of MP4 instead
  of gmhd used in MOV, thus avoiding tcmi also, as recommended above.
- Bypassed adding source reference field for MP4, as suggested above.

Issue: https://trac.ffmpeg.org/ticket/4704

Signed-off-by: Syed Andaleeb Roomy <andaleebcse@gmail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-02-28 03:47:23 +01:00
Mats Peterson
9a27780821 lavf/movenc: Add palette to video sample description
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-02-27 01:28:48 +01:00
Anton Khirnov
9200514ad8 lavf: replace AVStream.codec with AVStream.codecpar
Currently, AVStream contains an embedded AVCodecContext instance, which
is used by demuxers to export stream parameters to the caller and by
muxers to receive stream parameters from the caller. It is also used
internally as the codec context that is passed to parsers.

In addition, it is also widely used by the callers as the decoding (when
demuxer) or encoding (when muxing) context, though this has been
officially discouraged since Libav 11.

There are multiple important problems with this approach:
    - the fields in AVCodecContext are in general one of
        * stream parameters
        * codec options
        * codec state
      However, it's not clear which ones are which. It is consequently
      unclear which fields are a demuxer allowed to set or a muxer allowed to
      read. This leads to erratic behaviour depending on whether decoding or
      encoding is being performed or not (and whether it uses the AVStream
      embedded codec context).
    - various synchronization issues arising from the fact that the same
      context is used by several different APIs (muxers/demuxers,
      parsers, bitstream filters and encoders/decoders) simultaneously, with
      there being no clear rules for who can modify what and the different
      processes being typically delayed with respect to each other.
    - avformat_find_stream_info() making it necessary to support opening
      and closing a single codec context multiple times, thus
      complicating the semantics of freeing various allocated objects in the
      codec context.

Those problems are resolved by replacing the AVStream embedded codec
context with a newly added AVCodecParameters instance, which stores only
the stream parameters exported by the demuxers or read by the muxers.
2016-02-23 17:01:58 +01:00
Marton Balint
5f64f3d8cf avformat/movenc: use ff_parse_creation_time_metadata
Signed-off-by: Marton Balint <cus@passwd.hu>
2016-02-14 01:51:14 +01:00
Derek Buitenhuis
bc9a5965c8 Merge commit '9f61abc8111c7c43f49ca012e957a108b9cc7610'
This also deprecates our old duplicated callbacks.

* commit '9f61abc8111c7c43f49ca012e957a108b9cc7610':
  lavf: allow custom IO for all files

Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
2016-02-10 14:42:41 +00:00
Michael Niedermayer
fe3fed0b14 Update demuxers and protocols for protocol whitelist support
Reviewed-by: Andreas Cadhalpun <andreas.cadhalpun@googlemail.com>
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-02-02 04:16:50 +01:00
Anton Khirnov
9f61abc811 lavf: allow custom IO for all files
Some (de)muxers open additional files beyond the main IO context.
Currently, they call avio_open() directly, which prevents the caller
from using custom IO for such streams.

This commit adds callbacks to AVFormatContext that default to
avio_open2()/avio_close(), but can be overridden by the caller. All
muxers and demuxers using AVIO are switched to using those callbacks
instead of calling avio_open()/avio_close() directly.

(de)muxers that use the URLProtocol layer directly instead of AVIO
remain unconverted for now. This should be fixed in later commits.
2016-01-24 16:45:32 +01:00
Michael Niedermayer
6e249466cc avformat/movenc: Check that pkt duration is within 32bit range
Durations outside are not supported

Fixes Ticket5114
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-01-09 03:38:03 +01:00
Michael Niedermayer
389ce22b5f avformat/movenc: Use strict_std_compliance from the muxer layer instead of the encoder layer
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-12-30 20:06:04 +01:00
Hendrik Leppkes
f95385dd58 Merge commit '5845a8273e4694e0254ad728970b82bb64fd8bc0'
* commit '5845a8273e4694e0254ad728970b82bb64fd8bc0':
  movenc: use the CPB props side data

Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
2015-12-17 13:50:36 +01:00
erankor
4469e8ebb2 movenc: support cenc (common encryption)
support writing encrypted mp4 using aes-ctr, conforming to ISO/IEC
23001-7.

3 new parameters were added:
- encryption_scheme - allowed values are none (default) and cenc-aes-ctr
- encryption_key - 128 bit encryption key (hex)
- encryption_kid - 128 bit encryption key identifier (hex)

Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2015-12-15 14:16:28 +01:00
Anton Khirnov
5845a8273e movenc: use the CPB props side data
Do not access the encoder options, since it makes no sense when the
AVStream codec context is not the encoding context.
2015-12-06 10:26:01 +01:00
Clément Bœsch
43ecec0f03 avformat: use AV_OPT_TYPE_BOOL in a bunch of places 2015-12-04 15:43:33 +01:00
Yann Coupin
d89c4846e0 avformat/movenc: HE-AAC correct FourCC in ISML
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2015-12-04 03:52:25 +01:00
Derek Buitenhuis
64db3639af Merge commit 'ca489564ae150bc41764f175b88151d883e69ae0'
* commit 'ca489564ae150bc41764f175b88151d883e69ae0':
  movenc: add fallback audio track tref support

Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
2015-11-22 17:41:51 +00:00
Derek Buitenhuis
3e0daf0716 Merge commit 'bef3b1f59f036aba4a5fe599b2480f6bd9e6b280'
* commit 'bef3b1f59f036aba4a5fe599b2480f6bd9e6b280':
  movenc: Allow setting start_dts/start_cts before writing actual packets

Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
2015-11-18 16:40:16 +00:00
John Stebbins
ca489564ae movenc: add fallback audio track tref support
This feature allows making associations between audio tracks
that apple players recognize.  E.g. when an ac3 track has a
tref that points to an aac track, devices that don't support
ac3 will automatically fall back to the aac track.

Apple used to *guess* these associations, but new products
(AppleTV 4) no longer guess and this association can only
be made explicitly now using the "fall" tref.

Signed-off-by: Anton Khirnov <anton@khirnov.net>
2015-11-18 11:38:03 +01:00
Derek Buitenhuis
6c9fb32ae4 Merge commit '09e431b9e3674804172e7b0a0f865b65ec09739a'
* commit '09e431b9e3674804172e7b0a0f865b65ec09739a':
  movenc: Assume streams starting at pts=0 for discontinuous fragments with editlists

Merged-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
2015-11-17 14:55:22 +00:00
Martin Storsjö
bef3b1f59f movenc: Allow setting start_dts/start_cts before writing actual packets
By writing a zero-sized packet, the caller can communicate the
start_dts/start_cts for the stream without actually writing
the first packet.

This allows doing random-access writing of fragments when the
start dts of the stream isn't zero, so that the edit list in the moov
is written based on timestamps from the nominal start time signaled
via the zero-sized packet, while the first proper packet written
corresponds to a later fragment.

To avoid potential unexpected behaviour, empty packets only set
start_dts if the frag_discont flag is set.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-11-11 22:53:31 +02:00
Martin Storsjö
09e431b9e3 movenc: Assume streams starting at pts=0 for discontinuous fragments with editlists
This allows producing fragments discontinously where the video
stream has b-frames (but starts at pts=0), but doesn't work for the
cases with audio with preroll.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-11-11 22:52:36 +02:00
Hendrik Leppkes
9ffc61b125 Merge commit '8ad5124b7ecf7f727724e270a7b4bb8c7bcbf6a4'
* commit '8ad5124b7ecf7f727724e270a7b4bb8c7bcbf6a4':
  movenc: Automatically flush after writing the initial moov

Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
2015-11-11 15:03:36 +01:00
Martin Storsjö
8ad5124b7e movenc: Automatically flush after writing the initial moov
In most other cases when writing fragmented mp4 files, the output
IO context is flushed after each fragment. Also flush it after
writing the initial moov, to have it behave in the same way.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-11-10 21:46:03 +02:00
Hendrik Leppkes
c2f861ca42 Replace remaining occurances of av_free_packet with av_packet_unref 2015-10-27 14:35:30 +01:00
Hendrik Leppkes
368e521646 Merge commit '5ea5a24eb70646a9061b85af407fcbb5dd4f89fd'
* commit '5ea5a24eb70646a9061b85af407fcbb5dd4f89fd':
  movenc: Honor flush requests with delay_moov, when some tracks lack samples

Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
2015-10-27 12:46:21 +01:00
Martin Storsjö
5ea5a24eb7 movenc: Honor flush requests with delay_moov, when some tracks lack samples
This also makes sure that a fragmented file without the empty_moov
flag (i.e. with a non-empty initial moov fragment) actually gets
written, if some of the tracks turn out to not have any samples.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-10-23 10:37:49 +03:00
Andreas Cadhalpun
957f92729a avcodec: drop 2 suffix from avpriv_ac3_parse_header2
avpriv_ac3_parse_header was removed in commit 3dfb643.

Reviewed-by: Michael Niedermayer <michael@niedermayer.cc>
Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
2015-10-22 00:34:54 +02:00
Hendrik Leppkes
b01891a9f0 Merge commit '948f3c19a8bd069768ca411212aaf8c1ed96b10d'
* commit '948f3c19a8bd069768ca411212aaf8c1ed96b10d':
  lavc: Make AVPacket.duration int64, and deprecate convergence_duration

Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
2015-09-29 15:22:52 +02:00
Michael Niedermayer
7404f3bdb9 lavc: Switch bitrate to 64bit unless compatibility with avconv was requested. 2015-09-15 18:02:43 +02:00
Hendrik Leppkes
1907e19d0c Merge commit '26ac22e5e7394346e9d59f800e7d4e91f4518d33'
* commit '26ac22e5e7394346e9d59f800e7d4e91f4518d33':
  movenc: Add a new flag for writing global sidx indexes for dash

Conflicts:
	libavformat/movenc.c
	libavformat/movenc.h

Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
2015-08-18 08:50:22 +02:00
Martin Storsjö
26ac22e5e7 movenc: Add a new flag for writing global sidx indexes for dash
The double meaning of the faststart flag (moving a moov atom
to the start of files, making them streamable, for non-fragmented
files, vs inserting a global sidx index at the start of files
for fragmented files) is confusing - see 40ed1cbf1 for
explanation of its origins.

Since the second meaning of the flag hasn't been part of any
libav release yet, just rename it to get rid of the confusion
without any extra deprecation (which wouldn't get rid of the
potential confusion, of users adding -movflags faststart
even for fragmented files, where it isn't needed for making
them "streamable").

This gets back the old behaviour, where -movflags faststart
doesn't have any effect for fragmented files.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-08-12 13:41:46 +03:00
Hendrik Leppkes
10ea06b3bb Merge commit '5f200bbf98efe50f63d0515b115d2ba8dae297bc'
* commit '5f200bbf98efe50f63d0515b115d2ba8dae297bc':
  movenc: Place the sidx index after the initial moov/mdat pair

Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
2015-08-10 11:24:30 +02:00
Hendrik Leppkes
7653ebfff6 Merge commit '83f254e65f938657a4dbec711e4c94252a72daf9'
* commit '83f254e65f938657a4dbec711e4c94252a72daf9':
  movenc: Rename reserved_moov_pos to reserved_header_pos

Conflicts:
	libavformat/movenc.c
	libavformat/movenc.h

Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
2015-08-10 11:23:21 +02:00
Hendrik Leppkes
6c52432b48 Merge commit '8e34089e265a6b01e1e3301e8864439d26793753'
* commit '8e34089e265a6b01e1e3301e8864439d26793753':
  movenc: Check that frag_info entries exist in mov_write_sidx_tag

Merged-by: Hendrik Leppkes <h.leppkes@gmail.com>
2015-08-10 11:20:09 +02:00
Martin Storsjö
5f200bbf98 movenc: Place the sidx index after the initial moov/mdat pair
For fragmented files with non-empty moov, with a fragment index
(sidx), place the index after the initial moov/mdat pair.

Previously, for this pathological case, the index was written
at the start of the file.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-08-10 09:46:14 +03:00
Martin Storsjö
83f254e65f movenc: Rename reserved_moov_pos to reserved_header_pos
The same field is also used for writing the sidx index header,
for fragmented files, when the faststart flag is used.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-08-10 09:46:07 +03:00
Martin Storsjö
8e34089e26 movenc: Check that frag_info entries exist in mov_write_sidx_tag
This fixes crashes with pathological cases when trying to write
a sidx index (via the -movflags faststart option, in combination
with fragmenting options), when no fragments actually have been
written. (This is possible if the empty_moov flag isn't used,
so that all actual packet data is written in the moov/mdat pair,
and no moof/mdat pairs have been written.)

In these pathological cases, no sidx should be written at all.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-08-10 09:46:03 +03:00
Michael Niedermayer
29d147c94d Merge commit '059a934806d61f7af9ab3fd9f74994b838ea5eba'
* commit '059a934806d61f7af9ab3fd9f74994b838ea5eba':
  lavc: Consistently prefix input buffer defines

Conflicts:
	doc/examples/decoding_encoding.c
	libavcodec/4xm.c
	libavcodec/aac_adtstoasc_bsf.c
	libavcodec/aacdec.c
	libavcodec/aacenc.c
	libavcodec/ac3dec.h
	libavcodec/asvenc.c
	libavcodec/avcodec.h
	libavcodec/avpacket.c
	libavcodec/dvdec.c
	libavcodec/ffv1enc.c
	libavcodec/g2meet.c
	libavcodec/gif.c
	libavcodec/h264.c
	libavcodec/h264_mp4toannexb_bsf.c
	libavcodec/huffyuvdec.c
	libavcodec/huffyuvenc.c
	libavcodec/jpeglsenc.c
	libavcodec/libxvid.c
	libavcodec/mdec.c
	libavcodec/motionpixels.c
	libavcodec/mpeg4videodec.c
	libavcodec/mpegvideo.c
	libavcodec/noise_bsf.c
	libavcodec/nuv.c
	libavcodec/nvenc.c
	libavcodec/options.c
	libavcodec/parser.c
	libavcodec/pngenc.c
	libavcodec/proresenc_kostya.c
	libavcodec/qsvdec.c
	libavcodec/svq1enc.c
	libavcodec/tiffenc.c
	libavcodec/truemotion2.c
	libavcodec/utils.c
	libavcodec/utvideoenc.c
	libavcodec/vc1dec.c
	libavcodec/wmalosslessdec.c
	libavformat/adxdec.c
	libavformat/aiffdec.c
	libavformat/apc.c
	libavformat/apetag.c
	libavformat/avidec.c
	libavformat/bink.c
	libavformat/cafdec.c
	libavformat/flvdec.c
	libavformat/id3v2.c
	libavformat/isom.c
	libavformat/matroskadec.c
	libavformat/mov.c
	libavformat/mpc.c
	libavformat/mpc8.c
	libavformat/mpegts.c
	libavformat/mvi.c
	libavformat/mxfdec.c
	libavformat/mxg.c
	libavformat/nutdec.c
	libavformat/oggdec.c
	libavformat/oggparsecelt.c
	libavformat/oggparseflac.c
	libavformat/oggparseopus.c
	libavformat/oggparsespeex.c
	libavformat/omadec.c
	libavformat/rawdec.c
	libavformat/riffdec.c
	libavformat/rl2.c
	libavformat/rmdec.c
	libavformat/rtpdec_latm.c
	libavformat/rtpdec_mpeg4.c
	libavformat/rtpdec_qdm2.c
	libavformat/rtpdec_svq3.c
	libavformat/sierravmd.c
	libavformat/smacker.c
	libavformat/smush.c
	libavformat/spdifenc.c
	libavformat/takdec.c
	libavformat/tta.c
	libavformat/utils.c
	libavformat/vqf.c
	libavformat/westwood_vqa.c
	libavformat/xmv.c
	libavformat/xwma.c
	libavformat/yop.c

Merged-by: Michael Niedermayer <michael@niedermayer.cc>
2015-07-27 23:15:19 +02:00
Vittorio Giovara
059a934806 lavc: Consistently prefix input buffer defines
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
2015-07-27 15:24:59 +01:00
Michael Niedermayer
a194298954 avformat/movenc: Drop redundant bit exact field from context
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2015-07-18 13:27:33 +02:00
compn
0054d5ac02 avformat/movenc: fix mime-types in movenc.c
https://developer.apple.com/library/ios/documentation/AppleApplications/Reference/SafariWebContent/CreatingContentforSafarioniPhone/CreatingContentforSafarioniPhone.html

says video/mp4

suggested by BBB on irc.

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-07-09 02:17:35 +02:00
Michael Niedermayer
cfcb9f5e36 Merge commit 'e95c7a61852cc5b9ce5445ff034b87553e61958a'
* commit 'e95c7a61852cc5b9ce5445ff034b87553e61958a':
  mov: Preserve the metadata even when bit-exactness is requested

Conflicts:
	libavformat/movenc.c
	tests/ref/vsynth/vsynth1-mpeg4
	tests/ref/vsynth/vsynth2-mpeg4

See: a17ee4117d
Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-06-30 21:47:58 +02:00
Luca Barbato
e95c7a6185 mov: Preserve the metadata even when bit-exactness is requested
Make sure to not write the custom `encoder` string in that case.

Bug-Id: 845
CC: libav-stable@libav.org
2015-06-30 15:34:38 +02:00
Michael Niedermayer
f98c3ec5c6 avformat/movenc: Check return code of ff_iso8601_to_unix_time()
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-06-21 04:18:08 +02:00
Michael Niedermayer
9e40bd50e1 avformat/movenc: Make static packed_size, const static
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-06-11 00:48:41 +02:00
Janne Grunau
529c05698e movenc: fixes a questionable valgrind uninitialized value warning
display_matrix_size is only initialized when av_stream_get_side_data()
returns a side data pointer. The code is safe since the only effect this
has is setting the display_matrix pointer to NULL which it was already
anyway.
2015-06-10 14:32:11 +02:00
Michael Niedermayer
627dd7fe7e avformat/movenc: Fix potential signed overflows
Fixes CID1302838

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-06-01 17:54:58 +02:00
Michael Niedermayer
a3ec1d6abd avformat/movenc: Add loction/xyz support to allow copying data between mov files
Fixes Ticket4337

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-05-30 16:44:05 +02:00
Michael Niedermayer
061a592b9c avformat/movenc: Check that track_width_1616 fits within the available 32bit before storing it
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-05-29 12:54:37 +02:00
Michael Niedermayer
14bc570442 avformat/movenc: avoid floats in width/height/aspect ratio computations
This avoids the possibility for rounding/precision differences between platforms

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-05-29 12:46:58 +02:00
Michael Niedermayer
023040ed0d avformat/movenc: Allow muxing mp3 with samplerate < 16khz if the user sets strict to -1
Fixes Ticket4267

Approved-by: Baptiste Coudurier <baptiste.coudurier@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-05-27 01:47:59 +02:00
Michael Niedermayer
894d8cf418 avformat/movenc: Avoid floats & float rounding in tmcd nb_frames calculation
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-05-26 14:51:00 +02:00
Michael Niedermayer
0c3b4efc76 avformat/movenc: Remove float use from rgb_to_yuv()
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-05-24 13:32:53 +02:00
Carl Eugen Hoyos
4fb3efd2c1 lavf/mov: Use AVCOL_SPC constants when checking color_space.
Suggested-by: Ronald Bultje
2015-05-21 01:04:57 +02:00
Carl Eugen Hoyos
c4f864193f lavf/mov: Write colour matrix "6" for color_space bt470bg.
This matches the demuxer's behaviour.
2015-05-21 01:04:45 +02:00
Michael Niedermayer
ad3c5ff347 Merge commit 'e0046bc9c96150fa06146ace9093f06857dd7b23'
* commit 'e0046bc9c96150fa06146ace9093f06857dd7b23':
  movenc: Write the make and model metadata keys for mov style files

Conflicts:
	libavformat/movenc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-23 20:33:09 +01:00
Martin Storsjö
e0046bc9c9 movenc: Write the make and model metadata keys for mov style files
These are essential allowing QuickTime to keep detecting content
as slow-motion - this allows preserving them on stream copy.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-03-23 12:43:35 +02:00
Michael Niedermayer
3c5c6870a7 avformat/movenc: avoid using uninitialized display_matrix_size
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-21 00:24:31 +01:00
Michael Niedermayer
750cf4e537 Merge commit 'cf18e777aed9f73011c7ab7cbab8003189d4b9d8'
* commit 'cf18e777aed9f73011c7ab7cbab8003189d4b9d8':
  movenc: write the display transform matrix

Conflicts:
	libavformat/movenc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-20 01:10:06 +01:00
Anton Khirnov
cf18e777ae movenc: write the display transform matrix 2015-03-19 21:02:59 +01:00
Michael Niedermayer
b5448e66b0 Merge commit '67a2912307c3c08f2725ccae162cfe3426b80184'
* commit '67a2912307c3c08f2725ccae162cfe3426b80184':
  movenc: Don't assume that fragment durations in pts is equal to duration in dts

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-19 13:38:25 +01:00
Michael Niedermayer
25d7e3ad59 Merge commit '5c337353a2546416631a87de4881850d99141c39'
* commit '5c337353a2546416631a87de4881850d99141c39':
  movenc: Move sidx edit list timestamp adjustment into a block

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-19 13:26:47 +01:00
Michael Niedermayer
3602782429 Merge commit 'eee13d653953083553cceadbbedf6222ef78a006'
* commit 'eee13d653953083553cceadbbedf6222ef78a006':
  movenc: Only adjust the cts offset at the start of fragments if necessary

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-19 12:47:19 +01:00
Michael Niedermayer
4631d4bec3 Merge commit '5cf892d6946b19a87bcd00d6b76ce81f45960fdb'
* commit '5cf892d6946b19a87bcd00d6b76ce81f45960fdb':
  movenc: Write pts timestamps in tfxd, instead of dts timestamps

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-19 12:38:51 +01:00
Michael Niedermayer
00ad3432e1 Merge commit 'b81b0cc22b22413760423e239ea644c9afdbfa2d'
* commit 'b81b0cc22b22413760423e239ea644c9afdbfa2d':
  movenc: Set the last packet duration based on the next packet when autoflushing

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-19 12:38:29 +01:00
Michael Niedermayer
76fef5cd27 Merge commit '2889c5e16711770437f380f1bead5f72c6a0b17a'
* commit '2889c5e16711770437f380f1bead5f72c6a0b17a':
  movenc: Heuristically set the duration of the last sample in a fragment if not set

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-19 12:09:51 +01:00
Martin Storsjö
67a2912307 movenc: Don't assume that fragment durations in pts is equal to duration in dts
For strict CFR, they should be pretty much equal, but if the stream
is VFR, there can be a sometimes significant difference.

Calculate the pts duration separately, used in sidx atoms and for
tfrf/tfxd boxes in smooth streaming ismv files.

Also make sure to reduce the duration of sidx entries according to
edit lists.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-03-19 10:27:20 +02:00
Martin Storsjö
5c337353a2 movenc: Move sidx edit list timestamp adjustment into a block
When reading these values from track->frag_info, the same adjustment
has already been done.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-03-19 10:27:17 +02:00
Martin Storsjö
eee13d6539 movenc: Only adjust the cts offset at the start of fragments if necessary
Adjusting it is only necessary when a sidx/tfrf/tfxd atom already has
been written for the previous fragment (since the sidx/tfrf/tfxd atoms
include the duration between the first pts of the previous fragment, to
the first pts of the new fragment).

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-03-19 10:27:15 +02:00
Martin Storsjö
5cf892d694 movenc: Write pts timestamps in tfxd, instead of dts timestamps
This matches what we write in tfra and tfrf since 9cbf70fa0e.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-03-19 10:27:12 +02:00
Martin Storsjö
b81b0cc22b movenc: Set the last packet duration based on the next packet when autoflushing
When automatically flushing fragments based on set conditions
(fragmentation on keyframes, after some interval or byte size),
we already have the next packet for one stream - use this for setting
the duration of the last packet in the flushed fragment correctly.

This avoids having to adjust the timestamp of the first packet in
the new fragment since the last duration was unknown.

Unfortunately, this only works for automatic flushing (not for
caller-triggered flushing, like in the dash muxer), and only for the
one single track that triggered the flushing. The duration of the
last sample in all other tracks still is dependent on AVPacket
duration (or heuristics).

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-03-19 10:27:07 +02:00
Martin Storsjö
2889c5e167 movenc: Heuristically set the duration of the last sample in a fragment if not set
Even if this is a guess, it is way better than writing a zero duration
of the last sample in a fragment (because if the duration is zero,
the first sample of the next fragment will have the same timestamp
as the last sample in the previous one).

Since we normally don't require libavformat muxer users to set
the duration field in AVPacket, we probably can't strictly require
it here either, so don't log this as a strict warning, only as info.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-03-19 10:26:52 +02:00
Michael Niedermayer
ae65cc7ed3 Merge commit '2cb9c2fc59c9267ad2631c07c81c188058502259'
* commit '2cb9c2fc59c9267ad2631c07c81c188058502259':
  movenc: Allow interleaving samples when writing fragmented files

Conflicts:
	libavformat/movenc.c
	libavformat/movenc.h

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-16 23:30:13 +01:00
Michael Niedermayer
312eb0d66f Merge commit '50ff0c05b691524d1fd044a2f2eefb706932fc98'
* commit '50ff0c05b691524d1fd044a2f2eefb706932fc98':
  movenc: Support writing multiple trun atoms

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-16 21:53:02 +01:00
Martin Storsjö
2cb9c2fc59 movenc: Allow interleaving samples when writing fragmented files
This is incompatible with the omit_tfhd_offset flag (writing
position independent fragments with interleaving requires the
default_base_moof flag).

This makes the moof atoms slightly bigger, but can be better for
playback (improving locality of sample data in the mdat).

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-03-16 13:23:19 +02:00
Martin Storsjö
50ff0c05b6 movenc: Support writing multiple trun atoms
This is needed if all the data for one track isn't continuous
within the mdat. Normally we make sure all the data for one
track is continuous, but in new cases we will need to have
the samples interleaved.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-03-16 13:23:19 +02:00
Michael Niedermayer
f8f324cc16 Merge commit '448c8cfe4c53e9e806effd8505b46d57fa707061'
* commit '448c8cfe4c53e9e806effd8505b46d57fa707061':
  movenc: Support setting fragment_index before the moov atom is written

Conflicts:
	libavformat/movenc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-10 11:42:44 +01:00
Michael Niedermayer
8d026861f5 Merge commit '0c5e380c2c266d2e8a13c000cc527529db837f10'
* commit '0c5e380c2c266d2e8a13c000cc527529db837f10':
  movenc: Don't rely on the fragment index for vc1 info gathering

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-10 11:28:24 +01:00
Martin Storsjö
448c8cfe4c movenc: Support setting fragment_index before the moov atom is written
This way, the caller doesn't need to coordinate setting the option
after the moov atom has been written. The downside is that it is
no longer possible to use the option for checking whether the moov
atom already has been written, but a caller is able to keep track
of that by other means anyway.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-03-10 10:41:06 +02:00
Martin Storsjö
0c5e380c2c movenc: Don't rely on the fragment index for vc1 info gathering
The previous use of the mov->fragments field, for determining whether
written packets were part of the first fragment or not, didn't
work as intended when using the empty_moov flag.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-03-10 10:41:03 +02:00
Michael Niedermayer
ba0198a767 Merge commit '46d4d8575979a24a8d026d9805039b724e0e3e5f'
* commit '46d4d8575979a24a8d026d9805039b724e0e3e5f':
  movenc: Avoid writing separate flags for the first sample if not necessary

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-09 11:27:29 +01:00
Michael Niedermayer
e8821e74bb Merge commit '00d751d4fc20ec88d2cc2c9f39ec8b9e9c8cdeba'
* commit '00d751d4fc20ec88d2cc2c9f39ec8b9e9c8cdeba':
  movenc: Set tfhd default sample flags based on actual samples, if possible

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-09 11:15:12 +01:00
Martin Storsjö
46d4d85759 movenc: Avoid writing separate flags for the first sample if not necessary
Signed-off-by: Martin Storsjö <martin@martin.st>
2015-03-09 10:36:12 +02:00
Martin Storsjö
00d751d4fc movenc: Set tfhd default sample flags based on actual samples, if possible
This avoids assuming that e.g. audio samples are marked as
sync samples.

This allows omitting the sample flags from trun, if the default
flags happen to be right for all the samples.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-03-09 10:36:02 +02:00
Michael Niedermayer
1468ff49df Merge commit '9731cf4001377fa2f75c279072cc2b0cbd57bf8e'
* commit '9731cf4001377fa2f75c279072cc2b0cbd57bf8e':
  movenc: Keep writing zero-entry stts atoms as intended

Conflicts:
	libavformat/movenc.c

See: 95165f7c1b
Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-06 20:57:11 +01:00
Martin Storsjö
9731cf4001 movenc: Keep writing zero-entry stts atoms as intended
a876585215 had the unintended side effect of returning AVERROR(ENOMEM)
when track->entry is zero, while the code intentionally wants to
continue in that case.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-03-06 16:17:48 +02:00
Kevin Wheatley
45555a20c6 avformat/movenc: Add support for writing 'gama' atom to QuickTime .mov files.
As this is depricated it should not be on by default, it is only
supported for MOV containers, depends on avpriv_get_gamma_from_trc()

Enable by:

-movflags +write_gama

This will use the color_trc to supply a gamma value, if desired an
explicit value may be supplied using the -mov_gamma option supplying
a suitable floating point value, values <=1e-6 will not be written.

Signed-off-by: Kevin Wheatley <kevin.j.wheatley@gmail.com>
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-05 12:26:37 +01:00
Michael Niedermayer
4ad7b8f64a avformat/movenc: mark write_colr as experimental
This way the flag can be flipped to a nowrite_colr, if people prefer that

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-03-04 22:36:23 +01:00
Derek Buitenhuis
a22032281c movenc: Write 'colr' box correctly for MP4
This also restricts it to MOV and MP4, since it is only
defined for those formats.

Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
2015-02-27 14:06:02 +00:00
Kevin Wheatley
3664703780 avformat/movenc: Fix writing ACLR atoms for DNxHD
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>
2015-02-24 16:54:02 +01:00
Michael Niedermayer
3518925a91 avformat/movenc: Check for memory allocation failures
Fixes CID1271049
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-22 20:20:13 +01:00
Kevin Wheatley
31c7c0e156 avformat/movenc: Move avid DNxHD padding to the correct spot
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>
2015-02-20 12:17:14 +01:00
Michael Niedermayer
9e008ed1b4 avformat/movenc: Fix use of uninitialized variable (ret)
Fixed CID1270823

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-18 16:33:15 +01:00
Michael Niedermayer
95165f7c1b avformat/movenc: Fix stts_entries allocation check
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-17 21:51:35 +01:00
Michael Niedermayer
80c5dc5610 Merge commit 'a8765852158ecb2ae34895fa35ff51dc95c186f9'
* commit 'a8765852158ecb2ae34895fa35ff51dc95c186f9':
  movenc: Check memory allocations

Conflicts:
	libavformat/movenc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-17 21:50:08 +01:00
Hugo Beauzée-Luyssen
a876585215 movenc: Check memory allocations
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
2015-02-17 12:16:43 -05:00
Kevin Wheatley
7fc33dca39 libavformat: DNxHD in .mov, switch unspecified color_range to mpeg
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>
2015-02-10 16:46:12 +01:00
Carl Eugen Hoyos
a2bc8c5601 Fix standalone compilation of the mov muxer with --disable-optimizations.
Reported-by: Bernhard Döbler
2015-02-08 15:48:26 +01:00
Paul B Mahol
f705b1287b avformat/movenc: remove unneeded #include, there are no assert() only av_assert*
Signed-off-by: Paul B Mahol <onemda@gmail.com>
2015-01-31 08:57:07 +00:00
Kevin Wheatley
7b6f419176 avformat/movenc: Add simplistic 'colr' tag writing support to mov container
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-01-26 17:49:50 +01:00
Michael Niedermayer
da048c6d24 avformat/movenc: Check failure of allocation of ctts_entries and propagate error
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-01-25 14:32:22 +01:00
Michael Niedermayer
47785b44b5 avformat/movenc: fix cleanup on insufficient reserved_moov_size
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-01-25 14:28:43 +01:00
Carl Eugen Hoyos
a5334d4081 Handle r10k endianess atom DpxE.
Fixes playback and remuxing of r10k_full-range_big-endian.mov.

Reported, analyzed and tested by Olaf Matthes, olaf matthes gmx de
2015-01-11 12:15:03 +01:00
Michael Niedermayer
6f838dee3c avformat/movenc: move variable to a more local block
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-01-10 04:50:50 +01:00
Michael Niedermayer
7824dc5150 avformat/movenc: workaround bug in "PathScale EKOPath(tm) Compiler Suite Version 4.0.12.1"
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-01-10 03:43:54 +01:00
Michael Niedermayer
cb03d29dec Merge commit '2a1500fb552364488cfbee3e29e296788a3a6bdd'
* commit '2a1500fb552364488cfbee3e29e296788a3a6bdd':
  movenc: Fix a typo in a comment

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-01-07 00:46:47 +01:00
Michael Niedermayer
0d0a905152 Merge commit 'e581e88cbdb3323ca0026a54b39a9716a3686e9f'
* commit 'e581e88cbdb3323ca0026a54b39a9716a3686e9f':
  movenc: Readd an accidentally removed condition

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-01-07 00:39:44 +01:00
Martin Storsjö
2a1500fb55 movenc: Fix a typo in a comment
Signed-off-by: Martin Storsjö <martin@martin.st>
2015-01-06 19:47:18 +02:00
Martin Storsjö
e581e88cbd movenc: Readd an accidentally removed condition
This was removed accidentally as part of 847bf598. This could cause
groundless warning logging.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-01-06 19:47:09 +02:00
Michael Niedermayer
fb22e5ae45 Merge commit '46808fdf04ab113df374157b90b506eb3110daf2'
* commit '46808fdf04ab113df374157b90b506eb3110daf2':
  movenc: Enable editlists by default if delay_moov is enabled

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-01-05 02:45:34 +01:00
Martin Storsjö
46808fdf04 movenc: Enable editlists by default if delay_moov is enabled
Being able to write editlists properly is one of the main points
in the delay_moov flag.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-01-04 20:04:36 +02:00
Michael Niedermayer
0daf60140b avformat/movenc: fix DELAY_MOOV
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-01-03 17:45:12 +01:00
Michael Niedermayer
b0ba8a23b6 Merge commit 'b3b0b35db2f3b61bf2f0f4fa85f5b6267d83c8fe'
* commit 'b3b0b35db2f3b61bf2f0f4fa85f5b6267d83c8fe':
  movenc: Get rid of a hack for updating the dvc1 atom

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-01-03 04:01:34 +01:00
Michael Niedermayer
f38e2bcb72 Merge commit '847bf5988fec1d3e65c1d8cf0cdb8caf0cfd0c1b'
* 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>
2015-01-03 03:13:16 +01:00
Michael Niedermayer
504267fb56 avformat/movenc: Use cluster timestamps when available in edts
Also print both if they differ

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2015-01-03 02:47:35 +01:00
Michael Niedermayer
0506f687e8 Merge commit 'c725faebda9a516766d94c33b07972ab0f70cf93'
* 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>
2015-01-03 01:38:58 +01:00
Michael Niedermayer
68a06a244c Merge commit '724cbea7193945fe5a5b4dea8ede344803572844'
* commit '724cbea7193945fe5a5b4dea8ede344803572844':
  movenc: Remove an unnecessary condition when flushing fragments

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-01-03 01:25:30 +01:00
Michael Niedermayer
7ca10d10aa Merge commit '355d01a1bf55297b1d1f04e4bfbf0ddc93b6247e'
* 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>
2015-01-03 01:18:54 +01:00
Martin Storsjö
b3b0b35db2 movenc: Get rid of a hack for updating the dvc1 atom
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>
2015-01-03 01:20:40 +02:00
Martin Storsjö
847bf5988f movenc: Add an option for delaying writing the moov with empty_moov
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>
2015-01-03 01:19:27 +02:00
Martin Storsjö
c725faebda movenc: Use start_dts/cts instead of cluster[0] for writing edit lists
This allows writing edit lists even when track->entry == 0, if
the start times have been set.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-01-03 01:18:52 +02:00
Martin Storsjö
724cbea719 movenc: Remove an unnecessary condition when flushing fragments
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>
2015-01-03 01:18:38 +02:00
Martin Storsjö
355d01a1bf movenc: Factorize writing ftyp and other identification tags to a separate function
Signed-off-by: Martin Storsjö <martin@martin.st>
2015-01-03 01:18:28 +02:00
Michael Niedermayer
c8e05c438f Merge commit '59f0275dd0a42a7f90271a83a78e9ca5e69ff5b0'
* commit '59f0275dd0a42a7f90271a83a78e9ca5e69ff5b0':
  movenc: Adjust the pts of new fragments similarly to what is done for dts

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-12-19 02:58:16 +01:00
Martin Storsjö
59f0275dd0 movenc: Adjust the pts of new fragments similarly to what is done for dts
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>
2014-12-18 23:14:27 +02:00
Carl Eugen Hoyos
01ab761b46 Allow mov musing if the ac3 parser was disabled.
This reverts 8091fe30.
Reported and tested by Takashi, ffmpeg-list dubistmeinheld de
2014-12-09 22:12:53 +01:00
Rens Dijkshoorn
dceb8b1252 avformat/movenc: Add 2048x1080 to the aivx case
This improves compatibility of such files with apple tools

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
2014-12-08 04:26:16 +01:00
Carl Eugen Hoyos
7a4be4315f Support muxing 4k AVC Intra in mov.
Reported and tested by Rens Dijkshoorn, rens onlinemedia nl
2014-12-02 23:35:40 +01:00
Michael Niedermayer
0df95fa327 Merge commit '234fb81e3145e9c9aec4ec16266676fab7dc21fa'
* commit '234fb81e3145e9c9aec4ec16266676fab7dc21fa':
  movenc: Expose the fragment index as an avoption

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-11-26 12:27:01 +01:00
Michael Niedermayer
b78074fd13 Merge commit 'ee37620b6ae4783cda637408422044b2d14a688c'
* commit 'ee37620b6ae4783cda637408422044b2d14a688c':
  movenc: Add a flag for indicating a discontinuous fragment

Conflicts:
	libavformat/movenc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-11-26 11:27:17 +01:00
Martin Storsjö
234fb81e31 movenc: Expose the fragment index as an avoption
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>
2014-11-26 09:58:13 +02:00
Martin Storsjö
ee37620b6a movenc: Add a flag for indicating a discontinuous fragment
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>
2014-11-26 09:56:56 +02:00
Michael Niedermayer
4dc305d784 Merge commit '40ed1cbf147d09fc0894bee160f0b6b6d9159fc5'
* 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>
2014-11-17 23:02:02 +01:00
Michael Niedermayer
3fa4351d6b Merge commit '3847f3ab58b3b74604807394247bf68827258103'
* commit '3847f3ab58b3b74604807394247bf68827258103':
  movenc: Add tfra entries for all tracks in a moof

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-11-17 22:24:05 +01:00
Michael Niedermayer
9e0b0c60bd Merge commit '2ded57371abead879bcee56da5131e5fac0d17ef'
* commit '2ded57371abead879bcee56da5131e5fac0d17ef':
  movenc: Add support for writing sidx atoms for DASH segments

Conflicts:
	Changelog
	libavformat/version.h

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-11-17 21:55:23 +01:00
Michael Niedermayer
1fddfaa282 Merge commit '2d9d6afb8d2f284f5e620ecc19f643d5cd3facb8'
* commit '2d9d6afb8d2f284f5e620ecc19f643d5cd3facb8':
  movenc: Factorize adding fragment info into a separate function

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-11-17 21:43:43 +01:00
Michael Niedermayer
b96c1cd78b Merge commit '0f9eb9165bb7d7982fdedf64f6bcec856f1bedd6'
* commit '0f9eb9165bb7d7982fdedf64f6bcec856f1bedd6':
  movenc: Include empty tracks in iods when writing fragmented mp4

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-11-17 21:22:47 +01:00
Martin Storsjö
40ed1cbf14 movenc: Allow writing a DASH sidx atom at the start of files
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>
2014-11-17 16:17:07 +02:00
Martin Storsjö
3847f3ab58 movenc: Add tfra entries for all tracks in a moof
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>
2014-11-17 16:17:07 +02:00
Martin Storsjö
2ded57371a movenc: Add support for writing sidx atoms for DASH segments
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>
2014-11-17 16:16:46 +02:00
Martin Storsjö
2d9d6afb8d movenc: Factorize adding fragment info into a separate function
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>
2014-11-17 16:13:02 +02:00
Martin Storsjö
0f9eb9165b movenc: Include empty tracks in iods when writing fragmented mp4
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>
2014-11-17 16:12:02 +02:00
Michael Niedermayer
9ebfe38f38 Merge commit '9a5ac36b69ede4563e9ecd734141b12ea3280fbc'
* commit '9a5ac36b69ede4563e9ecd734141b12ea3280fbc':
  movenc: Require samples before trying to write edts

Conflicts:
	libavformat/movenc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-11-08 11:41:29 +01:00
Michael Niedermayer
4342b346d2 Merge commit '8cb7b7b461b52898765b38e3eff68c0ce88347f3'
* commit '8cb7b7b461b52898765b38e3eff68c0ce88347f3':
  movenc: Avoid leaking locally allocated data when returning on errors

Conflicts:
	libavformat/movenc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-11-08 11:08:57 +01:00
Michael Niedermayer
0bdc5db520 Merge commit '95a449d3ce8e15522df47a80a8a4593ea5c2b1bb'
* commit '95a449d3ce8e15522df47a80a8a4593ea5c2b1bb':
  movenc: Remove an outdated comment

Conflicts:
	libavformat/movenc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-11-08 10:57:10 +01:00
Martin Storsjö
9a5ac36b69 movenc: Require samples before trying to write edts
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>
2014-11-08 11:14:21 +02:00
Martin Storsjö
8cb7b7b461 movenc: Avoid leaking locally allocated data when returning on errors
Signed-off-by: Martin Storsjö <martin@martin.st>
2014-11-08 11:14:08 +02:00
Martin Storsjö
95a449d3ce movenc: Remove an outdated comment
QuickTime does support files with an empty initial movie
these days.

Signed-off-by: Martin Storsjö <martin@martin.st>
2014-11-08 11:13:37 +02:00
Michael Niedermayer
c9a9a7a1fd Merge commit '9cbf70fa0e44613590b019cef1fe99aa3f3c5d9d'
* commit '9cbf70fa0e44613590b019cef1fe99aa3f3c5d9d':
  movenc: Write correct presentation timestamps in tfra

Conflicts:
	libavformat/version.h

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-11-08 01:04:04 +01:00
Michael Niedermayer
872c0bcd3c Merge commit 'e7d20f12c5eff5570cd897f3ce3a88456024036b'
* commit 'e7d20f12c5eff5570cd897f3ce3a88456024036b':
  movenc: Remove a now redundant check

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-11-08 00:32:52 +01:00
Michael Niedermayer
2893d1b36d Merge commit '1d8a0c1b43e58332a3a15c67d4adc161713cade8'
* commit '1d8a0c1b43e58332a3a15c67d4adc161713cade8':
  movenc: Allow to request not to use edit lists

Conflicts:
	libavformat/movenc.c

See: 537ef8bebf
Merged-by: Michael Niedermayer <michaelni@gmx.at>
2014-11-08 00:22:42 +01:00
Martin Storsjö
9cbf70fa0e movenc: Write correct presentation timestamps in tfra
Previously we wrote decoding timestamps here, while the specs
say it should be presentation timestamps.

Signed-off-by: Martin Storsjö <martin@martin.st>
2014-11-07 14:50:06 +02:00
Martin Storsjö
e7d20f12c5 movenc: Remove a now redundant check
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>
2014-11-07 13:46:19 +02:00
Martin Storsjö
1d8a0c1b43 movenc: Allow to request not to use edit lists
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>
2014-11-07 12:11:46 +02:00
Michael Niedermayer
042eba52a5 Merge commit '91e8d2eb1f7bf3af949008b106ec1ca037b88b0e'
* 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>
2014-11-06 13:10:01 +01:00