Commit Graph

116 Commits

Author SHA1 Message Date
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
Andrew Shulgin
1c7e2cf9d3 avformat/rtpdec_h264: Ignore invalid sprop-parameter-sets missing PPS
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
2016-03-01 02:19:23 +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
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
3130e5be92 Merge commit 'd594dbecce5f3af7f80bbf5bb1b516d740b69ccd'
* commit 'd594dbecce5f3af7f80bbf5bb1b516d740b69ccd':
  rtpdec: Rename the free method to close

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-25 00:58:39 +01:00
Michael Niedermayer
fa80b76b11 Merge commit 'bb4a310bb85f43e62240145a656b1e5285b14239'
* commit 'bb4a310bb85f43e62240145a656b1e5285b14239':
  rtpdec: Don't free the payload context in the .free function

Conflicts:
	libavformat/rtpdec_latm.c
	libavformat/rtpdec_mpeg4.c
	libavformat/rtpdec_mpegts.c
	libavformat/rtpdec_xiph.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-25 00:25:12 +01:00
Michael Niedermayer
d2a5c6f210 Merge commit 'ec96a89c3e507cf0fb1f2b159b28a53f2bad9a74'
* commit 'ec96a89c3e507cf0fb1f2b159b28a53f2bad9a74':
  rtpdec: Don't pass non-const pointers to fmtp attribute parsing functions

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-24 23:44:25 +01:00
Michael Niedermayer
499da717b8 Merge commit 'ac0e54fda9305cc7d149007f5b512bb8619f7c78'
* commit 'ac0e54fda9305cc7d149007f5b512bb8619f7c78':
  rtpdec: Add const to string parameters in internal fmtp parsing functions

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-24 23:38:19 +01:00
Michael Niedermayer
17773f49b7 Merge commit '3567b91e49c6ae101c9a35c90f46b8ad9890ac15'
* commit '3567b91e49c6ae101c9a35c90f46b8ad9890ac15':
  rtpdec_hevc: Share the implementation of fragmented packets with h264

Conflicts:
	libavformat/rtpdec_h264.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-24 23:23:26 +01:00
Michael Niedermayer
29f9d82d23 Merge commit '8633fb47db2ec39eb8bd1bd65302af75a94ff5d0'
* commit '8633fb47db2ec39eb8bd1bd65302af75a94ff5d0':
  rtpdec_hevc: Share the implementation of parsing a=framesize with h264

Conflicts:
	libavformat/rtpdec_h264.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-24 23:03:12 +01:00
Michael Niedermayer
3804d73e46 Merge commit '5d8cae45737bed6239bd6b6e0698802dbe1463c8'
* commit '5d8cae45737bed6239bd6b6e0698802dbe1463c8':
  rtpdec: Get rid of all trivial .alloc/.free functions

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-24 22:55:20 +01:00
Michael Niedermayer
11fb625858 Merge commit '2b982e92f42a6e661d90b12b6592cd13cae496d4'
* commit '2b982e92f42a6e661d90b12b6592cd13cae496d4':
  rtpdec: Set need_parsing via a handler field

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-24 22:34:08 +01:00
Michael Niedermayer
a4f50ec9dd Merge commit '0752f700d63f6b15ffd5369ac7615414cce71247'
* commit '0752f700d63f6b15ffd5369ac7615414cce71247':
  rtpdec_h264: Remove an unnecessary include

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-24 22:19:06 +01:00
Michael Niedermayer
ae2a8d8742 Merge commit '247764a592f83521f9c1ccdc900b00a8b84f3c87'
* commit '247764a592f83521f9c1ccdc900b00a8b84f3c87':
  rtpdec_h264: Remove unnecessary struct padding

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-24 22:12:16 +01:00
Martin Storsjö
d594dbecce rtpdec: Rename the free method to close
Many of these functions were named foo_free_context, and since
the functions no longer should free the context itself, only
allocated elements within it, the previous naming was slightly
misleading.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-02-24 23:07:50 +02:00
Martin Storsjö
bb4a310bb8 rtpdec: Don't free the payload context in the .free function
This makes it more consistent with depacketizers that don't have any
.free function at all, where the payload context is freed by the
surrounding framework. Always free the context in the surrounding
framework, having the individual depacketizers only free any data
they've specifically allocated themselves.

