Commit 0ec886dd authored by Andreas Rheinhardt's avatar Andreas Rheinhardt

avcodec/hevcdec: Use union for AVFrame* and ProgressFrame

It avoids having to sync ProgressFrame.f and the pointer
typically used to access the AVFrame.
Signed-off-by: 's avatarAndreas Rheinhardt <andreas.rheinhardt@outlook.com>
parent 1d17d84b
......@@ -34,7 +34,6 @@ void ff_hevc_unref_frame(HEVCFrame *frame, int flags)
frame->flags &= ~flags;
if (!frame->flags) {
ff_progress_frame_unref(&frame->tf);
frame->frame = NULL;
av_frame_unref(frame->frame_grain);
frame->needs_fg = 0;
......@@ -87,7 +86,6 @@ static HEVCFrame *alloc_frame(HEVCContext *s)
AV_GET_BUFFER_FLAG_REF);
if (ret < 0)
return NULL;
frame->frame = frame->tf.f;
frame->rpl = ff_refstruct_allocz(s->pkt.nb_nals * sizeof(*frame->rpl));
if (!frame->rpl)
......
......@@ -3418,7 +3418,6 @@ static int hevc_ref_frame(HEVCFrame *dst, HEVCFrame *src)
int ret;
ff_progress_frame_ref(&dst->tf, &src->tf);
dst->frame = dst->tf.f;
if (src->needs_fg) {
ret = av_frame_ref(dst->frame_grain, src->frame_grain);
......
......@@ -352,9 +352,13 @@ typedef struct DBParams {
#define HEVC_SEQUENCE_COUNTER_INVALID (HEVC_SEQUENCE_COUNTER_MASK + 1)
typedef struct HEVCFrame {
AVFrame *frame;
union {
struct {
AVFrame *frame;
};
ProgressFrame tf;
};
AVFrame *frame_grain;
ProgressFrame tf;
int needs_fg; /* 1 if grain needs to be applied by the decoder */
MvField *tab_mvf; ///< RefStruct reference
RefPicList *refPicList;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment