diff options
author | alex <alex@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-02-10 18:17:17 +0000 |
---|---|---|
committer | alex <alex@b3059339-0415-0410-9bf9-f77b7e298cf2> | 2002-02-10 18:17:17 +0000 |
commit | e9063eed006759d98e6182fd2b731bcdd7740d2b (patch) | |
tree | 9a9dcca923912000af9be7959cb689a8a7fe2050 /nuppelvideo.c | |
parent | 24e208b65b81e9250e4c6b174956d35b9e595668 (diff) | |
download | mpv-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.c | 34 |
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 ); |