Nuo Mi: > --- > libavcodec/vvc/vvc_ctu.c | 2398 +++++++++++++++++++++++++++++++++++++- > libavcodec/vvc/vvc_ctu.h | 11 + > 2 files changed, 2404 insertions(+), 5 deletions(-) > > diff --git a/libavcodec/vvc/vvc_ctu.c b/libavcodec/vvc/vvc_ctu.c > index d46a522a0d..a212d3a44a 100644 > --- a/libavcodec/vvc/vvc_ctu.c > +++ b/libavcodec/vvc/vvc_ctu.c > @@ -22,8 +22,2379 @@
... > +static TransformUnit* alloc_tu(VVCFrameContext *fc, CodingUnit *cu) > +{ > + TransformUnit *tu; > + AVBufferRef *buf = av_buffer_pool_get(fc->tu_pool); > + if (!buf) > + return NULL; > + > + tu = (TransformUnit *)buf->data; > + tu->next = NULL; > + tu->buf = buf; > + > + if (cu->tus.tail) > + cu->tus.tail->next = tu; > + else > + cu->tus.head = tu; > + cu->tus.tail = tu; > + > + return tu; > +} > + ... > +static CodingUnit* alloc_cu(VVCLocalContext *lc, const int x0, const int y0) > +{ > + VVCFrameContext *fc = lc->fc; > + const VVCSPS *sps = fc->ps.sps; > + const VVCPPS *pps = fc->ps.pps; > + const int rx = x0 >> sps->ctb_log2_size_y; > + const int ry = y0 >> sps->ctb_log2_size_y; > + CTU *ctu = fc->tab.ctus + ry * pps->ctb_width + rx; > + CodingUnit *cu; > + > + AVBufferRef *buf = av_buffer_pool_get(fc->cu_pool); > + if (!buf) > + return NULL; > + cu = (CodingUnit *)buf->data; > + cu->next = NULL; > + cu->buf = buf; Do I see this correctly that the CodingUnits and TransformUnits are not refcounted to be shared, but only to use the AVBufferPool API? Anyway, switching to the (not yet merged) RefStruct pool API simplifies this (e.g. it will allow to remove the AVBufferRef pointers from the structures). > + > + if (lc->cu) > + lc->cu->next = cu; > + else > + ctu->cus = cu; > + lc->cu = cu; > + > + return cu; > +} > + _______________________________________________ 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".