This is similar to how this works for demuxer/muxers/codecs - a
component shouldn't free the priv_data that the framework has
allocated for it.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-02-24 23:07:35 +02:00
Martin Storsjö
ec96a89c3e rtpdec: Don't pass non-const pointers to fmtp attribute parsing functions
This makes it clear that the individual parsing functions can't
touch the parsed out value.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-02-24 23:07:22 +02:00
Martin Storsjö
ac0e54fda9 rtpdec: Add const to string parameters in internal fmtp parsing functions
Signed-off-by: Martin Storsjö <martin@martin.st>
2015-02-24 23:07:18 +02:00
Michael Niedermayer
30c863fdfa Merge commit '3cd5828fc0007e6d056067444de053a34ddedd02'
* commit '3cd5828fc0007e6d056067444de053a34ddedd02':
  rtpdec: Add missing trailing commas

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-24 22:03:19 +01:00
Martin Storsjö
3567b91e49 rtpdec_hevc: Share the implementation of fragmented packets with h264
Signed-off-by: Martin Storsjö <martin@martin.st>
2015-02-24 16:25:28 +02:00
Martin Storsjö
8633fb47db rtpdec_hevc: Share the implementation of parsing a=framesize with h264
Signed-off-by: Martin Storsjö <martin@martin.st>
2015-02-24 16:24:36 +02:00
Martin Storsjö
5d8cae4573 rtpdec: Get rid of all trivial .alloc/.free functions
Signed-off-by: Martin Storsjö <martin@martin.st>
2015-02-24 16:24:19 +02:00
Martin Storsjö
2b982e92f4 rtpdec: Set need_parsing via a handler field
This avoids implementing a full function just to set this one
field.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-02-24 16:22:41 +02:00
Martin Storsjö
0752f700d6 rtpdec_h264: Remove an unnecessary include
Nothing in this file use any network functions.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-02-24 16:20:54 +02:00
Martin Storsjö
247764a592 rtpdec_h264: Remove unnecessary struct padding
There's no point in adding padding in the allocation of a depacketizer
specific context struct.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-02-24 16:20:44 +02:00
Martin Storsjö
3cd5828fc0 rtpdec: Add missing trailing commas
Signed-off-by: Martin Storsjö <martin@martin.st>
2015-02-24 16:20:02 +02:00
Michael Niedermayer
596f81c75b Merge commit 'fe208ca54b0d3b6bbe1c660d371bb2cc6cf40ffc'
* commit 'fe208ca54b0d3b6bbe1c660d371bb2cc6cf40ffc':
  rtpdec_hevc: Skip 1 byte (DOND) instead of 2 (DONL) between aggregation units

Conflicts:
	libavformat/rtpdec_hevc.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-23 21:01:44 +01:00
Martin Storsjö
fe208ca54b rtpdec_hevc: Skip 1 byte (DOND) instead of 2 (DONL) between aggregation units
Only the first aggregation unit has 2 bytes (DONL) prepended, if
such a field is in use.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-02-23 15:33:20 +02:00
Michael Niedermayer
b0b7571a52 Merge commit 'ff394ca087d41941d2157e7a4e356e3ad312494e'
* commit 'ff394ca087d41941d2157e7a4e356e3ad312494e':
  rtpdec_h264: Add a missing closing paren in a log message

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-22 00:15:10 +01:00
Martin Storsjö
ff394ca087 rtpdec_h264: Add a missing closing paren in a log message
Signed-off-by: Martin Storsjö <martin@martin.st>
2015-02-21 23:36:56 +02:00
Michael Niedermayer
a10529a319 Merge commit '0de07510844517b615ef2a2e2916f6391ad88687'
* commit '0de07510844517b615ef2a2e2916f6391ad88687':
  rtpdec_h264: Make reusable functions non-static

Conflicts:
	libavformat/rtpdec_formats.h
	libavformat/rtpdec_h264.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-21 12:56:08 +01:00
Michael Niedermayer
7fd732b758 Merge commit '16163e6bf2d446c06d4dd053c0852074bb50508d'
* commit '16163e6bf2d446c06d4dd053c0852074bb50508d':
  rtpdec_h264: Fix nal type counting after refactoring

Conflicts:
	libavformat/rtpdec_h264.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-21 12:44:09 +01:00
Michael Niedermayer
34c58618be Merge commit 'a3cc519d1f43bf93cc29fd53284a2b8aa6189a9a'
* commit 'a3cc519d1f43bf93cc29fd53284a2b8aa6189a9a':
  rtpdec_h264: Prepare h264_handle_packet_stap_a for sharing with hevc

Conflicts:
	libavformat/rtpdec_h264.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-21 12:32:28 +01:00
