Commit Graph
100 Commits
Author SHA1 Message Date
Mark Thompson b25d8ef0a7 lavu: OpenCL hwcontext implementation 2017-11-22 23:02:29 +00:00
Mark Thompson a050f56c09 lavu: Add OpenCL hardware pixfmt 2017-11-22 23:01:29 +00:00
Mark Thompson 1dc483a6f2 compat/cuda: Pass a logging context to load functions
Reviewed-by: Timo Rothenpieler <timo@rothenpieler.org>
2017-11-20 15:47:05 +00:00
Mark Thompson 6727cfea5e Merge commit '620f88a0b94a651c6cc912b1fb32d308762d59b5'
* commit '620f88a0b94a651c6cc912b1fb32d308762d59b5':
  vaapi_h264: Add missing return value check
  h264_metadata: Fix clearing SEI payload in error case
  cbs_h2645: Fix memory leak on when reading SEI fails
  cbs: Add a missing return value check

This commit is a noop, see
03b1470088
d792613bad
41272e112b
6734eef6b8

Merged-by: Mark Thompson <sw@jkqxz.net>
2017-11-16 00:07:40 +00:00
Mark Thompson 040a92c21f Merge commit 'c77da21e5d15056b8ba060ee5ce9e73f26653612'
* commit 'c77da21e5d15056b8ba060ee5ce9e73f26653612':
  vaapi_h264: Do not use deprecated header type

This commit is a noop, see 32a618a948.

Merged-by: Mark Thompson <sw@jkqxz.net>
2017-11-15 23:55:10 +00:00
Mark Thompson 4251e25272 Merge commit 'ff007e30d8d45ba1ff2b2a4615f1cd5bafb50626'
* commit 'ff007e30d8d45ba1ff2b2a4615f1cd5bafb50626':
  vaapi_h264: Add workaround for bad SEI in old Intel drivers

Merged-by: Mark Thompson <sw@jkqxz.net>
2017-11-15 23:52:21 +00:00
Mark Thompson 620f88a0b9 vaapi_h264: Add missing return value check 2017-11-12 16:00:52 +00:00
Mark Thompson d5fcf94261 h264_metadata: Fix clearing SEI payload in error case 2017-11-12 16:00:48 +00:00
Mark Thompson 22aed77687 cbs_h2645: Fix memory leak on when reading SEI fails 2017-11-12 16:00:41 +00:00
Mark Thompson 476d301316 cbs: Add a missing return value check 2017-11-12 16:00:27 +00:00
Mark Thompson c77da21e5d vaapi_h264: Do not use deprecated header type
SEI headers should be inserted as generic raw data (the old specific
type has been deprecated in libva2).
2017-11-12 15:59:45 +00:00
Mark Thompson ff007e30d8 vaapi_h264: Add workaround for bad SEI in old Intel drivers
With pre-2.0 Intel drivers in CBR mode, if an explicit SEI message with
the old (now deprecated) type is not included, the driver generates and
inserts some timing SEI which is almost certainly invlaid.  Before
7a4fac5e91 we always inserted our own SEI
so this would not be visible, but since then it has been possible to
disable that.  We would also like to avoid using the deprecated type,
and using the new type, while working in old drivers, does not suppress
the spurious message like the old type does.

Therefore, suppress the bad SEI insertion by providing a zero-length
buffer with the old type, which the driver can insert harmlessly.
2017-11-12 15:59:45 +00:00
Mark Thompson 1ef4af2d49 hwcontext_vaapi: Fix build with libva 2.0
vaExportSurfaceHandle() wasn't included in the 2.0 release.

Fixes ticket #6828.
2017-11-12 15:38:00 +00:00
Mark Thompson cf17086982 ffmpeg: Fix flush packet stream copy input timestamp handling
Since a7da134742, flush packets are passed
to process_input_packet() during stream copy.  This modifies the input
timestamp handling to ignore them - since they contain no data, timestamps
should not be affected.
2017-11-01 19:55:56 +00:00
Mark Thompson 2708c8e8ef hwcontext_vaapi: Set message callbacks on internally-created devices
The message callbacks are library-safe in libva2, so we can now use
them.
2017-10-25 00:01:41 +01:00
Mark Thompson bfc83acfd6 vaapi: Always free parameter buffers after vaEndPicture() with libva2
This is an ABI change in libva2: previously the Intel driver had this
behaviour and it was implemented as a driver quirk, but now it is part
of the specification so all drivers must do it.
2017-10-25 00:00:49 +01:00
Mark Thompson f0a978a519 vaapi: Remove H.264 baseline profile
This has been deprecated in libva2 because hardware does not and will not
support it.  Therefore never consider it for decode, and for encode assume
the user meant constrained baseline profile instead.
2017-10-24 23:55:29 +01:00
Mark Thompson a126b67e1b configure: Add config option for libva2 (VAAPI 1) 2017-10-24 23:53:44 +01:00
Mark Thompson 94ab0bef40 vaapi: Disable deprecation warnings around use of struct vaapi_context 2017-10-24 23:30:55 +01:00
Mark Thompson 59b00ffea3 cbs_h264: Fix format specifier 2017-10-24 23:07:58 +01:00
Mark Thompson 79d666aa57 cbs_mpeg2: Fix format specifier 2017-10-24 23:07:58 +01:00
Mark Thompson 5b2c71bb94 cbs_mpeg2: Fix type for marker_bit reading 2017-10-24 23:07:58 +01:00
Mark Thompson e7d20d5e35 movtextdec: Move declaration out of for initialisation statement 2017-10-21 22:19:50 +01:00
Mark Thompson e0a967a405 cinepakenc: Move declaration out of for initialisation statement
(cherry picked from commit 92f0aceb36)
2017-10-21 22:19:50 +01:00
Mark Thompson 4dee92f6bc hevc: Fix aligned array declarations
(cherry picked from commit d41e10c148)
2017-10-21 22:19:50 +01:00
Mark Thompson c37de51920 vorbis: Reorder conditions to avoid possible overread
This can trigger a single-byte overread if the codebook has the maximum
number of entries.

Fixes #6743.
2017-10-18 20:06:01 +01:00
Mark Thompson 242d8c8763 opusenc: Fix double-declaration of variable 2017-10-18 20:05:52 +01:00
Mark Thompson 32a618a948 vaapi_h264: Do not use deprecated header type
SEI headers should be inserted as generic raw data (the old specific
type has been deprecated in libva2).
2017-10-18 20:05:11 +01:00
Mark Thompson 03b1470088 vaapi_h264: Add missing return value check
Fixes CID 1419829.
2017-10-18 20:05:11 +01:00
Mark Thompson 41272e112b cbs_h264: Fix memory leak in error case
Fixes CID 1419834.
2017-10-18 20:05:11 +01:00
Mark Thompson d792613bad h264_metadata: Fix clearing SEI payload in error case
Fixes CID 1419832, 1419835.
2017-10-18 20:05:11 +01:00
Mark Thompson 624d4739db cbs_h264: Fix writing streams with auxiliary pictures
Tested with the alphaconformanceG sample.

Fixes CID 1419836.

(cherry picked from commit 9ed18f302b)
2017-10-18 20:05:11 +01:00
Mark Thompson a6cfc287a0 Changelog: Add metadata bitstream filters
This starts a new section - 3.4 has been released.
2017-10-17 21:19:18 +01:00
Mark Thompson 809b0402dc cbs: Add some read/write tests
Use the appropriate metadata filter for each codec - in the absence of any
options to modify the stream, the output bitstream should be identical to
the input (though the output file may differ in padding).

All tests use conformance bitstreams, the MPEG-2 streams are newly added
from the conformance test streams
<http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_IEC_13818-4_2004_Conformance_Testing/Video/>

(cherry picked from commit 3cae7f8b9b)
(cherry picked from commit fbd63170bc)
2017-10-17 20:56:30 +01:00
Mark Thompson d8928ad6b6 vaapi_mpeg2: Convert to use coded bitstream infrastructure
(cherry picked from commit 10eb496d9a)
2017-10-17 20:56:30 +01:00
Mark Thompson 038a51258c vaapi_h265: Add support for AUD NAL units
Matching the H.264 encoder.

(cherry picked from commit e3e8eab359)
2017-10-17 20:56:30 +01:00
Mark Thompson 00179664bc vaapi_h265: Convert to use coded bitstream infrastructure
Also improves the metadata and generally makes the configuration
a bit cleaner.

(cherry picked from commit ac12486714)
2017-10-17 20:56:30 +01:00
Mark Thompson 94a4048619 vaapi_h264: Fix CPB/DPB delays
This should be ticks, not time_scale steps - it was wrong for all
framerates not a multiple of 1/2.

(cherry picked from commit 30645174e3)
2017-10-17 20:56:30 +01:00
Mark Thompson 0bc7575ced vaapi_h264: Add support for SEI recovery points
Included by default with non-IDR intra frames.

(cherry picked from commit a49ee60d5f)
2017-10-17 20:56:30 +01:00
Mark Thompson 281b68b026 vaapi_h264: Add support for AUD NAL units
Adds a new private option to enable them (off by default).

