<div dir="auto"><div><br></div><div dir="auto"><div class="gmail_extra" dir="auto"><br><div class="gmail_quote">On Jul 30, 2017 5:01 PM, "venkatesh iyengar" <<a href="mailto:venkatesh_mk-at-yahoo.com@ffmpeg.org">venkatesh_mk-at-yahoo.com@ffmpeg.org</a>> wrote:<br type="attribution"><blockquote class="quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="color:#000;background-color:#fff;font-family:Helvetica Neue,Helvetica,Arial,Lucida Grande,sans-serif;font-size:13px"><div id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_7653">Hello,</div><div id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_7653" dir="ltr">  From one week I am trying to convert MP4 to JPEG going thru different forums for examples, so far no success. Can you please share the link where you have seen it working successfully or you had it working on your projects using the libav shipped with FFMPEG 3.3.2 for windows shared/dev distribution. I am stuck right now and thumbnail extraction is important for of our project. I also tried the example that was part of the package, it generates pgm files, but I cannot convert it to any other viewable image formats. Please help.</div><div id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_7653" dir="ltr"><br></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12907">/*</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12908"> * Copyright (c) 2001 Fabrice Bellard</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12909"> *</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12910"> * Permission is hereby granted, free of charge, to any person obtaining a copy</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12911"> * of this software and associated documentation files (the "Software"), to deal</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12912"> * in the Software without restriction, including without limitation the rights</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12913"> * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12914"> * copies of the Software, and to permit persons to whom the Software is</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12915"> * furnished to do so, subject to the following conditions:</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12916"> *</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12917"> * The above copyright notice and this permission notice shall be included in</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12918"> * all copies or substantial portions of the Software.</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12919"> *</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12920"> * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12921"> * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12922"> * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12923"> * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12924"> * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12925"> * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12926"> * THE SOFTWARE.</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12927"> */</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12928"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12929"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12930">/**</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12931"> * @file</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12932"> * video decoding with libavcodec API example</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12933"> *</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12934"> * @example decode_video.c</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12935"> */</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12936"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12937"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12938">#include <stdio.h></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12939">#include <stdlib.h></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12940">#include <string.h></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12941"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12942"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12943">#include <libavcodec/avcodec.h></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12944"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12945"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12946">#define INBUF_SIZE 4096</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12947"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12948"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12949">static void pgm_save(unsigned char *buf, int wrap, int xsize, int ysize,</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12950">                     char *filename)</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12951">{</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12952">    FILE *f;</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12953">    int i;</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12954"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12955"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12956">    f = fopen(filename,"w");</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12957">    fprintf(f, "P5\n%d %d\n%d\n", xsize, ysize, 255);</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12958">    for (i = 0; i < ysize; i++)</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12959">        fwrite(buf + i * wrap, 1, xsize, f);</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12960">    fclose(f);</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12961">}</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12962"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12963"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12964">static int decode_write_frame(const char *outfilename, AVCodecContext *avctx,</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12965">                              AVFrame *frame, int *frame_count, AVPacket *pkt, int last)</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12966">{</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12967">    int len, got_frame;</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12968">    char buf[1024];</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12969"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12970"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12971">    len = avcodec_decode_video2(avctx, frame, &got_frame, pkt);</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12972">    if (len < 0) {</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12973">        fprintf(stderr, "Error while decoding frame %d\n", *frame_count);</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12974">        return len;</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12975">    }</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12976">    if (got_frame) {</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12977">        printf("Saving %sframe %3d\n", last ? "last " : "", *frame_count);</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12978">        fflush(stdout);</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12979"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12980"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12981">        /* the picture is allocated by the decoder, no need to free it */</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12982">        snprintf(buf, sizeof(buf), "%s-%d", outfilename, *frame_count);</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12983">        pgm_save(frame->data[0], frame->linesize[0],</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12984">                 frame->width, frame->height, buf);</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12985">        (*frame_count)++;</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12986">    }</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12987">    if (pkt->data) {</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12988">        pkt->size -= len;</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12989">        pkt->data += len;</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12990">    }</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12991">    return 0;</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12992">}</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12993"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12994"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12995">int main(int argc, char **argv)</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12996">{</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12997">    const char *filename, *outfilename;</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12998">    const AVCodec *codec;</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_12999">    AVCodecContext *c= NULL;</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13000">    int frame_count;</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13001">    FILE *f;</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13002">    AVFrame *frame;</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13003">    uint8_t inbuf[INBUF_SIZE + AV_INPUT_BUFFER_PADDING_SIZE];</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13004">    AVPacket avpkt;</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13005"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13006"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13007">    if (argc <= 2) {</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13008">        fprintf(stderr, "Usage: %s <input file> <output file>\n", argv[0]);</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13009">        exit(0);</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13010">    }</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13011">    filename    = argv[1];</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13012">    outfilename = argv[2];</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13013"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13014"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13015">    avcodec_register_all();</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13016"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13017"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13018">    av_init_packet(&avpkt);</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13019"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13020"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13021">    /* set end of buffer to 0 (this ensures that no overreading happens for damaged MPEG streams) */</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13022">    memset(inbuf + INBUF_SIZE, 0, AV_INPUT_BUFFER_PADDING_SIZE);</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13023"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13024"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13025">    /* find the MPEG-1 video decoder */</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13026">    codec = avcodec_find_decoder(AV_CODEC_<wbr>ID_MPEG1VIDEO);</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13027">    if (!codec) {</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13028">        fprintf(stderr, "Codec not found\n");</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13029">        exit(1);</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13030">    }</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13031"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13032"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13033">    c = avcodec_alloc_context3(codec);</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13034">    if (!c) {</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13035">        fprintf(stderr, "Could not allocate video codec context\n");</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13036">        exit(1);</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13037">    }</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13038"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13039"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13040">    if (codec->capabilities & AV_CODEC_CAP_TRUNCATED)</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13041">        c->flags |= AV_CODEC_FLAG_TRUNCATED; // we do not send complete frames</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13042"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13043"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13044">    /* For some codecs, such as msmpeg4 and mpeg4, width and height</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13045">       MUST be initialized there because this information is not</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13046">       available in the bitstream. */</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13047"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13048"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13049">    /* open it */</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13050">    if (avcodec_open2(c, codec, NULL) < 0) {</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13051">        fprintf(stderr, "Could not open codec\n");</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13052">        exit(1);</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13053">    }</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13054"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13055"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13056">    f = fopen(filename, "rb");</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13057">    if (!f) {</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13058">        fprintf(stderr, "Could not open %s\n", filename);</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13059">        exit(1);</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13060">    }</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13061"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13062"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13063">    frame = av_frame_alloc();</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13064">    if (!frame) {</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13065">        fprintf(stderr, "Could not allocate video frame\n");</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13066">        exit(1);</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13067">    }</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13068"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13069"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13070">    frame_count = 0;</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13071">    for (;;) {</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13072">        avpkt.size = fread(inbuf, 1, INBUF_SIZE, f);</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13073">        if (avpkt.size == 0)</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13074">            break;</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13075"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13076"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13077">        /* NOTE1: some codecs are stream based (mpegvideo, mpegaudio)</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13078">           and this is the only method to use them because you cannot</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13079">           know the compressed data size before analysing it.</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13080"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13081"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13082">           BUT some other codecs (msmpeg4, mpeg4) are inherently frame</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13083">           based, so you must call them with all the data for one</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13084">           frame exactly. You must also initialize 'width' and</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13085">           'height' before initializing them. */</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13086"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13087"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13088">        /* NOTE2: some codecs allow the raw parameters (frame size,</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13089">           sample rate) to be changed at any frame. We handle this, so</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13090">           you should also take care of it */</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13091"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13092"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13093">        /* here, we use a stream based decoder (mpeg1video), so we</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13094">           feed decoder and see if it could decode a frame */</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13095">        avpkt.data = inbuf;</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13096">        while (avpkt.size > 0)</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13097">            if (decode_write_frame(<wbr>outfilename, c, frame, &frame_count, &avpkt, 0) < 0)</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13098">                exit(1);</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13099">    }</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13100"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13101"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13102">    /* Some codecs, such as MPEG, transmit the I- and P-frame with a</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13103">       latency of one frame. You must do the following to have a</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13104">       chance to get the last frame of the video. */</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13105">    avpkt.data = NULL;</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13106">    avpkt.size = 0;</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13107">    decode_write_frame(<wbr>outfilename, c, frame, &frame_count, &avpkt, 1);</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13108"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13109"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13110">    fclose(f);</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13111"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13112"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13113">    avcodec_free_context(&c);</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13114">    av_frame_free(&frame);</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13115"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13116"></div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13117">    return 0;</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13118">}</div><div dir="ltr" id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13119"><br id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_13120"></div><div id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_7653"><br></div><div id="m_7157096755065718628yui_3_16_0_ym19_1_1501458136815_7653"><br></div></div></div><br>______________________________<wbr>_________________<br>
Libav-user mailing list<br>
<a href="mailto:Libav-user@ffmpeg.org">Libav-user@ffmpeg.org</a><br>
<a href="http://ffmpeg.org/mailman/listinfo/libav-user" rel="noreferrer" target="_blank">http://ffmpeg.org/mailman/<wbr>listinfo/libav-user</a><br>
<br></blockquote></div>hello, </div><div class="gmail_extra" dir="auto"><br></div><div class="gmail_extra" dir="auto">open cv is super easy to use. they have eazy conversion macros from pixels to mats and then jpg or png.. whatever</div><div class="gmail_extra" dir="auto"><br></div><div class="gmail_extra" dir="auto"><br></div><div class="gmail_extra" dir="auto">have fun!</div><div class="gmail_extra" dir="auto"><br></div><div class="gmail_extra" dir="auto"><br></div></div></div>