mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-06-04 05:57:49 +02:00
SVQ3: do not modify const input buffer
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
b0e7a932e6
commit
2264c11081
@ -70,6 +70,8 @@ typedef struct {
|
|||||||
int unknown_flag;
|
int unknown_flag;
|
||||||
int next_slice_index;
|
int next_slice_index;
|
||||||
uint32_t watermark_key;
|
uint32_t watermark_key;
|
||||||
|
uint8_t *buf;
|
||||||
|
int buf_size;
|
||||||
} SVQ3Context;
|
} SVQ3Context;
|
||||||
|
|
||||||
#define FULLPEL_MODE 1
|
#define FULLPEL_MODE 1
|
||||||
@ -927,12 +929,12 @@ static int svq3_decode_frame(AVCodecContext *avctx,
|
|||||||
void *data, int *data_size,
|
void *data, int *data_size,
|
||||||
AVPacket *avpkt)
|
AVPacket *avpkt)
|
||||||
{
|
{
|
||||||
const uint8_t *buf = avpkt->data;
|
|
||||||
SVQ3Context *svq3 = avctx->priv_data;
|
SVQ3Context *svq3 = avctx->priv_data;
|
||||||
H264Context *h = &svq3->h;
|
H264Context *h = &svq3->h;
|
||||||
MpegEncContext *s = &h->s;
|
MpegEncContext *s = &h->s;
|
||||||
int buf_size = avpkt->size;
|
int buf_size = avpkt->size;
|
||||||
int m, mb_type, left;
|
int m, mb_type, left;
|
||||||
|
uint8_t *buf;
|
||||||
|
|
||||||
/* special case for last picture */
|
/* special case for last picture */
|
||||||
if (buf_size == 0) {
|
if (buf_size == 0) {
|
||||||
@ -944,10 +946,21 @@ static int svq3_decode_frame(AVCodecContext *avctx,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
init_get_bits (&s->gb, buf, 8*buf_size);
|
|
||||||
|
|
||||||
s->mb_x = s->mb_y = h->mb_xy = 0;
|
s->mb_x = s->mb_y = h->mb_xy = 0;
|
||||||
|
|
||||||
|
if (svq3->watermark_key) {
|
||||||
|
svq3->buf = av_fast_realloc(svq3->buf, &svq3->buf_size,
|
||||||
|
buf_size+FF_INPUT_BUFFER_PADDING_SIZE);
|
||||||
|
if (!svq3->buf)
|
||||||
|
return AVERROR(ENOMEM);
|
||||||
|
memcpy(svq3->buf, avpkt->data, buf_size);
|
||||||
|
buf = svq3->buf;
|
||||||
|
} else {
|
||||||
|
buf = avpkt->data;
|
||||||
|
}
|
||||||
|
|
||||||
|
init_get_bits(&s->gb, buf, 8*buf_size);
|
||||||
|
|
||||||
if (svq3_decode_slice_header(avctx))
|
if (svq3_decode_slice_header(avctx))
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
@ -1092,6 +1105,9 @@ static int svq3_decode_end(AVCodecContext *avctx)
|
|||||||
|
|
||||||
MPV_common_end(s);
|
MPV_common_end(s);
|
||||||
|
|
||||||
|
av_freep(&svq3->buf);
|
||||||
|
svq3->buf_size = 0;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user