(cherry picked from commit 820a4483af)
2017-10-17 20:56:30 +01:00
Mark Thompson 2e29ca2a9f vaapi_h264: Convert to use coded bitstream infrastructure
(cherry picked from commit 7a4fac5e91)
2017-10-17 20:56:30 +01:00
Mark Thompson 569721ac8d lavc: Add mpeg2_metadata bitstream filter
(cherry picked from commit b78c30d7ec)
2017-10-17 20:56:30 +01:00
Mark Thompson 278c308cea mpeg12: Add a common function to find the best frame rate
This will be used later in both the mpeg2_metadata filter and the
VAAPI MPEG-2 encoder.  Also adds a unit test.

(cherry picked from commit b5859e0b04)
2017-10-17 20:56:30 +01:00
Mark Thompson 03f982bbca lavc: Add hevc_metadata bitstream filter
This is able to modify some header metadata found in the VPS/SPS/VUI,
and can also add/remove AUDs.

(cherry picked from commit b31a9eae02)
2017-10-17 20:56:30 +01:00
Mark Thompson 8b26306294 lavc: Add h264_redundant_pps bitstream filter
This applies a specific fixup to some Blu-ray streams which contain
redundant PPSs modifying irrelevant parameters of the stream which
confuse other transformations which require correct extradata.

A new single global PPS is created, and all of the redundant PPSs
within the stream are removed.

(cherry picked from commit e6874bc3af)
2017-10-17 20:56:30 +01:00
Mark Thompson a308872b04 lavc: Add h264_metadata bitstream filter
This is able to modify some header metadata found in the SPS/VUI,
and can also add/remove AUDs and insert user data in SEI NAL units.

(cherry picked from commit 9e93001b61)
(cherry picked from commit c42b62d1f9)
2017-10-17 20:56:29 +01:00
Mark Thompson 9c7d70b49b lavc: Add trace_headers bitstream filter
Supports all streams that the coded bitstream infrastructure does
(currently H.264, H.265 and MPEG-2).

(cherry picked from commit f11d8a5e8b)
2017-10-17 20:56:29 +01:00
Mark Thompson 686e388bbb lavc: Add coded bitstream read/write support for MPEG-2
(cherry picked from commit 2bc9ba8d3c)
(cherry picked from commit a41b69b5eb)
2017-10-17 20:56:29 +01:00
Mark Thompson 9b0c7aa0e4 lavc: Add coded bitstream read/write support for H.265
(cherry picked from commit 867381b8b5)
(cherry picked from commit f763489364)
(cherry picked from commit 067a9ddeb8)
2017-10-17 20:56:29 +01:00
Mark Thompson b4c915f4b3 lavc: Add coded bitstream read/write support for H.264
(cherry picked from commit acf06f4544)
(cherry picked from commit 768eb9182e)
(cherry picked from commit e7f64191b2)
2017-10-17 20:56:29 +01:00
Mark Thompson 6734eef6b8 lavc: Add coded bitstream read/write API
(cherry picked from commit 18f1706f33)
(cherry picked from commit 44cde38c8a)
2017-10-17 20:56:29 +01:00
Mark Thompson b1374e925c hevc: Improve stream constraint values in common header
Add comments to describe the sources of the constraint values expressed here,
and add some more related values which will be used in following patches.

Fix the incorrect values for SPS and PPS count (they are not the same as those
used for H.264), and remove HEVC_MAX_CU_SIZE because it is not used anywhere.

(cherry picked from commit b88da98b34)
2017-10-17 20:56:29 +01:00
Mark Thompson d05444d2c6 h264: Add stream constraint values to the common header
With comments describing the derivation of each value.

(cherry picked from commit aaf4414650)
2017-10-17 20:56:29 +01:00
Mark Thompson fbd63170bc cbs: Add test dependencies
Fixes the MPEG-2 failure with --disable-error-resilience.
2017-10-17 20:25:07 +01:00
Mark Thompson c154c34c1b Revert "configure: Disable -Wbool-operation."
This reverts commit c2d155e11e.

GCC 6 incorrectly passes the configure test and then logs many warnings
of the form:

