Commit Graph
100 Commits
Author SHA1 Message Date
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 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 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 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 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 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
Mark Thompson f2c11b9337 pixdesc: Reindent after previous commit 2017-07-22 21:51:41 +01:00
Mark Thompson f48efb14f9 pixdesc: Explicitly handle invalid arguments to av_find_best_pix_fmt_of_2() 2017-07-22 21:51:26 +01:00
Mark Thompson e6b4fb95d7 doc: Fix names of VAAPI encoders
They were all reversed (oops).
2017-07-18 23:36:06 +01:00
Mark Thompson 3192821237 pixdesc: Add a test for av_find_best_pix_fmt_of_2() 2017-07-18 22:56:30 +01:00
Mark Thompson 8a442d7a8a pixdesc: Improve scoring for opaque/unknown pixel formats
Hardware pixel formats do not tell you anything about their actual
contents, but should still score higher than formats with completely
unknown properties, which in turn should score higher than invalid
formats.

Do not return an AVERROR code as a score.

Fixes a hang in libavfilter where format negotiation gets stuck in a
loop because AV_PIX_FMT_NONE scores more highly than all other
possibilities.
2017-07-18 22:56:30 +01:00
Mark Thompson dc81f1a2ce doc: Add VAAPI encoders
(cherry picked from commit 41dda86087)
2017-06-24 17:41:59 +01:00
Mark Thompson bde0460406 vaapi_encode: Add VP9 support
(cherry picked from commit 0fd91e4bfc)
2017-06-24 17:41:55 +01:00
Mark Thompson 49419925d3 vp9: Add bsf to fix reordering in raw streams
Takes a raw input stream containing frames with correct timestamps but
possibly out of order and inserts additional show-existing-frame
packets to correct the ordering.

(cherry picked from commit 34e051d168)
(cherry picked from commit b43b95f478)

Also converted from bitstream to get_bits.
2017-06-24 17:41:30 +01:00
Mark Thompson bc4e33ce0f ffmpeg: Flush output BSFs when encode reaches EOF
Before this, output bitstream filters would never see EOF and
therefore would not be able to flush any delayed packets.

(cherry picked from commit f64d1100a5)
2017-06-24 15:23:30 +01:00
Mark Thompson f434ddf48e avconv_hw: Free device on initialisation failure
Fixes CID 1412852.

(cherry picked from commit c2b0bea40f)
2017-06-18 17:07:25 +01:00
Mark Thompson 70808859dd vf_hwmap: Properly free a locally derived device
Fixes CID 1412853.

(cherry picked from commit a670eea560)
2017-06-18 17:06:41 +01:00
Mark Thompson d984b29b21 vf_hwmap: Add missing error code
Fixes CID 1412854.

(cherry picked from commit 5635c80bf5)
2017-06-18 17:05:13 +01:00
Mark Thompson c2b0bea40f avconv_hw: Free device on initialisation failure 2017-06-18 17:01:49 +01:00
Mark Thompson a670eea560 vf_hwmap: Properly free a locally derived device 2017-06-18 17:01:31 +01:00
Mark Thompson 5635c80bf5 vf_hwmap: Add missing error code 2017-06-18 15:31:17 +01:00
Mark Thompson 4993a68f0f hwcontext: Mark local table static const 2017-06-15 00:02:06 +01:00
Mark Thompson 88a2e4504d hevc: Fix scaling list prediction delta for the 32x32 inter matrix
Fixes ticket #6356.
2017-06-14 23:08:26 +01:00
Mark Thompson 5de38188f8 doc: Document hwupload, hwdownload and hwmap filters
(cherry picked from commit 66aa9b94da)
2017-06-14 22:27:34 +01:00
Mark Thompson d81be0a60a vf_hwmap: Add reverse mapping for hardware frames
This is something of a hack.  It allocates a new hwframe context for
the target format, then maps it back to the source link and overwrites
the input link hw_frames_ctx so that the previous filter will receive
the frames we want from ff_get_video_buffer().  It may fail if
the previous filter imposes any additional constraints on the frames
it wants to use as output.

(cherry picked from commit 81a4cb8e58)
2017-06-14 22:27:34 +01:00
Mark Thompson b2ef1f42ba vf_hwmap: Add device derivation
Also refactor a little and improve error messages to make failure
cases easier to understand.

(cherry picked from commit 38cb05f1c8)
2017-06-14 22:27:34 +01:00
Mark Thompson d59c6a3aeb hwcontext: Improve allocation in derived contexts
Use the flags argument of av_hwframe_ctx_create_derived() to pass the
mapping flags which will be used on allocation.  Also, set the format
and hardware context on the allocated frame automatically - the user
should not be required to do this themselves.

