mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-02-17 12:27:18 +00:00
dtsdec.c copies one input packet at a time to a (static) buffer of size
4096 bytes while the packet can be up to 18726 bytes. The code also keeps decoding until all input data has been used up, not respecting AVCODEC_MAX_AUDIO_FRAME_SIZE. The patch increases the buffer size and return after decoding one frame. Also fixes dts_decode_init to return -1, not 1, on failure. Patch by Uoti Urpala ||| uoti : urpala |!| pp1 : inet : fi ||| Originally committed as revision 5307 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
parent
c3f11d199c
commit
4f26258f84
@ -33,8 +33,7 @@
|
|||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define INBUF_SIZE 4096
|
#define BUFFER_SIZE 18726
|
||||||
#define BUFFER_SIZE 4096
|
|
||||||
#define HEADER_SIZE 14
|
#define HEADER_SIZE 14
|
||||||
|
|
||||||
#ifdef LIBDTS_FIXED
|
#ifdef LIBDTS_FIXED
|
||||||
@ -231,9 +230,11 @@ dts_decode_frame (AVCodecContext *avctx, void *data, int *data_size,
|
|||||||
memcpy (bufptr, start, len);
|
memcpy (bufptr, start, len);
|
||||||
bufptr += len;
|
bufptr += len;
|
||||||
start += len;
|
start += len;
|
||||||
if (bufptr == bufpos)
|
if (bufptr != bufpos)
|
||||||
{
|
return start - buff;
|
||||||
if (bufpos == buf + HEADER_SIZE)
|
if (bufpos != buf + HEADER_SIZE)
|
||||||
|
break;
|
||||||
|
|
||||||
{
|
{
|
||||||
int length;
|
int length;
|
||||||
|
|
||||||
@ -248,7 +249,8 @@ dts_decode_frame (AVCodecContext *avctx, void *data, int *data_size,
|
|||||||
}
|
}
|
||||||
bufpos = buf + length;
|
bufpos = buf + length;
|
||||||
}
|
}
|
||||||
else
|
}
|
||||||
|
|
||||||
{
|
{
|
||||||
level_t level;
|
level_t level;
|
||||||
sample_t bias;
|
sample_t bias;
|
||||||
@ -280,16 +282,14 @@ dts_decode_frame (AVCodecContext *avctx, void *data, int *data_size,
|
|||||||
}
|
}
|
||||||
bufptr = buf;
|
bufptr = buf;
|
||||||
bufpos = buf + HEADER_SIZE;
|
bufpos = buf + HEADER_SIZE;
|
||||||
continue;
|
return start-buff;
|
||||||
error:
|
error:
|
||||||
av_log (NULL, AV_LOG_ERROR, "error\n");
|
av_log (NULL, AV_LOG_ERROR, "error\n");
|
||||||
bufptr = buf;
|
bufptr = buf;
|
||||||
bufpos = buf + HEADER_SIZE;
|
bufpos = buf + HEADER_SIZE;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return buff_size;
|
return start-buff;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@ -297,7 +297,7 @@ dts_decode_init (AVCodecContext *avctx)
|
|||||||
{
|
{
|
||||||
avctx->priv_data = dts_init (0);
|
avctx->priv_data = dts_init (0);
|
||||||
if (avctx->priv_data == NULL)
|
if (avctx->priv_data == NULL)
|
||||||
return 1;
|
return -1;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user