From aa06658248a49f6ebf381894b9426cdfb377cd32 Mon Sep 17 00:00:00 2001 From: Roman Shaposhnik Date: Fri, 6 Jan 2006 19:19:39 +0000 Subject: Moving dv_anchor back to the global scope. This creates a tiny memory leak for cases like dlopening libavcodec.so and such, but I still don't know how to catch such events. Originally committed as revision 4818 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/dv.c | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) (limited to 'libavcodec/dv.c') diff --git a/libavcodec/dv.c b/libavcodec/dv.c index db3178c..fe8f688 100644 --- a/libavcodec/dv.c +++ b/libavcodec/dv.c @@ -49,11 +49,11 @@ typedef struct DVVideoContext { void (*get_pixels)(DCTELEM *block, const uint8_t *pixels, int line_size); void (*fdct[2])(DCTELEM *block); void (*idct_put[2])(uint8_t *dest, int line_size, DCTELEM *block); - - /* MultiThreading */ - uint8_t** dv_anchor; } DVVideoContext; +/* MultiThreading - applies to entire DV codec, not just the avcontext */ +uint8_t** dv_anchor; + #define TEX_VLC_BITS 9 #ifdef DV_CODEC_TINY_TARGET @@ -118,12 +118,12 @@ static int dvvideo_init(AVCodecContext *avctx) return -ENOMEM; /* dv_anchor lets each thread know its Id */ - s->dv_anchor = av_malloc(12*27*sizeof(void*)); - if (!s->dv_anchor) { + dv_anchor = av_malloc(12*27*sizeof(void*)); + if (!dv_anchor) { return -ENOMEM; } for (i=0; i<12*27; i++) - s->dv_anchor[i] = (void*)(size_t)i; + dv_anchor[i] = (void*)(size_t)i; /* it's faster to include sign bit in a generic VLC parsing scheme */ for (i=0, j=0; idv_anchor); + if (!dv_rl_vlc) return -ENOMEM; - } + for(i = 0; i < dv_vlc.table_size; i++){ int code= dv_vlc.table[i][0]; int len = dv_vlc.table[i][1]; @@ -939,7 +938,7 @@ static int dvvideo_decode_frame(AVCodecContext *avctx, s->picture.top_field_first = 0; s->buf = buf; - avctx->execute(avctx, dv_decode_mt, (void**)&s->dv_anchor[0], NULL, + avctx->execute(avctx, dv_decode_mt, (void**)&dv_anchor[0], NULL, s->sys->difseg_size * 27); emms_c(); @@ -968,7 +967,7 @@ static int dvvideo_encode_frame(AVCodecContext *c, uint8_t *buf, int buf_size, s->picture.pict_type = FF_I_TYPE; s->buf = buf; - c->execute(c, dv_encode_mt, (void**)&s->dv_anchor[0], NULL, + c->execute(c, dv_encode_mt, (void**)&dv_anchor[0], NULL, s->sys->difseg_size * 27); emms_c(); @@ -977,9 +976,6 @@ static int dvvideo_encode_frame(AVCodecContext *c, uint8_t *buf, int buf_size, static int dvvideo_close(AVCodecContext *c) { - DVVideoContext *s = c->priv_data; - - av_free(s->dv_anchor); return 0; } -- cgit v1.1