(GCC did not perform this on its own; Clang did.)
Unified · Split
| @@ -171,27 +171,24 @@ static av_cold void free_duplicate_contexts(MpegEncContext *s) · 170 unmodified lines | ||
| 171 | 171 | free_duplicate_context(s); |
| 172 | 172 | } |
| 173 | 173 | |
| 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 | − | |
| 187 | 174 | int 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 | 185 | int ret; |
| 191 | 186 | // FIXME copy only needed parts |
| 192 | − backup_duplicate_context(&bak, dst); | |
| 187 | +#define BACKUP(T, member) T member = dst->member; | |
| 188 | + COPY(BACKUP) | |
| 193 | 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 | 193 | ret = ff_mpv_framesize_alloc(dst->avctx, &dst->sc, dst->linesize); |
| 197 | 194 | if (ret < 0) { |