src/libavformat/dump.c: At top level:
cc1: warning: unrecognized command line option ‘-Wno-bool-operation’
2017-10-09 00:53:51 +01:00
Mark Thompson b2f256a9f5 hwcontext_vaapi: Add support for mapping to DRM objects
Uses vaExportSurfaceHandle() from libva2.
2017-10-09 00:46:16 +01:00
Mark Thompson 309d660775 hwcontext: Perform usual initialisation on derived device contexts
The initialisation should be common.  For libmfx, it was previously
happening in the derivation function and this moves it out.  For VAAPI,
it fixes some failures when deriving from a DRM device because this
initialisation did not run.
2017-10-09 00:11:53 +01:00
Mark Thompson f3602875b3 hwcontext_vaapi: Set message callbacks on internally-created devices
The message callbacks are library-safe in libva2, so we can now use
them.
2017-10-09 00:11:53 +01:00
Mark Thompson 5f39788668 hwcontext_vaapi: Factorise out common connection code
This was duplicated between normal device creation and creation by
derivation from a DRM device.
2017-10-09 00:11:53 +01:00
Mark Thompson e339411691 vaapi: Always free parameter buffers after vaEndPicture() with libva2
This is an ABI change in libva2: previously the Intel driver had this
behaviour and it was implemented as a driver quirk, but now it is part
of the specification so all drivers must do it.
2017-10-09 00:11:53 +01:00
Mark Thompson bd211bb866 vaapi: Remove H.264 baseline profile
This has been deprecated in libva2 because hardware does not and will not
support it.  Therefore never consider it for decode, and for encode assume
the user meant constrained baseline profile instead.
2017-10-09 00:11:53 +01:00
Mark Thompson 9c7a71145b configure: Add config option for libva2 (VAAPI 1) 2017-10-09 00:11:53 +01:00
Mark Thompson e01a270762 lavc/v4l2: Fix printf format for int64_t 2017-10-05 08:58:36 +01:00
Mark Thompson 8da5af2584 lavc/v4l2: Mark static const tables as such 2017-10-04 23:14:37 +01:00
Mark Thompson a0d076f3ef lavc/v4l2: Remove use of lfind()
This is not present in older bionic and therefore fails to build there,
and the code is much simpler without it anyway.
2017-10-04 23:14:37 +01:00
Mark Thompson c1f22c2959 lavc: Move V4L2 encoders lower in the list
Their previous positioning would cause them to chosen before software
encoders like libx264 or libvpx.
2017-09-27 23:47:32 +01:00
Mark Thompson da53c424b9 lavc/v4l2: Add missing header include
Fixes checkheaders.
2017-09-27 23:10:03 +01:00
Mark Thompson 92f0aceb36 cinepakenc: Move declaration out of for initialisation statement 2017-09-27 19:57:55 +01:00
Mark Thompson 2068d116db hapdec: Delete include for nonexistent file
It exists as an alias for string.h in most C libraries, so usually this
line is harmless.
2017-09-27 19:57:52 +01:00
Mark Thompson d41e10c148 hevc: Fix aligned array declarations 2017-09-27 19:57:48 +01:00
Mark Thompson 3cae7f8b9b cbs: Add some read/write tests
Use the appropriate metadata filter for each codec - in the absence of any
options to modify the stream, the output bitstream should be identical to
the input (though the output file may differ in padding).

All tests use conformance bitstreams, the MPEG-2 streams are newly added
from the conformance test streams
<http://standards.iso.org/ittf/PubliclyAvailableStandards/ISO_IEC_13818-4_2004_Conformance_Testing/Video/>
2017-09-26 23:33:36 +01:00
Mark Thompson 9ed18f302b cbs_h264: Fix writing streams with auxiliary pictures
Tested with the alphaconformanceG sample.
2017-09-25 20:42:42 +01:00
Mark Thompson b0ece2b31f hwcontext_vaapi: Fix DRM format mapping 2017-09-19 22:47:04 +01:00
Mark Thompson 9f9625ea80 kmsgrab: Remove multiple-plane formats
The planes are unlikely to be contiguous, assuming they are results in
very broken output.  (Tested with NV12/NV16 on Rockchip.)
2017-09-19 22:47:03 +01:00
Mark Thompson 22afa87a8e kmsgrab: Fix DRM format definitions
All DRM formats are defined in terms of little-endian words, so RGB formats
like XRGB actually have the elements in the opposite order order in memory
to the order they are in the name.

