*Hello!**
**I have a code for getting text string at each video frame (intermediate testing)**
**but on frame 16 I got following messages:**
**
**[h264 @ 0x1c6d900] AVC: nal size 20971526**
**[h264 @ 0x1c6d900] no frame!**
**Error while decoding frame 16**
**
**ffmpeg info about video file is here:*
-------------------------------------------------------------------------
  Metadata:
    major_brand     : mp42
    minor_version   : 0
    compatible_brands: isommp42
  Duration: 00:04:19.32, start: 0.000000, bitrate: 3146 kb/s
Stream #0:0(und): Video: h264 (High) (avc1 / 0x31637661), yuv420p, 1280x720 [SAR 1:1 DAR 16:9], 2999 kb/s, 30 fps, 30 tbr, 30 tbn, 60 tbc (default)
    Metadata:
      handler_name    : VideoHandler
Stream #0:1(und): Audio: aac (mp4a / 0x6134706D), 44100 Hz, mono, fltp, 144 kb/s (default)
    Metadata:
      handler_name    : IsoMedia File Produced by Google, 5-11-2011
-------------------------------------------------------------------------

*part of code is here :*
--------------------------------------------------------------------------------------------------------------
    av_register_all();

    const char    *url = "video.mp4";
    AVFormatContext *s = NULL;
    int ret = avformat_open_input(&s, url, NULL, NULL);
    if (ret < 0)
        abort();

    AVPacket cur_packet;
    av_init_packet(&cur_packet);

    AVFrame *avf=av_frame_alloc();
    int got_picture;

    int len;
    int frame = 0;

    uint8_t inbuf[INBUF_SIZE + FF_INPUT_BUFFER_PADDING_SIZE];
    memset(inbuf + INBUF_SIZE, 0, FF_INPUT_BUFFER_PADDING_SIZE);
    FILE *f = fopen(url, "rb");

    AVCodec *codec;
    AVCodecContext *c= NULL;

    codec = avcodec_find_decoder(s->streams[0]->codec->codec_id);
    if (!codec) {
            fprintf(stderr, "codec not found\n");
            exit(1);
    }

    c=s->streams[0]->codec;
    s->streams[0]->codec->codec=codec;

    if(codec->capabilities & CODEC_CAP_TRUNCATED)
        c->flags|= CODEC_FLAG_TRUNCATED;

    if (avcodec_open2(c, codec, NULL) < 0) {
        fprintf(stderr, "could not open codec\n");
        exit(1);
    }

    for(;;) {
        av_read_frame(s, &cur_packet );


        if (cur_packet.size == 0)
             break;


        while (cur_packet.size > 0) {
            len = avcodec_decode_video2(c, avf, &got_picture,&cur_packet);

            if (len < 0) {
                fprintf(stderr, "Error while decoding frame %d\n", frame);
                exit(1);
            }
            if (got_picture) {
                printf("saving frame %3d\n", frame);

*/* I just want to get printf message for each frame due to testing purposes. */*

                frame++;
            }
            cur_packet.size -= len;
            cur_packet.data += len;
        }
    }

    fclose(f);
    avformat_close_input(&s);
-----------------------------------------------------------------------------------------------------------------------------------
_______________________________________________
libav-api mailing list
[email protected]
https://lists.libav.org/mailman/listinfo/libav-api

Reply via email to