1
0
mirror of https://github.com/FFmpeg/FFmpeg.git synced 2024-12-07 11:13:41 +02:00
Commit Graph

11022 Commits

Author SHA1 Message Date
Michael Niedermayer
e5b019725f m4vdec: Check for non-startcode 00 00 00 sequences in probe
This makes the m4v detection less trigger-happy.

Bug-Id: 949
Signed-off-by: Diego Biurrun <diego@biurrun.de>
2016-08-03 08:27:02 +02:00
Martin Storsjö
9806b9ab5c Revert "Don't use expressions with side effects in macro parameters"
This reverts commit 25bacd0a0c.

Since 230b1c070, the bytewise AV_W*() macros only expand their
argument once, so revert to the more readable version of these.

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-08-02 21:18:12 +03:00
Martin Storsjö
25bacd0a0c Don't use expressions with side effects in macro parameters
AV_WB32 can be implemented as a macro that expands its parameters
multiple times (in case AV_HAVE_FAST_UNALIGNED isn't set and the
compiler doesn't support GCC attributes); make sure not to read
multiple times from the source in this case.

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-07-31 22:50:51 +03:00
Anton Khirnov
ed1cd81076 flac demuxer: improve probing
Extend the probe function to validate the STREAMINFO block that must
follow the fLaC ID tag.
2016-07-31 08:19:45 +02:00
Anton Khirnov
5ebef79abe Fix instances of broken indentation found by gcc 6 2016-07-31 08:19:27 +02:00
Luca Barbato
2ac00d2d1d mov: Validate the ID number
IDs in MOV start from 1.

Signed-off-by: Diego Biurrun <diego@biurrun.de>
2016-07-29 18:46:48 +02:00
Hendrik Leppkes
7f549b8338 riff: don't overwrite bps from WAVEFORMATEX if EXTENSIBLE doesn't contain that data.
According to the specification on the MSDN [1], 0 is valid for that
particular field, and it should be ignored in that case.

[1]: http://msdn.microsoft.com/en-us/library/windows/desktop/dd757714(v=vs.85).aspx

Bug-Id: 950

Signed-off-by: Anton Khirnov <anton@khirnov.net>
2016-07-22 19:08:12 +02:00
Vittorio Giovara
ed9b2a5178 mov: Rework the check for invalid indexes in stsc
There are samples with invalid stsc that may work fine as is and
do not need extradata change. So ignore any out of range index, and
error out only when explode is set.

Found-by: Matthieu Bouron <matthieu.bouron@stupeflix.com>

Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
2016-07-20 19:30:22 +02:00
Vittorio Giovara
90bc423212 mov: Wrap stsc index and count compare in a separate function 2016-07-20 19:30:21 +02:00
Matthieu Bouron
209ee680ce mov: Fix stsc_count comparison
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
2016-07-20 19:28:35 +02:00
Anton Khirnov
46278ec90a mp3enc: write trailing padding 2016-07-15 15:30:30 +02:00
Anton Khirnov
d60c2d5216 mp3dec: read the initial/trailing padding from the LAME tag 2016-07-15 15:30:22 +02:00
Matthieu Bouron
61cb9fac47 mov: fix stream extradata_size allocation
Signed-off-by: Martin Storsjö <martin@martin.st>
2016-07-15 13:27:43 +03: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
Anton Khirnov
40f74dc87a matroskadec: export CodecDelay 2016-07-03 09:13:29 +02:00
Anton Khirnov
be3e807c8f oggparseopus: export pre-skip
Bug-Id: 945, along with the following commit
2016-07-02 09:30:40 +02:00
Vittorio Giovara
029cf99c51 mov: Save number of stsd elements after stream extradata allocation
Avoid freeing an unallocated array in mov_read_close() in case
of a malloc failure.

Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
2016-06-29 15:25:42 -04:00
Diego Biurrun
e72d6fa08a build: Move MP2 muxer declaration away from MP3 muxer code
The MP2 muxer uses none of the code of the MP3 muxer.
2016-06-29 20:24:10 +02: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
Luca Barbato
4dbfcd0757 librtmp: Avoid an infiniloop setting connection arguments
The exit condition was missing.

CC: libav-stable@libav.org
2016-06-22 06:37:33 +02:00
Paul B Mahol
470cd0c5fe Add TrueMotion 2.0 Real Time decoder
Signed-off-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
2016-06-20 15:48:12 -04:00
Paul B Mahol
d78fd2fa21 Add MagicYUV decoder
Signed-off-by: Paul B Mahol <onemda@gmail.com>
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
2016-06-20 15:45:51 -04:00
Vittorio Giovara
846a3e78a5 mov: Support prores with multiple stsd
This function needs to return false, or data in the additional tables
will be skipped, and the decoder will not be able to decode frames
associated with them.
2016-06-17 11:38:33 -04:00
Vittorio Giovara
7672997004 mov: Implement support for multiple sample description tables
Store data from each stsd in a separate extradata buffer, keep track of
the stsc index for read and seek operations, switch buffers when the
index differs. Decoder is notified with an AV_PKT_DATA_NEW_EXTRADATA
packet side data.

Since H264 supports this notification, and can be reset midstream, enable
this feature only for multiple avcC's. All other stsd types (such as
hvc1 and hev1) need decoder-side changes, so they are left disabled for
now.

This is implemented only in non-fragmented MOVs.

Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
2016-06-17 11:38:33 -04:00
Diego Biurrun
b668662939 get_bits: Move BITSTREAM_READER_LE definition before all relevant #includes
This avoids the danger that get_bits.h might get indirectly #included before
BITSTREAM_READER_LE is defined.