This does not affect YUYV and similar YUV 4:2:2 formats, which are in the
expected order.
2017-09-19 22:47:01 +01:00
Mark Thompson 375cf55fe9 vaapi: Disable deprecation warnings around use of old struct vaapi_context 2017-09-19 22:46:55 +01:00
Mark Thompson 16b44d9ab9 lavd/kmsgrab: Fix packet flag setting
Found-by: James Almer <jamrial@gmail.com>
2017-09-14 09:14:36 +01:00
Mark Thompson ec1573f879 doc/indevs: Document kmsgrab input device 2017-09-13 22:31:12 +01:00
Mark Thompson 52194f0bcb lavd: Add KMS screen grabber 2017-09-13 22:31:05 +01:00
Mark Thompson c8dea81921 lavc: Add wrapped_avframe decoder
Intended for use with hardware frames for which rawvideo is not
sufficient.  Requires the trusted packet flag to be set - decoding
fails if not to avoid security issues (the wrapped AVFrame can
contain pointers to arbitrary data).
2017-09-13 22:25:29 +01:00
Mark Thompson 82342cead1 lavc: Add flag to mark packets containing trusted input 2017-09-13 22:25:29 +01:00
Mark Thompson 170c65335c hwcontext_vaapi: Add DRM to VAAPI mapping 2017-09-13 22:25:25 +01:00
Mark Thompson 9cb23cd9fe lavu: Add DRM hwcontext 2017-09-13 22:03:27 +01:00
Mark Thompson 6eb102a616 h264_sei: Add namespace prefix to all SEI values
This avoids confusion with equivalent H.265 SEI values when both are
being used at the same time.

(cherry picked from commit 6ea220cbee)
2017-09-12 22:29:31 +01:00
Mark Thompson 10eb496d9a vaapi_mpeg2: Convert to use coded bitstream infrastructure 2017-09-12 22:12:00 +01:00
Mark Thompson b5859e0b04 mpeg12: Move finding the best frame rate to common code
Previously in the mpeg2_metadata filter.  Also adds a test.
2017-09-12 22:11:56 +01:00
Mark Thompson a41b69b5eb cbs_mpeg2: Add support for picture display extension 2017-09-12 22:11:56 +01:00
Mark Thompson 067a9ddeb8 cbs_h265: Fix ranges of prediction weight offsets
The bracketing was wrong - '-' binds before '<<'.  This would
previously incorrectly reject the streams in the WP_A and WP_B
conformance tests.
2017-09-12 22:11:55 +01:00
Mark Thompson f763489364 cbs_h265: Fix reading of unknown parameter set extension data 2017-09-12 22:11:55 +01:00
Mark Thompson 30645174e3 vaapi_h264: Fix CPB/DPB delays
This should be ticks, not time_scale steps - it was wrong for all
framerates not a multiple of 1/2.
2017-09-12 22:11:55 +01:00
Mark Thompson f940c859c2 Revert "vaapi_h265: Reduce the amount of padding in the stream"
This reverts commit a14a12ca13.

The CTU size is always 32x32; the surface size is what actually sets
the desired property, and it is already correct.
2017-09-12 22:11:52 +01:00
Mark Thompson c42b62d1f9 h264_metadata: Fix double-free
Whether the udu string should be freed depends on whether the SEI it
gets added to was created internally by cbs or externally by the bsf.
The current code frees it twice in the former case.
2017-09-12 22:11:50 +01:00
Mark Thompson e7f64191b2 cbs: Add buffer padding when splitting fragments
Remove any trailing zeroes from H.26[45] NAL units at the same time.
2017-09-12 22:11:47 +01:00
Mark Thompson 44cde38c8a cbs: Always check for bitstream end before reading 2017-09-12 22:11:41 +01:00
Mark Thompson b264810ef7 hevc: Add names for reserved NAL unit types
While not yet used, these NAL units do already have some defined
semantics and are referred to elsewhere.

(cherry picked from commit 3daaa44173)
2017-08-28 11:50:50 +01:00
Mark Thompson 4c0588b456 mpeg2enc: Don't mark all streams as component video
Since there is no information about the source format, "unspecified"
is the correct value to write here.

All tests using the MPEG-2 encoder are updated, as this changes the
header on all outputs.
2017-08-20 15:14:37 +01:00
Mark Thompson b78c30d7ec lavc: Add mpeg2_metadata bitstream filter 2017-08-20 15:14:33 +01:00
Mark Thompson 2bc9ba8d3c lavc: Add coded bitstream read/write support for MPEG-2
Also enable MPEG-2 support in the trace_headers filter.
2017-08-20 13:59:17 +01:00
Mark Thompson 768eb9182e cbs_h2645: Return error if writing fails 2017-08-20 13:59:17 +01:00
Mark Thompson 9c878651db vaapi_encode: Move quality option to common code
Use AVCodecContext.compression_level rather than a private option,
replacing the H.264-specific quality option (which stays only for
compatibility).

This now works with the H.265 encoder in the i965 driver, as well as
the existing cases with the H.264 encoder.

(cherry picked from commit 19388a7200)
2017-08-20 12:56:24 +01:00