| Commit message (Collapse) | Author | Age |
|
|
|
| |
Signed-off-by: James Almer <jamrial@gmail.com>
|
|
|
|
| |
Signed-off-by: James Almer <jamrial@gmail.com>
|
|
|
|
| |
Signed-off-by: James Almer <jamrial@gmail.com>
|
|
|
|
| |
Signed-off-by: James Almer <jamrial@gmail.com>
|
|
|
|
| |
Signed-off-by: James Almer <jamrial@gmail.com>
|
|
|
|
| |
Signed-off-by: James Almer <jamrial@gmail.com>
|
|
|
|
| |
Signed-off-by: James Almer <jamrial@gmail.com>
|
|
|
|
| |
Signed-off-by: James Almer <jamrial@gmail.com>
|
|
|
|
|
|
| |
parameter set NALUs
Signed-off-by: James Almer <jamrial@gmail.com>
|
|
|
|
|
| |
Typical files use 0 for the base layer and 1 for the secondary one, but
any value for the secondary layer should be supported.
|
|
|
|
|
|
|
|
|
| |
Only those that can be decoded with our implementation, so excluding
* C and D - independent layers
* G, H, I - more than 2 layers
Frame hashes verified against the reference implementation from
https://hevc.hhi.fraunhofer.de/svn/svn_3DVCSoftware/
|
|
|
|
|
| |
TODO:
* resolve XXX in code
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
The per-frame reference picture set contains two more lists -
INTER_LAYER[01]. Assuming at most two layers, INTER_LAYER1 is always
empty, but is added anyway for completeness.
When inter-layer prediction is enabled, INTER_LAYER0 for the
second-layer frame will contain the base-layer frame from the same
access unit, if it exists.
The new lists are then used in per-slice reference picture set
construction as per F.8.3.4 "Decoding process for reference picture
lists construction".
|
|
|
|
| |
Cf. F.7.3.6.1 "General slice segment header syntax"
|
|
|
|
|
| |
A packet should contain a full access unit, which for multilayer video
should contain all the layers.
|
|
|
|
|
| |
Otherwise parameter sets from extradata with nuh_layer_id>0 would be
ignored. Needed for upcoming MV-HEVC support.
|
| |
|
|
|
|
|
| |
Cf. F.7.3.2.2 "Sequence parameter set RBSP syntax", which extends normal
SPS parsing with special clauses depending on MultiLayerExtSpsFlag.
|
|
|
|
|
| |
SPS multilayer extension contains a single flag that we are free to
ignore, no reason to print a warning.
|
|
|
|
|
|
| |
Only implementing what's needed for MV-HEVC with two views.
Signed-off-by: Anton Khirnov <anton@khirnov.net>
|
|
|
|
| |
Currently active SPS is a per-layer property.
|
|
|
|
|
|
|
|
|
|
|
| |
It is merely copied to AVCodecContext.pix_fmt, which serves no useful
purpose. set_sps() is called from two places:
* when a new SPS becomes active - then the pixel format is
overridden immediately after the set_sps() call by the result from
ff_get_format();
* when a new SPS is propagated across frame threads - then the
AVCodecContext value is already set to the same value by the generic
code.
|
|
|
|
|
| |
ff_hevc_get_ref_list() needs the PPS of a previously decoded frame,
which may be different from the currently active one.
|
|
|
|
|
|
|
|
| |
Handle them together with other sps-dependent arrays.
Note that current code only allocates these arrays when hwaccel is not
set, but this is wrong as the relevant code runs BEFORE get_format() is
called and hence before we know whether hwaccel is in use.
|
|
|
|
| |
pic_arrays_{init,free}() no longer access HEVCContext
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
|
|
|
|
|
|
|
| |
Active VPS is a property of the decoding process, not of the list of
parameter sets.
Check that the VPS can only change in a base layer - while this can
never happen currently (as no other layers can exist in the decoder), it
will become useful when multilayer decoding is supported.
|
|
|
|
|
|
|
| |
Start by moving the DPB to it.
Only one context exists for now, so decoder behaviour should not change
with this commit, but that will change in the future.
|
|
|
|
|
| |
Serializing frame threading for non-threadsafe hwaccels is handled at the
generic level, the decoder does not need to care about it.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Current code is written around the "simple" decode API's limitation that
a single input packet (AU/coded frame) triggers the output of at most
one output frame. However the spec contains two cases where a coded
frame may cause multiple frames to be output (cf. C.5.2.2.2):
* start of a new sequence
* overflowing sps_max_dec_pic_buffering
The decoder currently contains rather convoluted logic to handle these
cases:
* decode/output/per-frame sequence counters,
* HEVC_FRAME_FLAG_BUMPING
* ff_hevc_bump_frame()
* special clauses in ff_hevc_output_frame()
However, with the receive_frame() API none of that is necessary, as we
can just output multiple frames at once. Previously added PoolFifo
allows that to be done in a straightforward and efficient manner.
|
|
|
|
| |
Will be useful in future commits.
|
|
|
|
|
| |
Required by future support for MV-HEVC, which will need to output more
than one frame per packet.
|
| |
|
| |
|
|
|
|
|
|
| |
They are racy.
Remove this commit after fixing the races.
|
|
|
|
|
|
|
|
|
|
| |
Reorganize the code such that the frame threading code does not call the
decoders directly, but instead calls back into the generic decoding
code. This avoids duplicating the logic that wraps the decoder
invocation and allows receive_frame()-based decoders to use frame
threading.
Further work by Timo Rothenpieler <timo@rothenpieler.org>.
|
| |
|
|
|
|
|
| |
Makes sure discarded frames do not cause EAGAIN to be returned during
flushing, which is forbidden.
|
|
|
|
|
|
|
| |
Also, set draining=1 in case a bitstream filter returns an
internally-triggered EOF. While no bitstream filters currently inserted
by decoders will do that, that may change in the future and it is better
to cover this case.
|