|
|
|
@ -1609,6 +1609,25 @@ static void input_release_buffer(AVCodecContext *codec, AVFrame *pic) |
|
|
|
|
avfilter_unref_pic(pic->opaque); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int input_reget_buffer(AVCodecContext *codec, AVFrame *pic) |
|
|
|
|
{ |
|
|
|
|
AVFilterPicRef *ref = pic->opaque; |
|
|
|
|
|
|
|
|
|
if (pic->data[0] == NULL) { |
|
|
|
|
pic->buffer_hints |= FF_BUFFER_HINTS_READABLE; |
|
|
|
|
return codec->get_buffer(codec, pic); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if ((codec->width != ref->w) || (codec->height != ref->h) || |
|
|
|
|
(codec->pix_fmt != ref->pic->format)) { |
|
|
|
|
av_log(codec, AV_LOG_ERROR, "Picture properties changed.\n"); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
pic->reordered_opaque = codec->reordered_opaque; |
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static int input_init(AVFilterContext *ctx, const char *args, void *opaque) |
|
|
|
|
{ |
|
|
|
|
FilterPriv *priv = ctx->priv; |
|
|
|
@ -1622,6 +1641,7 @@ static int input_init(AVFilterContext *ctx, const char *args, void *opaque) |
|
|
|
|
priv->use_dr1 = 1; |
|
|
|
|
codec->get_buffer = input_get_buffer; |
|
|
|
|
codec->release_buffer = input_release_buffer; |
|
|
|
|
codec->reget_buffer = input_reget_buffer; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
priv->frame = avcodec_alloc_frame(); |
|
|
|
|