When this function returns, the fragment is never reset, so current_frag->data_ref is never unref-ed, which ends up leaking it. We call ff_cbs_fragment_reset to release the reference on its buffer.
Unified · Split
| @@ -1679,8 +1679,6 @@ static int vp9_decode_frame(AVCodecContext *avctx, AVFrame *frame, · 1678 unmodified lines | ||
| 1679 | 1679 | &s->s.frames[CUR_FRAME] : &s->s.ref_frames[i]); |
| 1680 | 1680 | } |
| 1681 | 1681 | |
| 1682 | − ff_cbs_fragment_reset(&s->current_frag); | |
| 1683 | − | |
| 1684 | 1682 | goto finish; |
| 1685 | 1683 | } |
| 1686 | 1684 | |
| @@ -1805,6 +1803,8 @@ static int vp9_decode_frame(AVCodecContext *avctx, AVFrame *frame, · 118 unmodified lines | ||
| 1805 | 1803 | } |
| 1806 | 1804 | |
| 1807 | 1805 | finish: |
| 1806 | + ff_cbs_fragment_reset(&s->current_frag); | |
| 1807 | + | |
| 1808 | 1808 | ff_progress_frame_report(&s->s.frames[CUR_FRAME].tf, INT_MAX); |
| 1809 | 1809 | // ref frame setup |
| 1810 | 1810 | for (int i = 0; i < 8; i++) |