On 16/07/2020 00:35, Lynne wrote:
Jul 16, 2020, 00:06 by s...@jkqxz.net:
On 15/07/2020 18:43, Yongle Lin wrote:
add block type field to AVVideoBlockParams so we could either export or
visualize it later.
---
libavutil/video_enc_params.h | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/libavutil/video_enc_params.h b/libavutil/video_enc_params.h
index 43fa443154..8bf5f240c9 100644
--- a/libavutil/video_enc_params.h
+++ b/libavutil/video_enc_params.h
@@ -57,6 +57,11 @@ enum AVVideoEncParamsType {
AV_VIDEO_ENC_PARAMS_H264,
};
+enum AVVideoBlockFlags {
+ AV_VIDEO_ENC_BLOCK_INTRA = 1ULL << 0, /* Indicates block uses intra
prediction */
The ULL is only confusing matters here - standard-conforming enum values have
type int. Some compilers allow it to be a larger integer type, but I don't
think we can rely on that extension.
We already rely on this behavior internally in hwcontext_vulkan. Are you sure
there's a compiler
we support that doesn't allow this? If so we ought to fix that.
You don't actually need it in hwcontext_vulkan, since it's internal-only (no
ABI issues) and everything would work on a conforming compiler which just
converts the values to int.
IMO it's not a useful enough feature to add to the special list of non-C99
things allowed. Here it seems highly unlikely that we will get anywhere near
32 separate flags.
+ AV_VIDEO_ENC_BLOCK_SKIP = 1ULL << 1, /* Indicates block is not coded
(skipped) */
Can you define more precisely what you mean by "not coded"? Is that just that
it has no residuals, or does it also indicate no motion vector, or no coded motion vector
relative to prediction?
In AV1 and VP9, which are AFAIK the only codecs to have this type of block
skipping, are only able to
code deblocking level adjustments for skipped blocks. No residual is sent, no
motion vector
either (hence the motion vector used is the likeliest candidate from the list
of motion vectors).
If a block isn't skipped, a motion vector may or may not be coded, depending on
what's in
the list of candidates for a block, so it would be inappropriate to apply the
skip flag for anything
but AV1/VP9-style skipped blocks.
VP8 also supports all of that but no one cares about VP8 so its irrelevant.
There are block types P_Skip and B_Skip in H.264, which code nothing at all in
the bitstream after the skip indication.
P_Skip uses the predicted motion vector against index 0 of RefPicList0.
B_Skip has a complex (but precisely-defined) procedure to try to choose a
reference picture from each of the two RefPicLists and motion vectors in them,
and will combine them as normal if it has both.
The first sounds exactly like what you're saying is in VP9/AV1. The second is
more complex, but should probably still count? Dunno.
- Mark
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
To unsubscribe, visit link above, or email
ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".