Re: [FFmpeg-devel] [PATCH 1/4] ffv1dec: Avoid unnecessarily large stack usage and copies.

2014-09-02 Thread Reimar Döffinger
On Wed, Sep 03, 2014 at 12:01:52AM +0200, Reimar Döffinger wrote:
> Ideally the compiler could figure this out on its own,
> but it seems it can't.
> An alternative that would avoid the messy explicit memcpy
> would be to use a sub-struct for the parts that should
> be preserved, which can then simply be assigned.

Note this one is an exact duplicate of the one I sent earlier (following
ones are new).
Sorry, I didn't remember anymore what I had and hadn't sent..
___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel


[FFmpeg-devel] [PATCH 1/4] ffv1dec: Avoid unnecessarily large stack usage and copies.

2014-09-02 Thread Reimar Döffinger
Ideally the compiler could figure this out on its own,
but it seems it can't.
An alternative that would avoid the messy explicit memcpy
would be to use a sub-struct for the parts that should
be preserved, which can then simply be assigned.

Signed-off-by: Reimar Döffinger 
---
 libavcodec/ffv1dec.c | 15 ++-
 1 file changed, 10 insertions(+), 5 deletions(-)

diff --git a/libavcodec/ffv1dec.c b/libavcodec/ffv1dec.c
index c408f16..5fbe51c 100644
--- a/libavcodec/ffv1dec.c
+++ b/libavcodec/ffv1dec.c
@@ -1051,12 +1051,17 @@ static int update_thread_context(AVCodecContext *dst, 
const AVCodecContext *src)
 return 0;
 
 {
-FFV1Context bak = *fdst;
+ThreadFrame picture = fdst->picture, last_picture = fdst->last_picture;
+uint8_t (*initial_states[MAX_QUANT_TABLES])[32];
+struct FFV1Context *slice_context[MAX_SLICES];
+memcpy(initial_states, fdst->initial_states, 
sizeof(fdst->initial_states));
+memcpy(slice_context,  fdst->slice_context , 
sizeof(fdst->slice_context));
+
 memcpy(fdst, fsrc, sizeof(*fdst));
-memcpy(fdst->initial_states, bak.initial_states, 
sizeof(fdst->initial_states));
-memcpy(fdst->slice_context,  bak.slice_context , 
sizeof(fdst->slice_context));
-fdst->picture  = bak.picture;
-fdst->last_picture = bak.last_picture;
+memcpy(fdst->initial_states, initial_states, 
sizeof(fdst->initial_states));
+memcpy(fdst->slice_context,  slice_context , 
sizeof(fdst->slice_context));
+fdst->picture  = picture;
+fdst->last_picture = last_picture;
 for (i = 0; inum_h_slices * fdst->num_v_slices; i++) {
 FFV1Context *fssrc = fsrc->slice_context[i];
 FFV1Context *fsdst = fdst->slice_context[i];
-- 
2.1.0

___
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel