(GCC did not perform this on its own; Clang did.)
Showing the changes to libavcodec (1 of 1 file). Show all
Unified · Split
| @@ -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 | ||
| 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 | int ff_update_duplicate_context(MpegEncContext *dst, const MpegEncContext *src) | 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 | int ret; | 185 | int ret; |
| 191 | // FIXME copy only needed parts | 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 | 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) { |