summaryrefslogtreecommitdiffstats
path: root/libmpcodecs
diff options
context:
space:
mode:
authorreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-12-10 18:59:28 +0000
committerreimar <reimar@b3059339-0415-0410-9bf9-f77b7e298cf2>2006-12-10 18:59:28 +0000
commit81b668d7ed6f7be194ef175b6f60f870f21a45d0 (patch)
treebaa5e9c77c16482f6fb27d6c04474a8330bd19c8 /libmpcodecs
parent5244303111a1432f3e37d60d0a82081ac3237ddf (diff)
downloadmpv-81b668d7ed6f7be194ef175b6f60f870f21a45d0.tar.bz2
mpv-81b668d7ed6f7be194ef175b6f60f870f21a45d0.tar.xz
Only increase buffer size to avoid crashes when seeking in
multi-resolution video files. git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@21579 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libmpcodecs')
-rw-r--r--libmpcodecs/vd_realvid.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/libmpcodecs/vd_realvid.c b/libmpcodecs/vd_realvid.c
index ba3cdd5a01..813cbf9977 100644
--- a/libmpcodecs/vd_realvid.c
+++ b/libmpcodecs/vd_realvid.c
@@ -60,6 +60,7 @@ static unsigned long WINAPI (*wrvyuv_transform)(char*, char*,transform_in_t*,uns
static void *rv_handle=NULL;
static int inited=0;
static uint8_t *buffer = NULL;
+static int bufsz = 0;
#ifdef USE_WIN32DLL
static int dll_type = 0; /* 0 = unix dlopen, 1 = win32 dll */
#endif
@@ -300,6 +301,7 @@ static void uninit(sh_video_t *sh){
if (buffer)
free(buffer);
buffer = NULL;
+ bufsz = 0;
}
// copypaste from demux_real.c - it should match to get it working!
@@ -330,9 +332,10 @@ static mp_image_t* decode(sh_video_t *sh,void* data,int len,int flags){
if(len<=0 || flags&2) return NULL; // skipped frame || hardframedrop
- if (!inited) {
+ if (bufsz < sh->disp_w*sh->disp_h*3/2) {
if (buffer) free(buffer);
- buffer=malloc(sh->disp_w*sh->disp_h*3/2);
+ bufsz = sh->disp_w*sh->disp_h*3/2;
+ buffer=malloc(bufsz);
if (!buffer) return 0;
}