Commit graph

1213 commits

Author SHA1 Message Date
wm4
a04c2c707d lavc: replace and deprecate the lock manager
Use static mutexes instead of requiring a lock manager. The behavior
should be roughly the same before and after this change for API users
which did not set the lock manager at all (except that a minor memory
leak disappears).
2017-12-26 02:50:00 +01:00
Aman Gupta
8bf4e6d3ce lavc/mediacodec: use AVMediaCodecDeviceContext hw_device_ctx if set
Signed-off-by: Matthieu Bouron <matthieu.bouron@gmail.com>
2017-12-16 00:52:27 +01:00
wm4
b945fed629 avcodec: add metadata to identify wrappers and hardware decoders
Explicitly identify decoder/encoder wrappers with a common name. This
saves API users from guessing by the name suffix. For example, they
don't have to guess that "h264_qsv" is the h264 QSV implementation, and
instead they can just check the AVCodec .codec and .wrapper_name fields.

Explicitly mark AVCodec entries that are hardware decoders or most
likely hardware decoders with new AV_CODEC_CAPs. The purpose is allowing
API users listing hardware decoders in a more generic way. The proposed
AVCodecHWConfig does not provide this information fully, because it's
concerned with decoder configuration, not information about the fact
whether the hardware is used or not.

AV_CODEC_CAP_HYBRID exists specifically for QSV, which can have software
implementations in case the hardware is not capable.

Based on a patch by Philip Langdale <philipl@overt.org>.

Merges Libav commit 47687a2f8a.
2017-12-14 19:37:56 +01:00
Gyan Doshi
dc7d5f9f19 avcodec/libx265 - Add named option to set profile
Adds call to x265_param_apply_profile after x265_param_parse.
Added as private option since HEVC profiles other than
Main, Main 10 and MSP in AVCodecContext are consolidated in a single
constant.

Reviewed-by: Hendrik Leppkes <h.leppkes@gmail.com>
Reviewed-by: Derek Buitenhuis <derek.buitenhuis@gmail.com>
Reviewed-by: Lou Logan <lou@lrcd.com>
2017-12-06 12:57:35 -09:00
wm4
a5679933c1 vp9: use superframe split BSF
webm usually has invisible superframes merged with normal frames.
(vpxenc muxes them in this form, which is evidence enough that this is
the standard webm packet format. It's rather unclear whether ffmpeg is
even allowed to remux them with split packets.)

The vp9 decoder needs them to be in separate packets for multithreading
to work. Add the BSF to the decoder, so the conversion happens
automatically.

This contains the important part of fa1749dd34, which
was apparently skipped in commit d417e95af7. This restores Libav API
compatibility.
2017-11-29 17:18:12 +01:00
Philip Langdale
1da9851e34 avcodec/nvdec: Implement vp8 hwaccel 2017-11-26 14:55:01 -08:00
Mark Thompson
3a71bcc213 lavc: Mark all AVHWAccel structures as const 2017-11-26 21:41:19 +00:00
Mark Thompson
3536a3efb9 lavc: Deprecate av_hwaccel_next() and av_register_hwaccel() 2017-11-26 21:36:31 +00:00
Mark Thompson
24cc0a53e9 lavc: Add codec metadata to indicate hardware support 2017-11-26 21:35:49 +00:00
Philip Langdale
6b77a10e43 avcodec: Implement mpeg4 nvdec hwaccel
This was predictably nightmarish, given how ridiculous mpeg4 is.
I had to stare at the cuvid parser output for a long time to work
out what each field was supposed to be, and even then, I still don't
fully understand some of them. Particularly:

vop_coded: If I'm reading the decoder correctly, this flag will always
           be 1 as the decoder will not pass the hwaccel any frame
           where it is not 1.
divx_flags: There's obviously no documentation on what the possible
            flags are. I simply observed that this is '0' for a
            normal bitstream and '5' for packed b-frames.
gmc_enabled: I had a number of guesses as to what this mapped to.
             I picked the condition I did based on when the cuvid
             parser was setting flag.

Also note that as with the vdpau hwaccel, the decoder needs to
consume the entire frame and not the slice.
2017-11-20 07:21:41 -08:00
Philip Langdale
8bca292c30 avcodec: Implement mpeg1 nvdec hwaccel
Once I remembered that there's a separate decoder type for mpeg1,
even though params struct is shared with mpeg2, everything worked.
2017-11-20 07:03:26 -08:00
Philip Langdale
7c9f739d86 avcodec: Implement mpeg2 nvdec hwaccel
This is mostly straight-forward. The weird part is that it should
just work for mpeg1, but I see corruption in my test cases, so I'm
going to try and fix that separately.
2017-11-18 08:13:50 -08:00
James Almer
c4131a0613 avcodec: deprecate getters and setters for AVCodecContext and AVCodec fields
The fields can be accessed directly, so these are not needed anymore.

