summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjiguoliang <jiguoliang@localhost.localdomain>2011-01-21 13:53:20 +0800
committerjiguoliang <jiguoliang@localhost.localdomain>2011-01-21 13:53:20 +0800
commit74ad532d89424df8983bbc37f57649c24e9015c1 (patch)
treee5d6341bddd1518229ada829de4ef857f2aeb0a1
parent34423a55ce1196bff0f90a2d2d670fc757265bf4 (diff)
downloadlibva-74ad532d89424df8983bbc37f57649c24e9015c1.tar.gz
modify the problem of mallocing a VACodedBufferSegment every time
-rw-r--r--va/va_fool.c26
1 files changed, 16 insertions, 10 deletions
diff --git a/va/va_fool.c b/va/va_fool.c
index c8ef90b..b2d7449 100644
--- a/va/va_fool.c
+++ b/va/va_fool.c
@@ -80,6 +80,7 @@ static struct _fool_context {
FILE *fool_fp_codedclip; /* load a clip from disk for fooling encode*/
char *frame_buf;
+ VACodedBufferSegment *codebuf;
/* all buffers with same type share one malloc-ed memory
* bufferID = (buffer numbers with the same type << 8) || type
@@ -179,13 +180,17 @@ void va_FoolInit(VADisplay dpy)
fool_encode = 0;
if (fool_encode) /* malloc the buffer for fake clip */
+ {
fool_context[fool_index].frame_buf = malloc(MAX_FRAME*SLICE_NUM*NAL_BUF_SIZE*sizeof(char));
+ fool_context[fool_index].codebuf = malloc(sizeof(VACodedBufferSegment));
+ }
if (fool_context[fool_index].frame_buf == NULL)
fool_encode = 0;
if (fool_encode)
va_infoMessage("LIBVA_FOOL_ENCODE is on, dummy encode\n");
+
}
if (fool_encode || fool_decode)
@@ -209,6 +214,9 @@ int va_FoolEnd(VADisplay dpy)
if (fool_context[idx].frame_buf)
free(fool_context[idx].frame_buf);
+ if (fool_context[idx].codebuf)
+ free(fool_context[idx].codebuf);
+
memset(&fool_context[idx], sizeof(struct _fool_context), 0);
return 0;
}
@@ -446,16 +454,14 @@ VAStatus va_FoolMapBuffer (
frame_size = va_FoolGetFrame(fool_context[idx].fool_fp_codedclip,
fool_context[idx].frame_buf);
- VACodedBufferSegment *codebuf;
- codebuf = malloc(sizeof(VACodedBufferSegment));
- memset(codebuf,0,sizeof(VACodedBufferSegment));
- codebuf->size = frame_size;
- codebuf->bit_offset = 0;
- codebuf->status = 0;
- codebuf->reserved = 0;
- codebuf->buf = fool_context[idx].frame_buf;
- codebuf->next = NULL;
- *pbuf = codebuf;
+ memset(fool_context[idx].codebuf,0,sizeof(VACodedBufferSegment));
+ fool_context[idx].codebuf->size = frame_size;
+ fool_context[idx].codebuf->bit_offset = 0;
+ fool_context[idx].codebuf->status = 0;
+ fool_context[idx].codebuf->reserved = 0;
+ fool_context[idx].codebuf->buf = fool_context[idx].frame_buf;
+ fool_context[idx].codebuf->next = NULL;
+ *pbuf = fool_context[idx].codebuf;
}
return 1; /* don't call into driver */
}