On 2/16/2021 12:16 PM, Nuo Mi wrote:
On Tue, Feb 16, 2021 at 7:20 AM Mark Thompson <s...@jkqxz.net> wrote:
While this is mode source code, it generates less binary code and can be
more cleanly extended to H.266.
---
On 14/02/2021 19:45, Andreas Rheinhardt wrote:
Nuo Mi:
From: Mark Thompson <s...@jkqxz.net>
Hi Andreas & Mark,
thanks for the suggestion.
Hi Mark,
vvc's xps does not need active_offset.
The change you suggest here is not needed to handle this, as you only
need to define a H266_PS_TYPE macro that does not set .active_offset
(When using designated initializers, fields that are not set will be
zeroed).
But at the end of the day, it's a cosmetic choice, so whatever you two
prefer is fine.
> vvc's picture header does not need id_offset. see [1], [2] for details
This one most likely needs the change you suggested below, though.
How about we change the patch like this:
$git diff
diff --git a/libavcodec/cbs_h2645.c b/libavcodec/cbs_h2645.c
index 6c44e781fa..57c419aa05 100644
--- a/libavcodec/cbs_h2645.c
+++ b/libavcodec/cbs_h2645.c
@@ -690,20 +690,24 @@ static int cbs_h2645_replace_ps(CodedBitstreamContext
*ctx,
size_t active_offset;
} PSType;
-#define H2645_PS_TYPE(codec, nal, cname, uname, count, id_name,
active_field) { \
+#define H26456_PS_TYPE(codec, nal, cname, uname, count, id_off,
active_off) { \
.codec_id = AV_CODEC_ID_ ## codec, \
.nal_unit_type = nal, \
.name = #cname, \
.id_count = count, \
- .id_offset = offsetof(codec ## Raw ## cname, \
- id_name ## _parameter_set_id), \
+ .id_offset = id_off, \
.ref_array_offset = offsetof(CodedBitstream ## codec ## Context, \
uname ## _ref), \
.ptr_array_offset = offsetof(CodedBitstream ## codec ## Context, \
uname), \
- .active_offset = offsetof(CodedBitstream ## codec ## Context, \
- active_field), \
+ .active_offset = active_off, \
}
+
+#define H2645_PS_TYPE(codec, nal, cname, uname, count, id_name,
active_field) \
+ H26456_PS_TYPE(codec, nal, cname, uname, count, \
+ offsetof(codec ## Raw ## cname, id_name ## _parameter_set_id),
\
+ offsetof(CodedBitstream ## codec ## Context, active_field))
+
#define H264_PS_TYPE(cname, uname, id_name) \
H2645_PS_TYPE(H264, H264_NAL_ ## cname, cname, uname, \
H264_MAX_ ## cname ## _COUNT, \
@@ -724,7 +728,7 @@ static int cbs_h2645_replace_ps(CodedBitstreamContext
*ctx,
const PSType *ps_type;
AVBufferRef **ref_array;
void **ptr_array;
- int err, id, i;
+ int err, id = 0, i;
ps_type = NULL;
for (i = 0; i < FF_ARRAY_ELEMS(ps_types); i++) {
@@ -736,12 +740,14 @@ static int cbs_h2645_replace_ps(CodedBitstreamContext
*ctx,
}
av_assert0(ps_type);
- id = *((uint8_t*)unit->content + ps_type->id_offset);
+ if (ps_type->id_offset) {
+ id = *((uint8_t*)unit->content + ps_type->id_offset);
- if (id >= ps_type->id_count) {
- av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid %s id: %d.\n",
- ps_type->name, id);
- return AVERROR_INVALIDDATA;
+ if (id >= ps_type->id_count) {
+ av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid %s id: %d.\n",
+ ps_type->name, id);
+ return AVERROR_INVALIDDATA;
+ }
}
err = ff_cbs_make_unit_refcounted(ctx, unit);
[1]:
https://patchwork.ffmpeg.org/project/ffmpeg/patch/20210211143611.5663-5-nuomi2...@gmail.com/
[2] h266_ps_types in
https://patchwork.ffmpeg.org/project/ffmpeg/patch/20210211143611.5663-6-nuomi2...@gmail.com/
_______________________________________________
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".
_______________________________________________
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".