summaryrefslogtreecommitdiffstats
path: root/nuppelvideo.c
diff options
context:
space:
mode:
authoralex <alex@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-02-10 18:17:17 +0000
committeralex <alex@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-02-10 18:17:17 +0000
commite9063eed006759d98e6182fd2b731bcdd7740d2b (patch)
tree9a9dcca923912000af9be7959cb689a8a7fe2050 /nuppelvideo.c
parent24e208b65b81e9250e4c6b174956d35b9e595668 (diff)
downloadmpv-e9063eed006759d98e6182fd2b731bcdd7740d2b.tar.bz2
mpv-e9063eed006759d98e6182fd2b731bcdd7740d2b.tar.xz
break if error in decompressing, moved buffer allocating
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4645 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'nuppelvideo.c')
-rw-r--r--nuppelvideo.c34
1 files changed, 14 insertions, 20 deletions
diff --git a/nuppelvideo.c b/nuppelvideo.c
index 98788dd6e9..035a08621a 100644
--- a/nuppelvideo.c
+++ b/nuppelvideo.c
@@ -27,8 +27,10 @@ void decode_nuv( unsigned char *encoded, int encoded_size,
int r;
unsigned int out_len;
struct rtframeheader *encodedh = ( struct rtframeheader* ) encoded;
- static unsigned char *buffer = 0;
- static unsigned char *previous_buffer = 0;
+ static unsigned char *buffer = 0; /* for RTJpeg with LZO decompress */
+#ifdef KEEP_BUFFER
+ static unsigned char *previous_buffer = 0; /* to support Last-frame-copy */
+#endif
static is_lzo_inited = 0;
// printf("frametype: %c, comtype: %c, encoded_size: %d, width: %d, height: %d\n",
@@ -49,25 +51,9 @@ void decode_nuv( unsigned char *encoded, int encoded_size,
}
case 'V':
{
- /* do the buffer stuffs */
- if ( buffer == NULL )
- {
- buffer = ( unsigned char * ) malloc ( width * height + ( width * height ) / 2 );
-#if 0
- printf ( "Allocated for %dx%d image %d bytes\n", width, height,
- width * height + ( width * height ) / 2 );
-#endif
- }
-
#ifdef KEEP_BUFFER
- if ( previous_buffer == NULL )
- {
+ if (!previous_buffer)
previous_buffer = ( unsigned char * ) malloc ( width * height + ( width * height ) / 2 );
-#if 0
- printf ( "Allocated for %dx%d image %d bytes\n", width, height,
- width * height + ( width * height ) / 2 );
-#endif
- }
#endif
if (((encodedh->comptype == '2') ||
@@ -91,10 +77,18 @@ void decode_nuv( unsigned char *encoded, int encoded_size,
RTjpeg_decompressYUV420 ( ( __s8 * ) encoded + 12, decoded );
break;
case '2': /* RTJpeg with LZO */
+ if (!buffer)
+ buffer = ( unsigned char * ) malloc ( width * height + ( width * height ) / 2 );
+ if (!buffer)
+ {
+ printf ( "Error decompressing\n" );
+ break;
+ }
r = lzo1x_decompress ( encoded + 12, encodedh->packetlength, buffer, &out_len, NULL );
if ( r != LZO_E_OK )
{
printf ( "Error decompressing\n" );
+ break;
}
RTjpeg_decompressYUV420 ( ( __s8 * ) buffer, decoded );
break;
@@ -103,8 +97,8 @@ void decode_nuv( unsigned char *encoded, int encoded_size,
if ( r != LZO_E_OK )
{
printf ( "Error decompressing\n" );
+ break;
}
-// memcpy(decoded, buffer, width*height*3/2);
break;
case 'N': /* black frame */
memset ( decoded, 0, width * height );