jpegenc: Allow encoding a 4K frame
Such a frame takes 12 MiB in YUV, which is bigger than the stack size of
most operating systems.
Instead of allocating the buffer on the stack, use malloc().
Signed-off-by: Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
diff --git a/encode/jpegenc.c b/encode/jpegenc.c
index 5e1baa6..5879892 100644
--- a/encode/jpegenc.c
+++ b/encode/jpegenc.c
@@ -489,7 +489,7 @@
VAImage surface_image;
VAStatus va_status;
void *surface_p = NULL;
- unsigned char newImageBuffer[frame_size];
+ unsigned char *newImageBuffer;
unsigned char *y_src, *u_src, *v_src;
unsigned char *y_dst, *u_dst;
int y_size = picture_width * picture_height;
@@ -500,6 +500,7 @@
//u_size is used for I420, NV12 formats only
u_size = ((picture_width >> 1) * (picture_height >> 1));
+ newImageBuffer = malloc(frame_size);
memset(newImageBuffer,0,frame_size);
do {
n_items = fread(newImageBuffer, frame_size, 1, yuv_fp);
@@ -574,6 +575,7 @@
vaUnmapBuffer(va_dpy, surface_image.buf);
vaDestroyImage(va_dpy, surface_image.image_id);
+ free(newImageBuffer);
}