Files
FFmpeg/libavcodec
Andreas Rheinhardt 72d5ce9fa6 avcodec/hevcdec: Add stat_coeffs to HEVCABACState
The HEVC decoder has both HEVCContext and HEVCLocalContext
structures. The latter is supposed to be the structure
containing the per-slicethread state.

Yet that is not how it is handled in practice: Each HEVCLocalContext
has a unique HEVCContext allocated for it and each of these
coincides with the main HEVCContext except in exactly one field:
The corresponding HEVCLocalContext.
This makes it possible to pass the HEVCContext everywhere where
logically a HEVCLocalContext should be used.

This led to confusion in the first version of what eventually became
commit c8bc0f66a8:
Before said commit, the initialization of the Rice parameter derivation
state was incorrect; the fix for single-threaded as well as
frame-threaded decoding was to add backup stats to HEVCContext
that are used when the cabac state is updated*, see
https://ffmpeg.org/pipermail/ffmpeg-devel/2020-August/268861.html
Yet due to what has been said above, this does not work for
slice-threading, because the each HEVCLocalContext has its own
HEVCContext, so the Rice parameter state would not be transferred
between threads.

This is fixed in c8bc0f66a8
by a hack: It rederives what the previous thread was and accesses
the corresponding HEVCContext.

Fix this by treating the Rice parameter state the same way
the ordinary CABAC parameters are shared between threads:
Make them part of the same struct that is shared between
slice threads. This does not cause races, because
the parts of the code that access these Rice parameters
are a subset of the parts of code that access the CABAC parameters.

*: And if the persistent_rice_adaptation_enabled_flag is set.

Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
2022-07-25 23:31:37 +02:00
..
2022-03-15 09:42:39 -03:00
2022-03-15 09:42:39 -03:00
2022-02-07 00:31:23 +01:00
2022-03-18 19:56:50 +01:00
2022-03-18 19:56:50 +01:00
2022-06-24 15:37:23 +08:00
2022-06-24 15:37:23 +08:00
2022-01-04 13:16:49 +01:00
2022-01-04 13:16:49 +01:00
2022-07-09 20:06:47 +02:00
2022-07-21 19:27:27 +02:00
2022-02-24 12:56:49 +01:00
2021-08-05 19:46:33 +02:00
2022-03-15 09:42:41 -03:00
2022-03-15 09:42:41 -03:00
2022-01-26 15:30:28 +01:00
2021-10-09 11:42:16 +02:00
2022-07-20 16:12:08 +02:00
2022-06-25 09:05:58 +08:00
2022-03-15 09:42:43 -03:00
2022-03-15 09:42:43 -03:00
2022-02-18 20:11:06 +01:00
2022-02-18 20:11:06 +01:00
2022-02-07 00:31:23 +01:00
2021-07-22 14:47:57 +02:00
2022-03-16 14:04:35 +02:00
2022-07-03 15:16:31 +02:00
2022-07-03 15:16:31 +02:00
2021-07-22 14:47:57 +02:00
2021-10-10 17:44:41 +02:00
2022-04-10 20:12:23 +02:00
2022-06-25 09:05:58 +08:00
2022-03-15 09:42:45 -03:00
2021-09-12 22:23:35 +02:00