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
171171 free_duplicate_context(s);
172172 }
173173
174−static 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−
187174 int ff_update_duplicate_context(MpegEncContext *dst, const MpegEncContext *src)
188175 {
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+
190185 int ret;
191186 // FIXME copy only needed parts
192− backup_duplicate_context(&bak, dst);
187+#define BACKUP(T, member) T member = dst->member;
188+ COPY(BACKUP)
193189 memcpy(dst, src, sizeof(MpegEncContext));
194− backup_duplicate_context(dst, &bak);
190+#define RESTORE(T, member) dst->member = member;
191+ COPY(RESTORE)
195192
196193 ret = ff_mpv_framesize_alloc(dst->avctx, &dst->sc, dst->linesize);
197194 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