[FFmpeg-devel] unable to decode png file.

UrdnotFirebug powersheld at gmail.com
Sat Oct 4 10:32:21 CEST 2014


hi all. i'm one of developer which using ffmpeg to write program.

problem is that it always fails that try to decode png file.

with few experience, i found some weird bug. i hope it it my mistake.
here's the code.

-------------------------------------------------------------------------------------------------------------------------------
    int imageToFrame(const char* fileName, const int& width, const int&
height, AVFrame** frame)
    {
        AVFormatContext* pFormatContext = NULL;
        AVCodecContext* pCodecContext = NULL;
        bool gotCodecContext = false;
        AVFrame* rawFrame = NULL;

        // No Problem
        if(avformat_open_input(&pFormatContext, fileName, NULL, NULL) < 0
|| pFormatContext == NULL)
        {
            return 1;
        }

        // This is Problem!
        /*
        if(avformat_find_stream_info(pFormatContext, NULL) < 0)
        {
            return 1;
        }
        */

        for(unsigned int index=0; index<pFormatContext->nb_streams; index++)
        {
            pCodecContext = pFormatContext->streams[index]->codec;
            if(pCodecContext->codec_type == AVMEDIA_TYPE_VIDEO)
            {
                gotCodecContext = true;
                break;
            }
        }

        if(gotCodecContext == false)
        {
            return 2;
        }

        // No Problem
        if(avcodec_open2(pCodecContext,
avcodec_find_decoder(pCodecContext->codec_id), NULL) < 0)
        {
            return 3;
        }

        rawFrame = av_frame_alloc();
        if(rawFrame == NULL)
        {
            return 4;
        }

        AVPacket packet;
        int gotFrame=0;

        // NO Problem
        while (av_read_frame(pFormatContext, &packet) >= 0)
        {
            if(packet.stream_index != 0) continue;
            // Always gotFrame is 0 until remove avformat_find_stream_info
            if(avcodec_decode_video2(pCodecContext, rawFrame, &gotFrame,
&packet) == 0 && gotFrame)
            {
                break;
            }
        }
-------------------------------------------------------------------------------------------------------------------------------

this is simple code that extract one frame from image file.

when i use avformat_find_stream_info function with AVFormatContext which
contain PNG file,

avcodec_decode_video2 is always fail to decode.
(return code is 0 but gotframe is always 0)

but it can decode from packet if i remove avformat_find_stream_info.


it appears only png file. jpg was no problem with decode even using
avformat_find_stream_info.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 200x200.png
Type: image/png
Size: 49575 bytes
Desc: not available
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20141004/4044b8f2/attachment.png>


More information about the ffmpeg-devel mailing list