Michael Niedermayer
621450e786 Merge commit '48183b3ad45c95e386a4cb02e1a68b53e6835ac5'
* commit '48183b3ad45c95e386a4cb02e1a68b53e6835ac5':
  rtpdec_h264: Generalize parse_sprop_parameter_sets

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-21 12:25:09 +01:00
Martin Storsjö
0de0751084 rtpdec_h264: Make reusable functions non-static
Signed-off-by: Martin Storsjö <martin@martin.st>
2015-02-21 11:32:41 +02:00
Martin Storsjö
16163e6bf2 rtpdec_h264: Fix nal type counting after refactoring
This fixes builds with -DDEBUG after f0a874799.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-02-21 11:32:38 +02:00
Martin Storsjö
a3cc519d1f rtpdec_h264: Prepare h264_handle_packet_stap_a for sharing with hevc
Add a parameter for skipping a number of bytes at the start of each nal.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-02-21 11:32:36 +02:00
Martin Storsjö
48183b3ad4 rtpdec_h264: Generalize parse_sprop_parameter_sets
Don't write directly into an AVCodecContext, write into given
pointers.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-02-21 11:32:31 +02:00
Michael Niedermayer
dc6eadaa45 Merge commit '46ad9ac9641d1fe8292ec1f46bbd2e4456621ca7'
* commit '46ad9ac9641d1fe8292ec1f46bbd2e4456621ca7':
  rtpdec_h264: Move a leftover comment into h264_handle_packet_stap_a

Conflicts:
	libavformat/rtpdec_h264.c

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-20 22:03:54 +01:00
Michael Niedermayer
d19ca4b2ea Merge commit 'a335ed767161c6da2815371177cfd5e40f78e5b7'
* commit 'a335ed767161c6da2815371177cfd5e40f78e5b7':
  rtpdec_h264: Remove an unnecessary check

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-20 21:57:34 +01:00
Michael Niedermayer
ac7128a90f Merge commit '176903ce833ce7469f411640e9748a0d549b5285'
* commit '176903ce833ce7469f411640e9748a0d549b5285':
  rtpdec_h264: Return immediately on errors in h264_handle_packet_stap_a

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-20 21:48:32 +01:00
Michael Niedermayer
48e661b30b Merge commit 'bb8c6ac840afa69dd37860fdf85da9f4cf1e0ae4'
* commit 'bb8c6ac840afa69dd37860fdf85da9f4cf1e0ae4':
  rtpdec_h264: Make a parameter pointer const

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-20 21:40:17 +01:00
Michael Niedermayer
5346b57ee7 Merge commit '7650caf013f45ebebf128855735a0c6350836ea4'
* commit '7650caf013f45ebebf128855735a0c6350836ea4':
  rtpdec_h264: Use av_realloc instead of av_malloc+mempcy

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-20 21:30:14 +01:00
Michael Niedermayer
2130ed3312 Merge commit '8bdbf49c6f4d9473183a3c45ec70d611eb6183cd'
* commit '8bdbf49c6f4d9473183a3c45ec70d611eb6183cd':
  rtpdec_h264: Include the right header for AV_RB16

Merged-by: Michael Niedermayer <michaelni@gmx.at>
2015-02-20 21:23:16 +01:00
Martin Storsjö
46ad9ac964 rtpdec_h264: Move a leftover comment into h264_handle_packet_stap_a
Signed-off-by: Martin Storsjö <martin@martin.st>
2015-02-20 19:30:05 +02:00
Martin Storsjö
a335ed7671 rtpdec_h264: Remove an unnecessary check
If src_len is too small for nal_size, we already print a warning
above, and the next step is to check the while loop condition
anyway, so this one serves no purpose.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-02-20 19:29:58 +02:00
Martin Storsjö
176903ce83 rtpdec_h264: Return immediately on errors in h264_handle_packet_stap_a
Previously, errors were only logged but the code kept on trying,
and never actually returning the error as a return value.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-02-20 19:29:39 +02:00
Martin Storsjö
bb8c6ac840 rtpdec_h264: Make a parameter pointer const
Signed-off-by: Martin Storsjö <martin@martin.st>
2015-02-20 19:29:34 +02:00
Martin Storsjö
7650caf013 rtpdec_h264: Use av_realloc instead of av_malloc+mempcy
This is similar to what was done for rtpdec_hevc in ced7238cd0.

Signed-off-by: Martin Storsjö <martin@martin.st>
2015-02-20 19:29:29 +02:00