History

avcodec/mpegvideo: Reduce stack usage when copying MpegEncContext

(GCC did not perform this on its own; Clang did.)

Andreas Rheinhardt committed 1 year ago

Commit 5cdce561 parent f8c0ac91 file · +13 −16Browse files

Unified · Split

libavcodec/mpegvideo.c+13−16
@@ -171,27 +171,24 @@ static av_cold void free_duplicate_contexts(MpegEncContext *s) · 170 unmodified lines
171 free_duplicate_context(s);171 free_duplicate_context(s);
172}172}
173 173
174static void backup_duplicate_context(MpegEncContext *bak, MpegEncContext *src)
175{
176#define COPY(a) bak->a = src->a
177 COPY(sc);
178 COPY(blocks);
179 COPY(block);
180 COPY(start_mb_y);
181 COPY(end_mb_y);
182 COPY(dc_val);
183 COPY(ac_val);
184#undef COPY
185}
186
187int ff_update_duplicate_context(MpegEncContext *dst, const MpegEncContext *src)174int ff_update_duplicate_context(MpegEncContext *dst, const MpegEncContext *src)
188{175{
189 MpegEncContext bak;176#define COPY(M) \
177 M(ScratchpadContext, sc) \
178 M(void*, blocks) \
179 M(void*, block) \
180 M(int, start_mb_y) \
181 M(int, end_mb_y) \
182 M(int16_t*, dc_val) \
183 M(void*, ac_val)
184
190 int ret;185 int ret;
191 // FIXME copy only needed parts186 // FIXME copy only needed parts
192 backup_duplicate_context(&bak, dst);187#define BACKUP(T, member) T member = dst->member;
188 COPY(BACKUP)
193 memcpy(dst, src, sizeof(MpegEncContext));189 memcpy(dst, src, sizeof(MpegEncContext));
194 backup_duplicate_context(dst, &bak);190#define RESTORE(T, member) dst->member = member;
191 COPY(RESTORE)
195 192
196 ret = ff_mpv_framesize_alloc(dst->avctx, &dst->sc, dst->linesize);193 ret = ff_mpv_framesize_alloc(dst->avctx, &dst->sc, dst->linesize);
197 if (ret < 0) {194 if (ret < 0) {

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t