Also sort headers into canonical order where appropriate.
2016-06-07 13:09:57 +02:00
Diego Biurrun
b7f98659f2 Remove unnecessary get_bits.h #includes 2016-06-07 13:09:57 +02:00
Diego Biurrun
535a742c26 build: Change structure of the linker version script templates
Split version files into one line per symbol/directive to allow compatibility
with the Solaris linker without preprocessing and eliminate $ from version file
templates to simplify the postprocessing shell command.
2016-05-29 16:43:11 +02:00
Martin Storsjö
3fdffc032e rtsp: Use avcodec_descriptor_get instead of avcodec_find_decoder
This is only used for logging a human readable codec name for
debugging.

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-05-25 12:22:28 +03:00
Anton Khirnov
14634429b9 lavf: update muxing doxy
Describe the new AVCodecParameters API.
2016-05-23 06:46:17 +02:00
Diego Biurrun
e45a638f50 dump: Drop unused variable 2016-05-22 20:22:43 +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
Michael Niedermayer
bc43131997 mov: Also export loci altitude
Signed-off-by: Martin Storsjö <martin@martin.st>
2016-05-19 10:46:53 +03:00
Michael Niedermayer
94d8141c8c mov: Append place name instead of overwriting for loci
Signed-off-by: Martin Storsjö <martin@martin.st>
2016-05-19 10:46:52 +03:00
Michael Niedermayer
f126365cda mov: Fix parsing short loci
Previously, we required the minimum number of bytes required for
the full box. Don't strictly require the astronomical body and additional
notes fields, but do require an altitude field (which currently isn't
parsed). This matches the initial length check at the start of the function
(which doesn't know about the variable length place field).

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-05-19 10:46:51 +03:00
Michael Niedermayer
704d2bd18b mov: Print reason of loci parsing failure
Signed-off-by: Martin Storsjö <martin@martin.st>
2016-05-19 10:46:45 +03:00
Martin Storsjö
d34826c33d mov: Add a comment referring to the standard that defines the loci box
Signed-off-by: Martin Storsjö <martin@martin.st>
2016-05-19 10:46:39 +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ö
a79aafd0b4 movenc: Add a test for VFR with b-frames, with a duration change at a fragment end
Signed-off-by: Martin Storsjö <martin@martin.st>
2016-05-18 10:37:05 +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ö
fd4957d9c6 movenc-test: Test write_data_type
Signed-off-by: Martin Storsjö <martin@martin.st>
2016-05-18 10:37:00 +03:00
Martin Storsjö
71852a1ba8 matroskaenc: Provide output bytestream markers
Signed-off-by: Martin Storsjö <martin@martin.st>
2016-05-18 10:36:58 +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
Martin Storsjö
371df9ba71 flvenc: Provide output bytestream markers
Signed-off-by: Martin Storsjö <martin@martin.st>
2016-05-18 10:36:53 +03:00
Martin Storsjö
db7968bff4 avio: Allow custom IO users to get labels for the output bytestream
This allows callers with avio write callbacks to get the bytestream
positions that correspond to keyframes, suitable for live streaming.

In the simplest form, a caller could expect that a header is written
to the bytestream during the avformat_write_header, and the data
output to the avio context during e.g. av_write_frame corresponds
exactly to the current packet passed in.

When combined with av_interleaved_write_frame, and with muxers that
do buffering (most muxers that do some sort of fragmenting or
clustering), the mapping from input data to bytestream positions
is nontrivial.

This allows callers to get directly information about what part
of the bytestream is what, without having to resort to assumptions
about the muxer behaviour.

One keyframe/fragment/block can still be split into multiple (if
they are larger than the aviocontext buffer), which would call
the callback with e.g. AVIO_DATA_MARKER_SYNC_POINT, followed by
AVIO_DATA_MARKER_UNKNOWN for the second time it is called with
the following data.

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-05-18 10:36:45 +03:00
Vittorio Giovara
0c4468dc18 stereo3d: Add API to get name from value or value from name
Use it in av_dump_format() instead of a huge switch case.
2016-05-17 12:25:27 -04:00
Vladimir Voroshilov
d621b2f795 lavf: Raw G.729 demuxer
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
2016-05-17 12:24:32 -04:00
Francois Cartegnie
393596f9d5 mpegtsenc: stop impersonating ses in sdt
Unless specified, users must use non registered
range for network id

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2016-05-17 10:29:36 +02:00
Diego Biurrun
11de006bab Combine deprecation guards where appropriate
Some code blocks use multiple bits of deprecated API.
2016-05-13 15:14:30 +02:00
Diego Biurrun
a6a750c7ef tests: Move all test programs to a subdirectory 2016-05-13 14:55:56 +02:00
Diego Biurrun
257f00ec1a Split global .gitignore file into per-directory files 2016-05-13 14:55:56 +02:00
Diego Biurrun
b7e64fba7f Reduce the scope of some variables
This avoids unused variable warnings after the next version bump.
Also drop a trace level av_log() call that is in the way.
2016-05-11 12:21:25 +02:00
Martin Storsjö
bc2a32969e rtsp: Parse SSRC attributes in the SDP
When feeding input RTP packets to the depacketizer via custom IO,
it needs to pick the right stream using the payload type for
RTP packets, and using the SSRC for RTCP packets. If the first
packet is an RTCP packet, we don't (currently) know the SSRC
yet and thus can't pick the right RTP depacketizer to handle it.

By parsing the SSRC attribute in the SDP, we can map initial
RTCP packets to the right stream.

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-05-11 10:35:26 +03:00
Martin Storsjö
9ea78fd00a rtpdec: Always check if we have the next packet queued
It doesn't matter what the actual reason for not returning
an AVPacket was - if we didn't return any packet and we have
the next one queued, parse it immediately. (rtp_parse_queued_packet
always consumes a queued packet if one exists, so there's no risk
for infinite loops.)

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-05-11 10:35:01 +03:00
Martin Storsjö
e9443105ea avio: Remove a leftover comment
The declarations that this comment referred to were removed
in 2439f2ca8 - there is no unbuffered IO in this header now.

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-05-06 22:34:59 +03: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
Alexandra Hájková
5c31eaa999 Remove unnecessary get_bits.h #includes and add missing headers where needed.
Signed-off-by: Diego Biurrun <diego@biurrun.de>
2016-05-04 15:14:14 +02:00
Diego Biurrun
0f40c90984 Drop pointless assert.h #includes 2016-05-03 15:45:10 +02:00
Luca Barbato
74d98d1b0e mpegts: Validate the SL Packet Header Configuration
timeStampLength, OCRLength and AU_Length have well specified upper
boundaries.

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2016-05-03 14:21:45 +09:00
Martin Storsjö
375cad0965 rtpdec_vp9: Support parsing the scalability structure
We still only support one single layer though, but this allows
receiving streams that have this structure present even for
single layer streams.

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-04-30 20:58:23 +03:00
Martin Storsjö
943f4bea37 rtpdec_h264: Use avpriv_report_missing_feature instead of a manual av_log
Signed-off-by: Martin Storsjö <martin@martin.st>
2016-04-30 20:58:18 +03:00
Martin Storsjö
b55e3633d3 rtpdec: Use AVERROR_PATCHWELCOME instead of AVERROR(ENOSYS) for unimplemented features
Signed-off-by: Martin Storsjö <martin@martin.st>
2016-04-30 20:57:44 +03:00
Martin Storsjö
70c77fdfc1 rtpdec_vp9: Update header parsing to spec draft 02
Signed-off-by: Martin Storsjö <martin@martin.st>
2016-04-30 20:57:41 +03:00
Martin Storsjö
33b83d89e3 rtpdec_vp9: Make sure to free the temp buffer on close
Signed-off-by: Martin Storsjö <martin@martin.st>
2016-04-30 20:57:31 +03:00
Martin Storsjö
75b90ef722 libavformat: Update the comment about AVOutputFormat flags
Add a flag which applies here, which had been missed.

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-04-21 11:20:46 +03: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
Luca Barbato
79fdbfdb3e img2enc: Refactor the atomic renaming code
And use it for the separate-plane side-feature as well.

Bug-Id: 935
2016-04-19 20:30:48 +02:00
Anton Khirnov
06edef3d5e Generate the lists of enabled protocols/bsfs from configure. 2016-04-19 13:34:07 +02:00
Diego Biurrun
d12b5b2f13 build: Split test programs off into separate files
This avoids spurious library rebuilds when only the test program
code is changed and simplifies the build system.
2016-04-07 16:14:42 +02:00
Diego Biurrun
01621202aa build: miscellaneous cosmetics
Restore alphabetical order in lists, break overly long lines, do some
prettyprinting, add some explanatory section comments, group parts
together that belong together logically.
2016-04-07 15:26:08 +02:00
Luca Barbato
e3453fd444 matroska: Write the field order information
And bump the document version to 4.
2016-04-03 19:36:57 +02:00
Luca Barbato
5f02266681 matroska: Support interlaced content correctly
The matroska specification now has two elements for it.
2016-03-31 18:03:21 +02:00
Ico Doornekamp
edf54887e2 rtpdec_jpeg: fix low contrast image on low quality setting
The problem is that the argument 'q' is of the type uint8_t.
According to the JPEG standard, if 1 <= q <= 50, the scale factor
'S' should be 5000 / Q. Because the create_default_qtables() reuses
the variable 'q' to store the result of this calculation, for small
values of q < 19, q wil subsequently overflow and give wrong results
in the calculated quantization tables.

Instead, use a new variable 'S' (same name as in RFC2435) with the
proper range to store the result of the division.

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-03-26 00:15:24 +02:00
Anton Khirnov
704a397697 rtmpdh: add an stdio.h include
The test uses printf.
2016-03-25 14:53:37 +01:00
Diego Biurrun
439929859a testprogs: Clean up #includes 2016-03-24 19:17:23 +01:00
Martin Storsjö
3ee2ec5ec1 unix: Use rw_timeout for setting the connect timeout
Signed-off-by: Martin Storsjö <martin@martin.st>
2016-03-24 10:34:29 +02:00
Martin Storsjö
136c3438bb tcp: Use rw_timeout for setting the connect/listen timeouts
Apply the default value for timeout in code instead of via the
avoption, to allow distinguishing the default value from the user
not setting anything at all.

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-03-24 10:34:24 +02:00
Martin Storsjö
fab8156b2f avio: Copy URLContext generic options into child URLContexts
Since all URLContexts have the same AVOptions, such AVOptions
will be applied on the outermost context only and removed from the
dict, while they probably make sense on all contexts.

This makes sure that rw_timeout gets propagated to the innermost
URLContext (to make sure it gets passed to the tcp protocol, when
opening a http connection for instance).

Alternatively, such matching options would be kept in the dict
and only removed after the ffurl_connect call.

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-03-24 10:34:19 +02:00
Martin Storsjö
933dec0e29 file: Add an option for following a file that is being written
Using this requires setting the rw_timeout option to make it
terminate, alternatively using the interrupt callback (if used via
the API).

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-03-24 10:33:59 +02:00
Andrey Utkin
ccea588f83 avio: Add an option 'rw_timeout'
If set non-zero, this limits duration of the retry_transfer_wrapper()
loop, thus affecting ffurl_read*(), ffurl_write(). As soon as
one single byte is successfully received/transmitted, the timer
restarts.

This has further changes by Michael Niedermayer and Martin Storsjö.

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-03-24 10:33:50 +02:00
Martin Storsjö
d44f3e4059 avio: Apply avoptions on the URLContext itself as well
Currently the list of avoptions for URLContext is empty though,
but such options will be added.

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-03-24 10:33:37 +02:00
wm4
8bc4accc37 lavf: use new decode API
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2016-03-23 19:31:36 +01:00
wm4
05f66706d1 lavc: introduce a new decoding/encoding API with decoupled input/output
Until now, the decoding API was restricted to outputting 0 or 1 frames
per input packet. It also enforces a somewhat rigid dataflow in general.

This new API seeks to relax these restrictions by decoupling input and
output. Instead of doing a single call on each decode step, which may
consume the packet and may produce output, the new API requires the user
to send input first, and then ask for output.

For now, there are no codecs supporting this API. The API can work with
codecs using the old API, and most code added here is to make them
interoperate. The reverse is not possible, although for audio it might.

Signed-off-by: Anton Khirnov <anton@khirnov.net>
2016-03-23 19:31:23 +01:00
Diego Biurrun
65a802401c build: Add component for the SRTP common code
This allows expressing the SRTP test code dependencies more clearly.
2016-03-23 09:35:41 +01:00
Vittorio Giovara
709c0f79d8 nuv: Use the correct context for av_image_check_size 2016-03-22 16:51:09 -04:00
Luca Barbato
9765549f55 mpegts: Forward the errors on mpeg4 objects parsing
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2016-03-20 01:04:12 +01:00
Luca Barbato
8b4b1c1eea matroska: Support V_QUICKTIME as written in the specification
Check if the size is written the first 4 bytes and read the next 4
as fourcc candidate, fallback checking the initial for 4 bytes.

"The CodecPrivate contains all additional data that is stored in the
'stsd' (sample description) atom in the QuickTime file after the
mandatory video descriptor structure (starting with the size and FourCC
fields)"

CC: libav-stable@libav.org
2016-03-15 16:06:35 +01:00
Luca Barbato
7e01d48cfd mov: Check the entries value when parsing dref boxes
And properly reset the entries count when resetting the entries.

CC: libav-stable@libav.org

Bug-Id: 929
Bug-Id: CVE-2016-3062
2016-03-11 14:29:13 +01:00
Vittorio Giovara
d40cb726d2 mov: Trim dref absolute path
Samples produced by Omneon (Harmonic) store external references with
paths ending with 0s. Such movs cannot be loaded properly since every
0 is converted to '/', to keep the same parsing code for dref type 2
and type 18: this makes the external reference point to a non-existing
direactory, rather than to the actual referenced file.

Add a brief trimming loop that drops all ending 0s before trying to
parse the external reference path.

Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
2016-03-05 08:23:18 -05:00
Anton Khirnov
84b5dcf275 asfenc: remove an unused variable 2016-03-05 08:45:01 +01:00
Anton Khirnov
ff3db937ef asfenc: fix some possible integer overflows
Store the file duration in the same timebase it arrives (i.e.
milliseconds) and only convert it to the file duration units (100ns)
when it's actually written, thus simplifying some calculations. Also,
store the duration as unsigned, since it cannot be negative.

CC: libav-stable@libav.org
Bug-ID: CVE-2016-2326
2016-03-05 08:43:04 +01:00
Anton Khirnov
1ceb07eb31 avformat_find_stream_info: move duration guessing after updating codec parameters
This bitrate might not be known otherwise.

Bug-Id: 926
2016-03-04 08:26:34 +01:00
Mark Harris
4d13bcceb9 sdp: fix opus sprop-stereo fmtp syntax
Signed-off-by: Martin Storsjö <martin@martin.st>
2016-03-01 08:56:36 +02:00
Anton Khirnov
3e8fd93b6a lavf: add a missing bump and APIchanges for the codecpar switch 2016-02-26 09:14:13 +01:00
Vittorio Giovara
fa55addd23 img2: Drop av_ prefix for a static function
This prefix is reserved for public functions only.

Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
2016-02-24 13:56:46 -05: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
Anton Khirnov
ec4c483976 lavf: add a protocol whitelist/blacklist for file opened internally
Should make the default behaviour safer for careless callers that open
random untrusted files.

Bug-Id: CVE-2016-1897
Bug-Id: CVE-2016-1898
2016-02-22 11:48:30 +01:00
Anton Khirnov
8c0ceafb0f urlprotocol: receive a list of protocols from the caller
This way, the decisions about which protocols are available for use in
any given situations can be delegated to the caller.
2016-02-22 11:45:31 +01:00
Anton Khirnov
cae448cfbf aviobuf: add a private data struct for avio_open()ed contexts
It will be useful in the following commits.
2016-02-22 11:36:47 +01:00
Anton Khirnov
832a202c47 protocols: make the list of protocols static
Disallow other code to touch it directly, now it's only accessible
through a blacklisting/whitelisting function.
2016-02-22 11:35:57 +01:00
Anton Khirnov
7d61dc95d7 lavf: move urlcontext_child_class_next() to protocols.c
It needs to access the list of protocols directly, so it more properly
belongs there.
2016-02-22 11:35:52 +01:00
Anton Khirnov
0fa00d0591 lavf: move avio_enum_protocols() to protocols.c
It's a more appropriate place for it.
2016-02-22 11:35:46 +01:00
Anton Khirnov
2758cdedfb lavf: reorganize URLProtocols
Instead of a linked list constructed at av_register_all(), store them
in a constant array of pointers.

Since no registration is necessary now, this removes some global state
from lavf. This will also allow the urlprotocol layer caller to limit
the available protocols in a simple and flexible way in the following
commits.
2016-02-22 11:30:58 +01:00
Anton Khirnov
225e84e745 hls: disallow opening nested files in child demuxers 2016-02-22 11:30:33 +01:00
Anton Khirnov
e192cd9ce2 smoothstreamingenc: do not open the files as read+write
They are only written to, never read.
2016-02-22 11:30:24 +01:00
Anton Khirnov
d082078a88 dashenc: eliminate ffurl_* usage
Now all IO should go through the IO callbacks and be interceptable by
the caller.
2016-02-22 11:29:00 +01:00
Anton Khirnov
7fbb3b5b98 lavf: use the io_open callbacks for files opened from open_input() as well
There is no real reason to treat them differently.
2016-02-22 11:28:35 +01:00
Anton Khirnov
dc6527ed90 nutenc: do not use AVCodecContext.frame_size
It will in general not be available. Use block_align if known or fall
back to av_get_audio_frame_duration().
2016-02-22 11:28:00 +01:00
Luca Barbato
bf7be043fc matroska: Always consider S_TEXT/UTF8 as SRT when demuxing
Reported-By: Maxim Koitsov <maksbotan@gentoo.org>
2016-02-22 09:40:16 +01:00
Diego Biurrun
8d918a98aa rtpdec: Use the right logging context 2016-02-19 20:38:18 +01:00
Luca Barbato
f273f7fb25 mkv: Force the full parsing of mp3
Some muxer might or might not fit incomplete mp3 frames in
their packets.

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2016-02-19 17:35:33 +01:00
Luca Barbato
3ef98937f5 mov: Force the full parsing of mp3
Some muxer might or might not fit incomplete mp3 frames in
their packets.

Bug-Id: 899

CC: libav-stable@libav.org

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2016-02-19 17:35:26 +01:00
Diego Biurrun
0d1229f1d2 voc: Split ff_voc_get_packet into a separate file 2016-02-18 15:35:46 +01:00
Diego Biurrun
624e235502 build: Introduce iso_media component 2016-02-18 15:35:46 +01:00
Diego Biurrun
82454c3a82 build: Let the WTV demuxer select the MPEG-TS demuxer
The WTV demuxer depends on large parts of the MPEG-TS demuxer internals
anyway and fails to build without it.
2016-02-18 15:35:45 +01:00
Diego Biurrun
29c2d06d67 cosmetics: Drop empty comment lines 2016-02-18 15:35:30 +01:00
Vittorio Giovara
b92962436b mov: Fix the format specifier type for size
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2016-02-16 18:25:47 +01:00
Luca Barbato
5eb562831b mov: Use the correct type for size
An AVIO offset is int64_t.

Bug-Id: 921
2016-02-14 11:44:38 +01:00
Luca Barbato
e579d8b29c lavf: Dump the cpb side data information 2016-02-13 14:03:52 +01:00
Andreas Cadhalpun
2e6ba1993e asfdec: make sure packet_size is non-zero before seeking
This fixes infinite loops due to seeking back.

Signed-off-by: Alexandra Hájková <alexandra@khirnov.net>
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2016-02-07 03:12:33 +01:00
Andreas Cadhalpun
bf50607ab7 asfdec: check for too small size in asf_read_unknown
This fixes infinite loops due to seeking back.

Signed-off-by: Alexandra Hájková <alexandra@khirnov.net>
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2016-02-07 03:12:33 +01:00
Andreas Cadhalpun
e4d1621c6e asfdec: check avio_skip in asf_read_simple_index
The loop can be very long, even though the file is very short.

Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Signed-off-by: Alexandra Hájková <alexandra@khirnov.net>
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2016-02-07 03:12:33 +01:00
Andreas Cadhalpun
a32dbf2aed asfdec: break if EOF is reached after asf_read_packet_header
asf_read_payload can unset eof_reached, so check it also before calling
that function.

This fixes infinite loops.

Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Signed-off-by: Alexandra Hájková <alexandra@khirnov.net>
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2016-02-07 03:12:33 +01:00
Vittorio Giovara
e80307140f yuv4mpegenc: Use AV_CEIL_RSHIFT where needed 2016-01-25 12:02:44 -05:00
Anton Khirnov
81306fd4bd hls: eliminate ffurl_* usage
Now all IO should go through the IO callbacks and be interceptable by
the caller.
2016-01-24 16:50:13 +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
Piotr Bandurski
55c7e5bf7c riff: add C210 FourCC (Canopus C210) 2016-01-21 15:33:19 -05:00
Piotr Bandurski
7c4059ae1e riff: add YUYV FourCC (Drastic YUYV) 2016-01-21 15:33:19 -05:00
Derek Buitenhuis
65d29dd274 mov: Add an option to toggle dref opening
This feature is mostly only used by NLE software, and is
both of dubious value being enabled by default, and a
possible security risk.

Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2016-01-21 14:32:39 +01:00
Martin Storsjö
e4eb13ca77 flvdec: Add sanity checking of the last packet size
For http, this avoids spurious warnings about failed requests (e.g.
HTTP error 416 Requested Range Not Satisfiable), if the last packet
is truncated and the size read is bogus.

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-01-19 14:24:35 +02:00
Michael Niedermayer
09f4822e4e flvdec: perform duration search just once
When loading a truncated flv file, it would previously try to do a seek to
the end of every packet read. For some input protocols (such as http), such
repeated seek attempts are cripple the reading performance.

Signed-off-by: Martin Storsjö <martin@martin.st>
2016-01-19 14:24:34 +02:00
Andreas Cadhalpun
9cdddb93bb nutdec: only copy the header if it exists
Fixes runtime error: null pointer passed as argument 2, which is
declared to never be null

Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2016-01-13 09:44:44 +01:00
Andreas Cadhalpun
5b83b24ccb nuv: sanitize negative fps rate
Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2016-01-13 09:37:11 +01:00
Anton Khirnov
9cce011b1d movenc-test: stop setting the GLOBAL_HEADER codec flag
This test does no encoding, setting the flag was done just to silence
the warning removed in the previous commit.
2016-01-12 09:12:24 +01:00
Anton Khirnov
521dc78366 mux: drop the warning about global headers
The AVStream codec context is often not (and should not be) the actual
encoding context, so this warning will be spurious in many cases.
2016-01-12 09:12:24 +01:00
Clément Bœsch
7570c9e04f swfdec: support compressed swf
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
2016-01-11 15:32:56 -05:00
Alexandra Hájková
34d45b3616 asfdec: Fix typo in comment
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2016-01-11 21:00:49 +01:00
Alexandra Hájková
066281372d asfdec: Remove unused function parameters
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2016-01-07 08:20:21 +01:00
Andreas Cadhalpun
2aec600ae7 asfdec: reject size > INT64_MAX in asf_read_unknown
Both avio_skip and detect_unknown_subobject use int64_t for the size
parameter.

This fixes a segmentation fault due to infinite recursion.

Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Signed-off-by: Alexandra Hájková <alexandra.khirnova@gmail.com>
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2016-01-07 08:20:21 +01:00
Andreas Cadhalpun
c69461d737 asfdec: only set asf_pkt->data_size after sanity checks
Otherwise invalid values are used unchecked in the next run.
This can cause NULL pointer dereferencing.

Signed-off-by: Andreas Cadhalpun <Andreas.Cadhalpun@googlemail.com>
Signed-off-by: Alexandra Hájková <alexandra.khirnova@gmail.com>
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2016-01-07 08:20:21 +01:00
Diego Biurrun
69a68593ce Remove stray line breaks from avpriv_{report_missing_feature|request_samples} 2015-12-26 10:28:03 +01:00
Diego Biurrun
5049f6b772 rtpdec_jpeg: Coalesce redundant error checks 2015-12-26 10:26:29 +01:00
Stefan Pöschel
dbce017913 mpegtsenc: add flag to embed an AC-3 ES the DVB way
So far an AC-3 elementary stream is refered to in the PMT according to
System A (ATSC). However System B (DVB) has a different way to signal an AC-3
ES within the PMT. This different way can be enabled by a new flag. The flag is
more generally named 'system_b' as there are further differences between ATSC
and DVB (e.g. the signalling of E-AC-3) which should then also be covered by it
in the future.

Bug-Id: 73

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-12-14 15:16:33 +01:00
Anton Khirnov
5bc223b15d r3d: fix an invalid read introduced in 6bf4c1d 2015-12-14 12:12:42 +01:00
Martin Storsjö
64f8c439fd rtmpproto: Include the full path as app when "slist=" is found
This matches what librtmp does. This fixes automatic url parsing of
crunchyroll urls.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-12-13 23:23:06 +02:00
Anton Khirnov
9f0b6e6827 vocdec: do not create the stream in read_header()
The stream parameters are not known until we read a packet, so postpone
creating it until then.
2015-12-12 21:27:11 +01:00
Anton Khirnov
2d0432d918 vocdec: put the code not shared with other demuxers under appropriate ifdef 2015-12-12 21:26:55 +01:00
Anton Khirnov
09ae7b81ea flvdec: do not create any streams in read_header()
The current muxer behaviour is to create streams in read_header() based
on the audio/video presence flags, but fill in the stream parameters
later when we actually get some packets for them. This is rather shady,
since other demuxers set the stream parameters immediately when the
stream is created and do not touch the stream codec context after that.

Change the flv demuxer to behave in the same way as other similar
demuxers -- create the streams only when we get a packet for them.
2015-12-12 21:26:48 +01:00
Anton Khirnov
72d658766e mp3dec: replace avpriv_mpa_decode_header with avpriv_mpegaudio_decode_header
The latter does not require a full AVCodecContext and still provides all
the functionality needed here.
2015-12-12 21:26:00 +01:00
Anton Khirnov
955aec3c7c mpegaudiodecheader: check the header in avpriv_mpegaudio_decode_header
Almost all the places from which this function is called already check
the header manually and in the two that don't (the mp3 muxer) the check
should not cause any problems.
2015-12-12 21:25:42 +01:00
Anton Khirnov
6bf4c1d711 r3d: do not create the audio stream until we know the sample rate 2015-12-12 21:20:33 +01:00
Anton Khirnov
9f1eccb97b ff_parse_specific_params: do not use AVCodecContext.frame_size
It will not be set unless the muxing codec context is also the encoding
context, which is discouraged. When the frame size is not known from
av_get_audio_frame_duration(), the fallback should still be good enough.
2015-12-12 21:19:50 +01:00
Anton Khirnov
1f008f34d5 rmenc: do not use AVCodecContext.frame_size
It will not be set if the stream codec context is not the encoding
context. Use av_get_audio_frame_duration() instead, it should work for
all audio codecs supported by the muxer.
2015-12-12 21:19:08 +01:00
Aaron Colwell
febfb49a70 matroskadec: Fix sample_aspect_ratio for stereo matroska content
matroskaenc applies divisors to the display width/height when generating
stereo content. This patch adds the corresponding multipliers to matroskadec
so that the original sample aspect ratio can be recovered.

Signed-off-by: wm4 <nfxjfg@googlemail.com>
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
2015-12-07 11:27:42 -05:00
Ganesh Ajjanagadde
d5f5c90be9 rtsp: free opts dictionary on failure of getnameinfo
Signed-off-by: Martin Storsjö <martin@martin.st>
2015-12-07 11:11:31 +02:00
Ganesh Ajjanagadde
8df8f0c70c movenc-test: add a missing va_end call
Signed-off-by: Martin Storsjö <martin@martin.st>
2015-12-07 11:11:30 +02:00
Anton Khirnov
b8b21dee0f mxfenc: always assume long gop
Checking the codec context parameters to find out this information is
far too unreliable to be useful, so it is safer to assume B-frames are
always present.
2015-12-06 10:28:36 +01:00
Anton Khirnov
e02de9df4b lavc: export Dirac parsing API used by the ogg demuxer as public
Also, stop using AVCodecContext for storing the stream parameters.
2015-12-06 10:28:04 +01:00
Anton Khirnov
8bcadaacc2 mpegenc: 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:13 +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
Luca Barbato
5f3a081b42 avi: Spin out the logic to position to the next non-interleaved stream
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-12-02 23:49:10 +01:00
Michael Niedermayer
0fc61c6ab6 avi: Validate the stream-id for DV as well
Avoid false positives while syncing.

Bug-Id: ffmpeg/4086
Bug-Id: 879

Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-12-02 23:49:10 +01:00
Luca Barbato
d017ed878a avi: Use the correct data type
avio_tell returns an int64_t.
2015-12-02 23:49:10 +01:00
Mohamed Naufal
ca5f386e75 lavf: G.723.1 muxer
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
2015-11-30 10:58:46 -05:00
Luca Barbato
a0fa6d06b8 matroska: Warn when metadata references a non-existent element
Avoid some confusion when the information is not present.

Bug-Id: 902
2015-11-28 17:02:15 +01:00
Luca Barbato
f7986239f4 dvenc: Validate the frame size before copying it 2015-11-28 17:02:15 +01:00
Luca Barbato
0e2395293b nut: Mark non-fatal errors as warnings
And make one more informative.
2015-11-25 09:01:25 +01:00
Luca Barbato
62f72b40c0 nut: Provide more information on failure 2015-11-25 09:01:25 +01:00
Luca Barbato
2c17fb61ce rtsp: Log getaddrinfo failures
And forward the logging contexts when needed.
2015-11-25 09:01:25 +01:00
Luca Barbato
12b1438286 udp: Provide additional information on getaddrinfo failure 2015-11-25 09:01:25 +01:00
Luca Barbato
34af7813f7 udp: Use the logging context 2015-11-25 09:01:25 +01:00
Luca Barbato
98063bcf15 rtsp: Do not assume getnameinfo cannot fail
And properly report the error when it happens.
2015-11-25 09:01:25 +01:00
Michael Niedermayer
5b70fb8fee movenc-test: Fix integer overflows
Signed-off-by: Martin Storsjö <martin@martin.st>
2015-11-24 20:57:11 +02:00
Alexandra Hájková
8375dc1dd1 asfdec: handle the case when the stream index has an invalid value better
The demuxer returned INVALIDDATA and failed to demux the remaining data
when an invalid stream index was read, now it just skips the asf packet
for the stream with an invalid stream index and continues demuxing.

Reported-By: Hendrik Leppkes

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-11-23 11:42:55 +01:00
Derek Buitenhuis
c8fa647811 oggparsespeex: Fix unchecked malloc
Signed-off-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-11-23 10:44:07 +01: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
John Stebbins
7f4ec4364b avformat: expose av_stream_new_side_data helper
Signed-off-by: Anton Khirnov <anton@khirnov.net>
2015-11-18 11:36:27 +01:00
Anton Khirnov
21ab6fd01b lavf: document that passing valid timestamps to muxers is now mandatory
Also, extend the documentation about setting timestamps.
2015-11-18 11:31:40 +01:00
Michael Niedermayer
2fb6e1e754 segafilm: Fix current_sample after seeking and avio_seek return type
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2015-11-14 03:39:44 +01:00
Martin Storsjö
62b4a6f1b9 rtmpcrypt: Provide the xtea keys in little endian format for consistency
Signed-off-by: Martin Storsjö <martin@martin.st>
2015-11-13 21:54:04 +02:00
Martin Storsjö
588b6215b4 rtmpcrypt: Do the xtea decryption in little endian mode
The XTEA algorithm operates on 32 bit numbers, not on byte sequences.
The XTEA implementation in libavutil is written assuming big endian
numbers, while the rtmpe signature encryption assumes little endian.

This fixes rtmpe communication with rtmpe servers that use signature
type 8 (XTEA), e.g. crunchyroll.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-11-13 21:53:57 +02:00
Vittorio Giovara
b5f963bfec mov: Drop dref when unable to parse
Some entries might be either empty or contain types we do not parse
(eg. 'url '). In both cases, if an 'alis' is not the first entry,
external references are not loaded, so make sure that the array starts
with an 'alis' dref.
2015-11-12 04:39:14 +01:00
Vittorio Giovara
303f931938 mov: Correctly store dref paths
Rather than reading the alternate absolute path version from dref
type 18, make sure that 0s are considered as '/'. These values are
sometimes present in the full path, and are mistakenly interpreted as
line terminators othewise.

With the correct handling of this dref type, parsing type 18 is not
needed any more.
2015-11-12 04:39:14 +01:00
Carl Eugen Hoyos
73b0324913 aiff: Support demuxing G.722 streams 2015-11-12 04:39:14 +01:00
Paul B Mahol
5f2c8315b3 thp: set duration for audio stream too
Signed-off-by: Paul B Mahol <onemda@gmail.com>
2015-11-12 04:39:14 +01:00
Martin Storsjö
1d62ee3889 movenc: Add a unit test for signaling of the track start times
Signed-off-by: Martin Storsjö <martin@martin.st>
2015-11-11 22:53:42 +02: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ö
3eeb7edfc2 movenc: Add a unit test for frag_discont with edit lists
This tests the case where the muxer correctly guesses that a stream
starts at pts=0.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-11-11 22:52:53 +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
Martin Storsjö
59e8ec0aa8 movenc: Add an API unit test for fragmenting options/calls
Contrary to the normal fate tests that run via avconv, this tests
nontrivial call sequences that are only doable via the API
(mainly for different corner cases when using the muxer for
segmenting).

The test muxes fake packet data (with extradata that looks
enough like proper data to make the file be viewable with e.g.
boxdumper) and checks the hash of the produced files. The test also
verifies that fragments produced via different call sequences remain
identical (to avoid e.g. updating the output hashes and suddenly
having fragments that used to be identical suddenly diverging), for
fragments written with frag_discont and/or delay_moov.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-11-10 21:50:25 +02: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
Anton Khirnov
8de1ee9f72 lavf: deprecate compute_pkt_fields2
All encoders set pts and dts properly now (and have been doing that for
a while), so there is no good reason to do any timestamp guessing in the
muxer.

The newly added AVStreamInternal will be later used for storing all the
private fields currently living in AVStream.
2015-11-09 07:50:55 +01:00
Anton Khirnov
aeda1121c9 lavf: factor out freeing an AVStream
It will be needed in other functions.
2015-11-08 11:49:23 +01:00
Anton Khirnov
a0c71a5751 lavf: initialize cur_dts to AV_NOPTS_VALUE for muxing
The reasoning for setting it to zero only applies to demuxing.
2015-11-08 11:48:47 +01:00
Michael Niedermayer
563e6d8603 segafilm: drop the "song and dance" for cinepak
This seems not to do anything any more since a long time, and removing
it avoids using uninitialized memory. Also change the error value
forwarding as done everywhere else.

Partly fixes: msan_uninit-mem_7fb7d24780d0_2744_R03T.CAK
Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
2015-11-06 21:55:15 +01:00
Paul B Mahol
1e791ee3aa segafilm: set video and audio stream duration
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
2015-11-06 21:55:15 +01:00
Paul B Mahol
c012c6f1a8 segafilm: implement seeking
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
2015-11-06 21:55:15 +01:00
wm4
f128b8e19a mov: detect cover art pictures by content
I've got some m4a samples that had jpeg cover art marked as png. Since
these files were supposedly written by iTunes, and other software can
read it (e.g. clementine does), this should be worked around.

Since png has a very simple to detect header, while it's apparently a
real pain to detect jpeg in the general case, try to detect png and
assume jpeg otherwise. Not bothering with bmp, as I have no test case.

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-11-03 15:03:12 +01:00
Luca Barbato
452d659aa4 msnwc_tcp: Use the correct return values
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-11-02 16:27:42 +01:00
Luca Barbato
f8d10511fe cosmetics: msnwc_tcp: Reformat
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-11-02 16:27:31 +01:00
Luca Barbato
4dfbc7a755 msnwc_tcp: Correctly report failure
And prevent a memory leak

CC: libav-stable@libav.org

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-11-02 16:26:37 +01:00
Luca Barbato
1e7ff5ac69 nut: Use the correct codec_tag when multiple are available
Some codecs use the codec_tag to signal specific information and
picking the first one would lead to a broken file.

Bug-Id: 883
CC: libav-stable@libav.org

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-11-02 12:10:38 +01:00
Vittorio Giovara
f53583ea6e omadec: Fix position of opening parenthesis 2015-10-30 12:46:56 +01:00
Martin Storsjö
00b62968d0 os_support: Don't try to return the service name as a string in getnameinfo
Some systems may be lacking getservbyport; the previous ifdef wasn't
quite enough since it still assumed that struct servent was defined,
as pointed out by Clément Gregoire.

Simply remove the possibility to return non-numeric services in
getnameinfo; no caller of getnameinfo within libavformat
currently try to use getnameinfo for retrieving the port number without
NI_NUMERICSERV, and falling back on getservbyport may be non-threadsafe.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-10-30 10:03:58 +02:00
Luca Barbato
9b56d5c114 avpacket: Deprecate av_dup_packet
As documented, `av_dup_packet` is broken by design, `av_packet_ref`
matches the AVFrame ref-counted API and can be safely used instead.
2015-10-26 18:00:55 +01:00
Luca Barbato
d584533cf3 avformat: Rework add_to_pktbuf
Make it return an error and check its return value when it is used.
Simplify the usage by calling `av_packet_ref` internally when needed.
2015-10-26 18:00:55 +01:00
Luca Barbato
ce70f28a17 avpacket: Replace av_free_packet with av_packet_unref
`av_packet_unref` matches the AVFrame ref-counted API and can be used as
a drop in replacement.

Deprecate `av_free_packet`.
2015-10-26 18:00:55 +01:00
Luca Barbato
a5d4204309 avformat: Always return ref-counted AVPacket
And drop the av_dup_packet from the input_thread.
2015-10-26 18:00:55 +01:00
Vittorio Giovara
533a619850 innoHeim/Rsupport Screen Capture Codec decoder
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
2015-10-23 14:56:43 +02:00
Luca Barbato
18f9308e6a mpjpeg: Cope with multipart lacking the initial CRLF
Some server in the wild do not put the boundary at a newline
as rfc1347 7.2.1 states.
Cope with that by reading a line and if it is not empty reading
a second one.

Reported-By: bitingsock
2015-10-23 11:56:38 +02:00
Luca Barbato
22f4d9c303 img2enc: Make sure the images are atomically written
Users that want to generate a live-preview and serve it
would otherwise get partial images.
2015-10-23 11:55:14 +02: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
Martin Storsjö
e02dcdf6bb rtsp: Allow $ as interleaved packet indicator before a complete response header
Some RTSP servers ("HiIpcam/V100R003 VodServer/1.0.0") respond to
our keepalive GET_PARAMETER request by a truncated RTSP header
(lacking the final empty line to indicate a complete response
header). Prior to 764ec70149, this worked just fine since we
reacted to the $ as interleaved packet indicator anywhere.

Since $ is a valid character within the response header lines,
764ec70149 changed it to be ignored there. But to keep
compatibility with such broken servers, we need to at least
allow reacting to it at the start of lines.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-10-23 10:31:55 +03:00
Vittorio Giovara
f890677d05 Replace any remaining avpicture function with imgutils
avpicture_get_size() -> av_image_get_buffer_size()

Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
2015-10-21 11:59:59 +02:00
Andrey Utkin
c134850669 httpauth: Add space after commas in HTTP/RTSP auth header
This fixes access to Grandstream cameras, which return 401 otherwise.
VLC sends Authorization: header with spaces between parameters, and it
is known to work with Grandstream devices and broad range of other HTTP
and RTSP servers, so author considers switching to such behaviour safe.

See RFC 2617 (HTTP Auth).

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-10-14 14:35:34 +02:00
Michael Niedermayer
e55376a1fd rtmpproto: Write correct flv packet sizes at the end of packets
In one case it was written as zero, one case left it uninitialized,
missed the 11 bytes for the flv header.

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-10-14 14:35:33 +02:00
Luca Barbato
34ed5c2e4d avformat: Do not use AVFMT_RAWPICTURE
There are no formats supporting it anymore and it is deprecated.
Update the documentation accordingly.
2015-10-13 13:43:29 +02:00
Luca Barbato
b9ece15a01 nullenc: Use the wrapped avframe pseudo-encoder 2015-10-10 14:50:42 +02:00
Luca Barbato
d00a8fd417 yuv4mpeg: Use the wrapped avframe pseudo-encoder 2015-10-10 14:50:42 +02:00
Alexandra Hájková
00cc10aee3 asfdec: do not skip padding if offset is above packet size - padding
Sample-Id: https://samples.libav.org/asf-wmv/demux-asf-assert-failed.wmv

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-10-08 21:55:31 +02:00
John Stebbins
f56a085593 matroskaenc: Don't write a track language tag
"language" is not an offical matroska tag.
Track languages are specified with the MATROSKA_ID_TRACKLANGUAGE ebml.
Writing the tag overrides the ebml specified language during playback with
libav and some other players.

Signed-off-by: Anton Khirnov <anton@khirnov.net>
2015-10-03 13:44:35 +02:00
Luca Barbato
74942685cb hls: Check av_opt_set_dict return value as well
Bug-Id: CID 1320426
2015-10-01 13:51:13 +02:00
Vittorio Giovara
9a3202a98b Screenpresso SPV1 decoder
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
2015-09-30 16:45:11 +02:00
Thierry Foucu
c5e5e63062 riff: Add support for RV40 codec in AVI
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2015-09-29 14:33:01 +02:00
wm4
948f3c19a8 lavc: Make AVPacket.duration int64, and deprecate convergence_duration
Note that convergence_duration had another meaning, one which was in
practice never used. The only real use for it was a 64 bit replacement
for the duration field. It's better just to make duration 64 bits, and
to get rid of it.

Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
2015-09-29 14:33:00 +02:00
wm4
cc8db76061 mpegts: use avcodec_get_type() to set codec_type
Note that this slightly changes behavior: it sets AVMEDIA_TYPE_UNKNOWN
if the codec type is unknown. This should be ok.

Signed-off-by: Anton Khirnov <anton@khirnov.net>
2015-09-28 10:50:50 +02:00
Luca Barbato
22cc57da64 rtpdec: Forward the memory failure
And avoid a memory leak.

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-09-16 20:20:16 +02:00
Eloi BAIL
1ec611a102 rtsp: warning when max_delay reached
packets are queued due to packet reordering until the queue reach its
maximal size or max delay is reached.
This commit adds a warning trace when max delay is reached.

Signed-off-by: Eloi BAIL <eloi.bail@savoirfairelinux.com>
Signed-off-by: Martin Storsjö <martin@martin.st>
2015-09-16 09:58:12 +03:00
Eloi BAIL
d555bd69e7 rtpdec: inform jitter buffer size
This commit print as AV_LOG_VERBOSE the jitter buffer
size. It might be the default value or the value set by application.

Signed-off-by: Eloi BAIL <eloi.bail@savoirfairelinux.com>
Signed-off-by: Martin Storsjö <martin@martin.st>
2015-09-16 09:55:51 +03:00
Eloi BAIL
ff7f6ea9db rtpdec: add a trace when jitter buffer is full
This commit adds a warning trace when jitter buffer
is full. It helps to understand leading decoding issues.

Signed-off-by: Eloi BAIL <eloi.bail@savoirfairelinux.com>
Signed-off-by: Martin Storsjö <martin@martin.st>
2015-09-16 09:54:14 +03:00
Martin Storsjö
3c525b8b47 rtpdec: Increase the max size of the jitter buffer to 500 packets
Since the actual max length of the jitter buffer is restricted by
max_delay, this shouldn't harm the overall latency (assuming that
max_delay is set properly), while allowing packet reordering with
a larger number of packets (which may be required with high bitrate
video).

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-09-15 09:35:44 +03:00
Vittorio Giovara
10de408738 lavf: Update to the new crypto API 2015-09-13 17:34:45 +02:00
Alexandra Hájková
c0a49077ea asfdec: add more checks for size left in asf packet buffer
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-09-12 14:23:32 +02:00
Luca Barbato
41ed749fe9 ogg: Do not try to use the parser if it is not present
Bug-Id: 886
CC: libav-stable@libav.org
2015-09-10 14:47:33 +02:00
Alexandra Hájková
77cf236689 asfdec: alloc enough space for storing name in asf_read_metadata_obj
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-09-06 20:48:36 +02:00
Martin Storsjö
7cad1bf075 mov: Allow more than one keyframe per trun
The previous restriction was partially designed to fix certain
(broken) samples from bug 215. There should be no restriction on the
number of keyframes per fragment or trun.

The spec suggests that all frames lacking MOV_FRAG_SAMPLE_FLAG_IS_NON_SYNC
are key frames, but we require the flag MOV_FRAG_SAMPLE_FLAG_DEPENDS_YES
to be unset as well. This works for (possibly broken) media that never
sets the NON_SYNC flag and should also be correct for any spec-compliant
file.

For files that never set either of the flags, all samples are marked
as keyframes.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-09-06 21:24:37 +03:00
Vittorio Giovara
599fe93a84 riff: Add AVj2 fourcc for Avid jpeg2000 2015-09-04 17:51:29 +02:00
Sean McGovern
9ad1e0c12c mux: Make sure that the data is actually written
And forward the error if it is not.

Bug-Id: 881

CC: libav-stable@libav.org

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-09-03 13:39:34 +02:00
Sean McGovern
e05f7ed543 file: properly forward errors from file_read() and file_write()
Bug-Id: 881

CC: libav-stable@libav.org

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-09-03 13:39:34 +02:00
Vittorio Giovara
c45fcf30cf DXV decoder
Support all DXDI and DXD3 normal quality videos.
2015-09-02 22:22:02 +02:00
Vittorio Giovara
e88103a7f9 Bump major versions of all libraries
Signed-off-by: Vittorio Giovara <vittorio.giovara@gmail.com>
2015-08-28 16:04:28 +02:00
Vittorio Giovara
4e649debcf Postpone API-incompatible changes until the next bump 2015-08-28 16:04:28 +02:00
Vittorio Giovara
01bcc2d5c2 lavc: Drop deprecated destruct_packet related functions
Deprecated in 10/2012.
2015-08-28 16:01:16 +02:00
Luca Barbato
e176639bcb webm: Explicitly select libvpx, libopus and libvorbis encoders
And update the preference for the newer codecs now that the libraries
seem stable and widespread enough.

Bug-Id: 695
Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-08-25 19:47:43 +02:00
Luca Barbato
2157df425b hlsenc: Support outputting specific versions
Right now only version 2 and version 3 are supported.

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-08-25 19:43:58 +02:00
Alexandra Hájková
317cfaa5e0 asfdec: prevent the memory leak in the asf_read_metada_obj
also do not return the error code but just break reading
metadata object in the case of the aspect ratio reading failure

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-08-16 20:00:37 +02:00
Luca Barbato
72839fce64 hlsenc: Use AV_TIME_BASE units for all the computations
Do not risk mixing different timebases.

CC: libav-stable@libav.org

Signed-off-by: Luca Barbato <lu_zero@gentoo.org>
2015-08-16 19:02:16 +02:00