X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavfilter%2Flavfutils.c;h=2bc06257c6fa6ef30672c0a0ab374b469f525d36;hb=56450a0ee4fdda160f4039fc2ae33edfd27765c9;hp=db4b69b9f36d0a18e1531defd2851e869db894a8;hpb=1f1ec958f6c68a5ceafea206a99c895f62d0f3ec;p=ffmpeg diff --git a/libavfilter/lavfutils.c b/libavfilter/lavfutils.c index db4b69b9f36..2bc06257c6f 100644 --- a/libavfilter/lavfutils.c +++ b/libavfilter/lavfutils.c @@ -19,24 +19,23 @@ */ #include "libavutil/imgutils.h" +#include "libavformat/avformat.h" #include "lavfutils.h" int ff_load_image(uint8_t *data[4], int linesize[4], int *w, int *h, enum AVPixelFormat *pix_fmt, const char *filename, void *log_ctx) { - AVInputFormat *iformat = NULL; + const AVInputFormat *iformat = NULL; AVFormatContext *format_ctx = NULL; - AVCodec *codec; - AVCodecContext *codec_ctx; + const AVCodec *codec; + AVCodecContext *codec_ctx = NULL; AVCodecParameters *par; - AVFrame *frame; - int frame_decoded, ret = 0; + AVFrame *frame = NULL; + int ret = 0; AVPacket pkt; AVDictionary *opt=NULL; - av_init_packet(&pkt); - iformat = av_find_input_format("image2pipe"); if ((ret = avformat_open_input(&format_ctx, filename, iformat, NULL)) < 0) { av_log(log_ctx, AV_LOG_ERROR, @@ -46,7 +45,7 @@ int ff_load_image(uint8_t *data[4], int linesize[4], if ((ret = avformat_find_stream_info(format_ctx, NULL)) < 0) { av_log(log_ctx, AV_LOG_ERROR, "Find stream info failed\n"); - return ret; + goto end; } par = format_ctx->streams[0]->codecpar; @@ -88,11 +87,16 @@ int ff_load_image(uint8_t *data[4], int linesize[4], goto end; } - ret = avcodec_decode_video2(codec_ctx, frame, &frame_decoded, &pkt); - if (ret < 0 || !frame_decoded) { + ret = avcodec_send_packet(codec_ctx, &pkt); + av_packet_unref(&pkt); + if (ret < 0) { + av_log(log_ctx, AV_LOG_ERROR, "Error submitting a packet to decoder\n"); + goto end; + } + + ret = avcodec_receive_frame(codec_ctx, frame); + if (ret < 0) { av_log(log_ctx, AV_LOG_ERROR, "Failed to decode image from file\n"); - if (ret >= 0) - ret = -1; goto end; } @@ -107,7 +111,6 @@ int ff_load_image(uint8_t *data[4], int linesize[4], av_image_copy(data, linesize, (const uint8_t **)frame->data, frame->linesize, *pix_fmt, *w, *h); end: - av_packet_unref(&pkt); avcodec_free_context(&codec_ctx); avformat_close_input(&format_ctx); av_frame_free(&frame);