avcodec/snow: ensure the buffers have allocated edges
Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
932be89c26
commit
e059ac59ef
@ -661,9 +661,18 @@ int ff_snow_frame_start(SnowContext *s){
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
s->current_picture->width = s->avctx->width + 2 * EDGE_WIDTH;
|
||||||
|
s->current_picture->height = s->avctx->height + 2 * EDGE_WIDTH;
|
||||||
if ((ret = ff_get_buffer(s->avctx, s->current_picture, AV_GET_BUFFER_FLAG_REF)) < 0)
|
if ((ret = ff_get_buffer(s->avctx, s->current_picture, AV_GET_BUFFER_FLAG_REF)) < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
for (i = 0; s->current_picture->data[i]; i++) {
|
||||||
|
int offset = (EDGE_WIDTH >> (i ? s->chroma_v_shift : 0)) *
|
||||||
|
s->current_picture->linesize[i] +
|
||||||
|
(EDGE_WIDTH >> (i ? s->chroma_h_shift : 0));
|
||||||
|
s->current_picture->data[i] += offset;
|
||||||
|
}
|
||||||
|
s->current_picture->width = s->avctx->width;
|
||||||
|
s->current_picture->height = s->avctx->height;
|
||||||
|
|
||||||
s->current_picture->key_frame= s->keyframe;
|
s->current_picture->key_frame= s->keyframe;
|
||||||
|
|
||||||
|
@ -37,6 +37,7 @@ static av_cold int encode_init(AVCodecContext *avctx)
|
|||||||
{
|
{
|
||||||
SnowContext *s = avctx->priv_data;
|
SnowContext *s = avctx->priv_data;
|
||||||
int plane_index, ret;
|
int plane_index, ret;
|
||||||
|
int i;
|
||||||
|
|
||||||
if(avctx->prediction_method == DWT_97
|
if(avctx->prediction_method == DWT_97
|
||||||
&& (avctx->flags & CODEC_FLAG_QSCALE)
|
&& (avctx->flags & CODEC_FLAG_QSCALE)
|
||||||
@ -124,11 +125,20 @@ static av_cold int encode_init(AVCodecContext *avctx)
|
|||||||
s->input_picture = av_frame_alloc();
|
s->input_picture = av_frame_alloc();
|
||||||
if (!s->input_picture)
|
if (!s->input_picture)
|
||||||
return AVERROR(ENOMEM);
|
return AVERROR(ENOMEM);
|
||||||
|
s->input_picture->width = s->avctx->width + 2 * EDGE_WIDTH;
|
||||||
|
s->input_picture->height = s->avctx->height + 2 * EDGE_WIDTH;
|
||||||
if ((ret = ff_get_buffer(s->avctx, s->input_picture, AV_GET_BUFFER_FLAG_REF)) < 0)
|
if ((ret = ff_get_buffer(s->avctx, s->input_picture, AV_GET_BUFFER_FLAG_REF)) < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
for (i = 0; s->input_picture->data[i]; i++) {
|
||||||
|
int offset = (EDGE_WIDTH >> (i ? s->chroma_v_shift : 0)) *
|
||||||
|
s->input_picture->linesize[i] +
|
||||||
|
(EDGE_WIDTH >> (i ? s->chroma_h_shift : 0));
|
||||||
|
s->input_picture->data[i] += offset;
|
||||||
|
}
|
||||||
|
s->input_picture->width = s->avctx->width;
|
||||||
|
s->input_picture->height = s->avctx->height;
|
||||||
|
|
||||||
if(s->avctx->me_method == ME_ITER){
|
if(s->avctx->me_method == ME_ITER){
|
||||||
int i;
|
|
||||||
int size= s->b_width * s->b_height << 2*s->block_max_depth;
|
int size= s->b_width * s->b_height << 2*s->block_max_depth;
|
||||||
for(i=0; i<s->max_ref_frames; i++){
|
for(i=0; i<s->max_ref_frames; i++){
|
||||||
s->ref_mvs[i]= av_mallocz_array(size, sizeof(int16_t[2]));
|
s->ref_mvs[i]= av_mallocz_array(size, sizeof(int16_t[2]));
|
||||||
|
Loading…
x
Reference in New Issue
Block a user