summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAge
* avformat/movenc: add support for writing lhvC boxesmv-hevcJames Almer2024-06-25
| | | | Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/hevc: add a function to write a lhvC boxJames Almer2024-06-25
| | | | Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/hevc: store parameter set and layer IDs in HVCCNALUnitJames Almer2024-06-25
| | | | Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/hevc: use a single array for per-PS NALUsJames Almer2024-06-25
| | | | Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/hevc: don't write the same array values per nal additionJames Almer2024-06-25
| | | | Signed-off-by: James Almer <jamrial@gmail.com>
* avformat/hevc: don't write NALUs with nuh_layer_id > 0 in hvcC boxesJames Almer2024-06-25
| | | | Signed-off-by: James Almer <jamrial@gmail.com>
* avcodec/hevc/sei: add support for 3D Reference Displays Information SEIJames Almer2024-06-25
| | | | Signed-off-by: James Almer <jamrial@gmail.com>
* avcodec/cbs_h265: add support for 3D Reference Displays Information SEIJames Almer2024-06-25
| | | | Signed-off-by: James Almer <jamrial@gmail.com>
* avcodec/cbs_h265: add partial support for Multilayer extension fields in ↵James Almer2024-06-25
| | | | | | parameter set NALUs Signed-off-by: James Almer <jamrial@gmail.com>
* tests/fate/hevc: add a test for nontrivial values of nuh_layer_idAnton Khirnov2024-06-25
| | | | | Typical files use 0 for the base layer and 1 for the secondary one, but any value for the secondary layer should be supported.
* tests/fate/hevc: add MV-HEVC conformance sample testsAnton Khirnov2024-06-25
| | | | | | | | | 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/
* XXX lavc/hevcdec: implement decoding MV-HEVCAnton Khirnov2024-06-25
| | | | | TODO: * resolve XXX in code
* lavc/hevc/hevcdec: implement MV-HEVC inter-layer predictionAnton Khirnov2024-06-25
| | | | | | | | | | | | | | 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".
* lavc/hevcdec: implement slice header parsing for nuh_layer_id>0Anton Khirnov2024-06-25
| | | | Cf. F.7.3.6.1 "General slice segment header syntax"
* lavc/hevc/parser: only split packets on NALUs with nuh_layer_id=0Anton Khirnov2024-06-25
| | | | | A packet should contain a full access unit, which for multilayer video should contain all the layers.
* lavc/hevcdec/parse: process NALUs with nuh_layer_id>0Anton Khirnov2024-06-25
| | | | | Otherwise parameter sets from extradata with nuh_layer_id>0 would be ignored. Needed for upcoming MV-HEVC support.
* lavc/hevc/ps: reindentAnton Khirnov2024-06-25
|
* lavc/hevc/ps: implement SPS parsing for nuh_layer_id>0Anton Khirnov2024-06-25
| | | | | Cf. F.7.3.2.2 "Sequence parameter set RBSP syntax", which extends normal SPS parsing with special clauses depending on MultiLayerExtSpsFlag.
* lavc/hevc/ps: drop a warning for sps_multilayer_extension_flagAnton Khirnov2024-06-25
| | | | | SPS multilayer extension contains a single flag that we are free to ignore, no reason to print a warning.
* lavc/hevc_ps: parse VPS extensionNiklas Haas2024-06-25
| | | | | | Only implementing what's needed for MV-HEVC with two views. Signed-off-by: Anton Khirnov <anton@khirnov.net>
* lavc/hevcdec: move active SPS from HEVCParamSets to HEVCLayerContextAnton Khirnov2024-06-25
| | | | Currently active SPS is a per-layer property.
* lavc/hevcdec: do not pass a pixel format to set_sps()Anton Khirnov2024-06-25
| | | | | | | | | | | 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.
* lavc/hevcdec: make a HEVCFrame hold a reference to its PPSAnton Khirnov2024-06-25
| | | | | ff_hevc_get_ref_list() needs the PPS of a previously decoded frame, which may be different from the currently active one.
* lavc/hevcdec: move HEVCContext.sao_pixel_buffer_[vh] to HEVCLayerContextAnton Khirnov2024-06-25
| | | | | | | | 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.
* lavc/hevcdec: move HEVCContext.{tab_mvf,rpl_tab}_pool to HEVCLayerContextAnton Khirnov2024-06-25
| | | | pic_arrays_{init,free}() no longer access HEVCContext
* lavc/hevcdec: move HEVCContext.{horizontal,vertical}_bs to HEVCLayerContextAnton Khirnov2024-06-25
|
* lavc/hevcdec: move HEVCContext.qp_y_tab to HEVCLayerContextAnton Khirnov2024-06-25
|
* lavc/hevcdec: move HEVCContext.tab_slice_address to HEVCLayerContextAnton Khirnov2024-06-25
|
* lavc/hevcdec: move HEVCContext.filter_slice_edges to HEVCLayerContextAnton Khirnov2024-06-25
|
* lavc/hevcdec: move HEVCContext.is_pcm to HEVCLayerContextAnton Khirnov2024-06-25
|
* lavc/hevcdec: move HEVCContext.tab_ipm to HEVCLayerContextAnton Khirnov2024-06-25
|
* lavc/hevcdec: move HEVCContext.cbf_luma to HEVCLayerContextAnton Khirnov2024-06-25
|
* lavc/hevcdec: move HEVCContext.tab_ct_depth to HEVCLayerContextAnton Khirnov2024-06-25
|
* lavc/hevcdec: move HEVCContext.skip_flag to HEVCLayerContextAnton Khirnov2024-06-25
|
* lavc/hevcdec: move HEVCContext.deblock to HEVCLayerContextAnton Khirnov2024-06-25
|
* lavc/hevcdec: move HEVCContext.sao to HEVCLayerContextAnton Khirnov2024-06-25
|
* lavc/hevcdec: move HEVCContext.bs_{width,height} to HEVCLayerContextAnton Khirnov2024-06-25
|
* lavc/hevcdec: move active VPS from HEVCParamSets to HEVCContextAnton Khirnov2024-06-25
| | | | | | | | | 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.
* lavc/hevcdec: add a per-layer contextAnton Khirnov2024-06-25
| | | | | | | 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.
* lavc/hevcdec: call ff_thread_finish_setup() even if hwaccel is in useAnton Khirnov2024-06-25
| | | | | Serializing frame threading for non-threadsafe hwaccels is handled at the generic level, the decoder does not need to care about it.
* lavc/hevcdec: simplify output logicAnton Khirnov2024-06-25
| | | | | | | | | | | | | | | | | | | | 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.
* lavc/hevcdec: use a ContainerFifo for output framesAnton Khirnov2024-06-25
| | | | Will be useful in future commits.
* lavc/hevcdec: switch to receive_frame()Anton Khirnov2024-06-25
| | | | | Required by future support for MV-HEVC, which will need to output more than one frame per packet.
* lavc: add HEVC Multiview Main profileAnton Khirnov2024-06-25
|
* lavc/decode: reindent after previous commitAnton Khirnov2024-06-25
|
* XXX fate/vcodec: disable ffv1 testsAnton Khirnov2024-06-25
| | | | | | They are racy. Remove this commit after fixing the races.
* lavc: convert frame threading to the receive_frame() patternAnton Khirnov2024-06-25
| | | | | | | | | | 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>.
* lavc/decode: reindentAnton Khirnov2024-06-25
|
* lavc/decode: wrap AV_FRAME_FLAG_DISCARD handling in a loopAnton Khirnov2024-06-25
| | | | | Makes sure discarded frames do not cause EAGAIN to be returned during flushing, which is forbidden.
* lavc/internal: document the precise meaning of AVCodecInternal.drainingAnton Khirnov2024-06-25
| | | | | | | 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.