(cherry picked from commit c5714b51aa)
2017-06-14 22:27:32 +01:00
Mark Thompson a97fb14418 hwcontext_qsv: Implement mapping frames to the child device type
(cherry picked from commit e1c5d56b18)
2017-06-14 22:27:07 +01:00
Mark Thompson f82ace71c0 hwcontext_qsv: Implement mapping frames from the child device type
Factorises out existing surface initialisation code to reuse.

(cherry picked from commit eaa5e07104)
2017-06-14 22:27:07 +01:00
Mark Thompson ec3dbeae81 hwcontext: Add frame context mapping for nontrivial contexts
Some frames contexts are not usable without additional format-specific
state in hwctx.  This change adds new functions frames_derive_from and
frames_derive_to to initialise this state appropriately when deriving
a frames context which will require it to be set.

(cherry picked from commit 27978155bc)
2017-06-14 22:27:07 +01:00
Mark Thompson 045ff8d30a hwcontext_qsv: Support derivation from child devices
(cherry picked from commit aa51bb3d27)
2017-06-14 22:27:07 +01:00
Mark Thompson 7ce47090ce ffmpeg: Support setting the hardware device to use when filtering
This only supports one device globally, but more can be used by
passing them with input streams in hw_frames_ctx or by deriving new
devices inside a filter graph with hwmap.

(cherry picked from commit e669db7610)
2017-06-14 22:27:07 +01:00
Mark Thompson 3882063174 vaapi: Add external control of allow-profile-mismatch
Uses the just-added ALLOW_PROFILE_MISMATCH flag.

(cherry picked from commit 7acb90333a)
2017-06-14 22:27:06 +01:00
Mark Thompson 49ae8a5e87 lavc: Add flag to allow profile mismatch with hardware decoding
(cherry picked from commit 64a5260c69)
2017-06-14 22:27:04 +01:00
Mark Thompson b658b5399e vaapi_encode: Use gop_size consistently in RC parameters
The non-H.26[45] codecs already use this form.  Since we don't
currently generate I frames for codecs which support them separately
to IDR, the p_per_i variable is set to infinity by default so that it
doesn't interfere with any other calculation.  (All the code for I
frames still exists, and it works for H.264 if set manually.)

(cherry picked from commit 6af014f402)
2017-06-14 22:26:32 +01:00
Mark Thompson 28aedeed19 qsvenc: Allow use of hw_device_ctx to make the internal session
(cherry picked from commit 3d197514e6)
2017-06-14 22:26:32 +01:00
Mark Thompson 8aa3c2df1a qsvdec: Allow use of hw_device_ctx to make the internal session
(cherry picked from commit 8848ba0bd6)
2017-06-14 22:26:32 +01:00
Mark Thompson 91c3b50d74 qsv: Add ability to create a session from a device
(cherry picked from commit 4936a48b1e)
2017-06-14 22:26:32 +01:00
Mark Thompson bff7bec1d7 vf_deinterlace_vaapi: Add support for field rate output
In order to work correctly with the i965 driver, this also fixes the
direction of forward/backward references - forward references are
intended to be those from the past to the current frame, not from the
current frame to the future.

(cherry picked from commit 9aa251c98c)
2017-06-14 22:26:32 +01:00
Mark Thompson 527a1e2131 ffmpeg: Document the -init_hw_device option
(cherry picked from commit 303fadf596)
2017-06-14 22:26:32 +01:00
Mark Thompson e462ace84b ffmpeg: Enable generic hwaccel support for VDPAU
(cherry picked from commit aa6b2e081c)
2017-06-14 22:26:32 +01:00
Mark Thompson be51073352 ffmpeg: Enable generic hwaccel support for VAAPI
(cherry picked from commit 62a1ef9f26)
2017-06-14 22:26:32 +01:00
Mark Thompson 06043cc0bc ffmpeg: Generic device setup
Not yet enabled for any hwaccels.

(cherry picked from commit d2e6dd32a4)
(cherry picked from commit 9203aac228)
2017-06-14 22:26:32 +01:00
Mark Thompson 0b1794a43e hwcontext: Make it easier to work with device types
Adds functions to convert to/from strings and a function to iterate
over all supported device types.  Also adds a new invalid type
AV_HWDEVICE_TYPE_NONE, which acts as a sentinel value.

(cherry picked from commit b7487f4f3c)
2017-06-14 22:26:29 +01:00