Signed-off-by: James Almer <jamrial@gmail.com>
2017-11-15 01:14:22 -03:00
Philip Langdale
912ceba61b avcodec: Implement vc1 nvdec hwaccel
This hwaccel is interesting because it also works for wmv3/9 content,
which is not supported by the nvidia parser used by cuviddec.
2017-11-14 19:40:01 -08:00
Timo Rothenpieler
f3f73f0893 avcodec: implement vp9 nvdec hwaccel 2017-11-13 20:33:10 +01:00
James Almer
48e4eda11d Merge commit 'b46a77f19d'
* commit 'b46a77f19d':
  lavc: external hardware frame pool initialization

Includes the fix from e724bdfffb

Merged-by: James Almer <jamrial@gmail.com>
2017-11-11 20:33:26 -03:00
Anton Khirnov
0e00624389 h264dec: add a NVDEC hwaccel
Some parts of the code are based on a patch by
Timo Rothenpieler <timo@rothenpieler.org>

Merges Libav commit b9129ec466.

Due to the name clash with our cuvid decoder, rename it to nvdec.

This commit also changes the Libav code to dynamic loading of the
cuda/cuvid libraries.

Signed-off-by: Timo Rothenpieler <timo@rothenpieler.org>
2017-11-10 22:48:53 +01:00
James Almer
26ad6df1ce avcodec: bump minor after addition of MagicYUV encoder
Signed-off-by: James Almer <jamrial@gmail.com>
2017-10-28 13:14:47 -03:00
Carl Eugen Hoyos
f2c867051c lavc/avcodec: Constify the return value of av_bitstream_filter_next().
Fixes the following gcc warning:
libavcodec/bitstream_filter.c:39:12: warning: return discards 'const' qualifier from pointer target type
2017-10-26 18:29:02 +02:00
James Almer
c17f638565 Merge commit '0648dec19d'
* commit '0648dec19d':
  lavc: Drop deprecated stream codec tag

Merged-by: James Almer <jamrial@gmail.com>
2017-10-23 17:24:34 -03:00
James Almer
bfab430856 Merge commit '94eed68ace'
* commit '94eed68ace':
  lavc: Drop deprecated options moved to private contexts

Merged-by: James Almer <jamrial@gmail.com>
2017-10-23 17:08:32 -03:00
James Almer
fb41bad7e0 avodec/vaapi: drop deprecated vaapi_context fields
Deprecated in 07/2015.

Signed-off-by: James Almer <jamrial@gmail.com>
2017-10-23 17:00:06 -03:00
James Almer
eb5f846339 avcodec: drop deprecated vismv option
Deprecated in 08/2014.

Signed-off-by: James Almer <jamrial@gmail.com>
2017-10-23 16:52:24 -03:00
James Almer
d2484639bc Merge commit '48bb0da050'
* commit '48bb0da050':
  lavc: Drop deprecated way of setting audio delay on encode

Merged-by: James Almer <jamrial@gmail.com>
2017-10-23 16:38:04 -03:00
James Almer
2ccd00dabd Merge commit '5182a28b5d'
* commit '5182a28b5d':
  lavc: Drop deprecated global afd field

Merged-by: James Almer <jamrial@gmail.com>
2017-10-23 16:31:50 -03:00
James Almer
5a2e581879 Merge commit '4476027d93'
* commit '4476027d93':
  lavc: Drop deprecated avctx codec name

Merged-by: James Almer <jamrial@gmail.com>
2017-10-23 16:28:38 -03:00
James Almer
b79a7da36f Merge commit 'bb45d11282'
* commit 'bb45d11282':
  lavc: Drop deprecated codec flags

Merged-by: James Almer <jamrial@gmail.com>
2017-10-23 16:19:38 -03:00
James Almer
6e69525e69 Merge commit '302554835e'
* commit '302554835e':
  lavc: Drop deprecated unused public members

Merged-by: James Almer <jamrial@gmail.com>
2017-10-23 16:08:42 -03:00
James Almer
7b550c5f84 Merge commit 'b3739599bd'
* commit 'b3739599bd':
  lavc: Drop deprecated emu edge functionality

Merged-by: James Almer <jamrial@gmail.com>
2017-10-23 16:04:31 -03:00
James Almer
f7eb1c9ac5 Merge commit 'da5ba26b9e'
* commit 'da5ba26b9e':
  lavc: Drop deprecated macroblock type symbols

Merged-by: James Almer <jamrial@gmail.com>
2017-10-23 15:59:02 -03:00
James Almer
0b79fdeb9a Merge commit 'cbebc3251b'
* commit 'cbebc3251b':
  lavc: Drop deprecated public symbols

Merged-by: James Almer <jamrial@gmail.com>
2017-10-23 15:56:29 -03:00
James Almer
400ecd8e40 Merge commit '72dc7ddd18'
* commit '72dc7ddd18':
  lavc: Drop deprecated error rate option

Merged-by: James Almer <jamrial@gmail.com>
2017-10-23 15:50:46 -03:00
James Almer
b46613dd9b Merge commit 'dcc39ee10e'
* commit 'dcc39ee10e':
  lavc: Remove deprecated XvMC support hacks

Merged-by: James Almer <jamrial@gmail.com>
2017-10-23 15:20:49 -03:00
James Almer
c381f6a483 Merge commit '0871e23377'
* commit '0871e23377':
  lavc: Drop deprecated architectures symbols

Merged-by: James Almer <jamrial@gmail.com>
2017-10-23 15:05:12 -03:00
James Almer
b13e61d629 Merge commit 'c06e739291'
* commit 'c06e739291':
  lavc: Drop deprecated extended aspect ratio symbol

Merged-by: James Almer <jamrial@gmail.com>
2017-10-23 15:02:25 -03:00
James Almer
51b88c3d4e Merge commit '0c7986df44'
* commit '0c7986df44':
  lavc: Drop deprecated workaround bugs options

Merged-by: James Almer <jamrial@gmail.com>
2017-10-23 14:59:23 -03:00
James Almer
417d473bde avcodec: remove ABI portion of the side data merging API
The actual API is left in place until the deprecation period ends.

Signed-off-by: James Almer <jamrial@gmail.com>
2017-10-22 00:30:12 -03:00
James Almer
90000f15ec Merge commit '6dca24cd1d'
* commit '6dca24cd1d':
  lavc: Drop deprecated way of setting codec dimensions

Merged-by: James Almer <jamrial@gmail.com>
2017-10-21 23:59:53 -03:00
James Almer
898349d702 Merge commit '1146bb3bab'
* commit '1146bb3bab':
  lavc: Drop deprecated voxware codec entry

Merged-by: James Almer <jamrial@gmail.com>
2017-10-21 23:56:51 -03:00
James Almer
5ad1a989b6 avcodec: Drop deprecated VIMA codecid
Deprecated in 02/2015.

Signed-off-by: James Almer <jamrial@gmail.com>
2017-10-21 23:55:48 -03:00
James Almer
17487f11bb Merge commit '5c1585c4c3'
* commit '5c1585c4c3':
  lavc: Drop deprecated VDPAU buffer fields

Merged-by: James Almer <jamrial@gmail.com>
2017-10-21 23:48:29 -03:00
James Almer
c68a3ab96e Merge commit '7b91704118'
* commit '7b91704118':
  lavc: Drop deprecated VDPAU codec capability

Merged-by: James Almer <jamrial@gmail.com>
2017-10-21 23:40:03 -03:00
James Almer
43befa6826 avcodec: Drop deprecated audio convert API
Deprecated in 10/2013.
2017-10-21 23:16:13 -03:00
James Almer
8f483108b5 avcodec: Drop deprecated audio resample API
Deprecated in 03/2013.
2017-10-21 23:15:19 -03:00
James Almer
24a8603a8e Merge commit '0337adfab5'
* commit '0337adfab5':
  lavc: Drop deprecated missing sample log function

Merged-by: James Almer <jamrial@gmail.com>
2017-10-21 22:53:41 -03:00
James Almer
32e18dbfe8 Revert efb79cabb2 and 75bd215727
ffserver usage of rc_eq was fixed.

Signed-off-by: James Almer <jamrial@gmail.com>
2017-10-21 22:10:24 -03:00
Rostislav Pehlivanov
efb79cabb2 libavcodec/version: add a comment about FF_API_MPV_OPT deprecation
In order to prevent it from being forgotten and delayed until the next bump.

Signed-off-by: Rostislav Pehlivanov <atomnuker@gmail.com>
2017-10-21 21:02:35 +01:00
James Almer
75bd215727 avcodec/version: re-enable FF_API_MPV_OPT until the open ABI period is over
ffserver depends on it, so keep it in place until the two can be
removed together.
2017-10-21 16:53:46 -03:00
James Almer
69b5ce64d2 Merge commit '07a2b15594'
* commit '07a2b15594':
  Bump major versions of all libraries

A few API deprecated ~2 years ago or more are also postponed here for
varying reasons.

FF_API_LOWRES:
Since this functionality depends on AVStream->codec, i figure the two can
be removed at the same time in the next bump or so.

FF_API_AVCTX_TIMEBASE:
Couldn't get this one to work. Not just libavcodec but apparently also
libavformat and ffmpeg.c expect AVCodecContext->time_base to be set for
decoding. Upon removal some tests report a different generic stream time
base (like 1/25), and others lose packet duration values. I guess it's
somehow tied to the AVStream->codec clusterfuck.
It can be dealt with alongside FF_API_LAVF_AVCTX in the next bump.

FF_API_OLD_FILTER_OPTS_ERROR:
This one is meant to remain after FF_API_OLD_FILTER_OPTS is removed.
Its purpose is displaying the corrected command line using the new syntax
as a suggestion as part of the error message.

Merged-by: James Almer <jamrial@gmail.com>
2017-10-21 14:57:53 -03:00
wm4
b46a77f19d lavc: external hardware frame pool initialization
This adds a new API, which allows the API user to query the required
AVHWFramesContext parameters. This also reduces code duplication across
the hwaccels by introducing ff_decode_get_hw_frames_ctx(), which uses
the new API function. It takes care of initializing the hw_frames_ctx
if needed, and does additional error handling and API usage checking.

Support for VDA and Cuvid missing.

Signed-off-by: Anton Khirnov <anton@khirnov.net>
2017-10-19 17:10:59 +02:00