Can noone help  me on this???please..Sorry for spamming but I really need it
for my project.

On Thu, Feb 24, 2011 at 4:17 PM, John Doe <[email protected]> wrote:

> Hi,
>
> I also tried using the avcodec_decode_video2 function for decoding(taken
> fom api-exaple.c) and encountered the following errors for wmv and mp4:
>
> MP4
>
> Stream info retrieval success
> Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'Vid2.mp4':
>   Metadata:
>     major_brand     : FACE
>     minor_version   : 1337
>     compatible_brands: isomavc1FACE
>   Duration: 00:04:15.60, start: 0.000000, bitrate: 391 kb/s
>     Stream #0.0(und): Video: h264, yuv420p, 352x262 [PAR 151:152 DAR
> 3322:2489], 295 kb/s, PAR 349:352 DAR 349:262, 25 fps, 25 tbr, 25k tbn, 50
> tbc
>     Stream #0.1(und): Audio: aac, 44100 Hz, stereo, s16, 93 kb/s
> Video Stream found
> [h264 @ 0x8796480]AVC: nal size 1836019574
> [h264 @ 0x8796480]no frame!
> Error while decoding frame
>
> WMV
> [wmv3 @ 0x80ac9b0]Extra data: 8 bits left, value: 0
>
> Stream info retrieval success
> Input #0, asf, from 'Vid1.wmv':
>   Metadata:
>     title           :
>     author          :
>     copyright       :
>     comment         :
>     WMFSDKVersion   : 12.0.7600.16385
>     WMFSDKNeeded    : 0.0.0.0000
>     IsVBR           : 1
>     VBR Peak        : 116
>     Buffer Average  : 521
>   Duration: 00:24:42.26, start: 5.000000, bitrate: 6084 kb/s
>     Stream #0.0: Audio: wmav2, 44100 Hz, 2 channels, s16, 235 kb/s
>     Stream #0.1: Video: wmv3, yuv420p, 1440x1080, 29.97 tbr, 1k tbn, 1k tbc
> Video Stream found
> [wmv3 @ 0x80ac9b0]Extra data: 8 bits left, value: 0
> [wmv3 @ 0x80ac9b0]warning: first frame is no keyframe
> [wmv3 @ 0x80ac9b0]Bits overconsumption: 32774 > 32768 at 50x41
> [wmv3 @ 0x80ac9b0]concealing 2379 DC, 2379 AC, 2379 MV errors
> saving frame
> Error while decoding frame
>
> The code i used is given below:
>
> #include<stdio.h>
> #include<stdlib.h>
> #include "libavutil/fifo.h"
> #include "libavformat/avformat.h"
> #include "libavutil/avutil.h"
> #include "libavfilter/avfilter.h"
> #include "libavcodec/avcodec.h"
> #include<sys/stat.h>
>
> #define INBUF_SIZE 4096
> #define AUDIO_INBUF_SIZE 20480
> #define AUDIO_REFILL_THRESH 4096
>
>
> int main(int argc, char *argv[])
> {
>     av_register_all();
>
>     AVFormatContext             *pFormatCtx;
>     AVCodecContext                 *pCodecCtx;
>     AVCodec                     *pCodec;
>     AVPacket                    pkt;
>       AVFrame                     *picture;
>     AVStream                    *instream;
>     uint8_t inbuf[INBUF_SIZE + FF_INPUT_BUFFER_PADDING_SIZE];
>     char buf[1024];
>     FILE *f;
>
>
>     //Open file / Stream
>     if(av_open_input_file(&pFormatCtx, argv[1], NULL, 0, NULL)!=0)
>     {
>         printf("Stream open failed\n");
>         return -1;
>     }
>     //Retrieve stream info
>     if(av_find_stream_info(pFormatCtx)<0)
>     {
>         printf("Stream info retrieval failed\n");
>         return -1;
>     }
>
>     int i = 0,error,frameFinished,len;
>
>     printf("Stream info retrieval success\n");
>     dump_format(pFormatCtx,0,argv[1],0);
>     int videoStream=-1;
>     for(i=0; i<pFormatCtx->nb_streams; i++)
>     {
>         instream = pFormatCtx->streams [i];
>         if(pFormatCtx->streams[i]->codec->codec_type==CODEC_TYPE_VIDEO)
>         {
>             pCodecCtx = pFormatCtx->streams[i]->codec;
>             videoStream=i;
>
> pCodec=avcodec_find_decoder(pFormatCtx->streams[i]->codec->codec_id);
>             if(pCodec==NULL)
>             {
>                 printf("Unsupported codec!\n");
>                 return -1; // Codec not found
>             }
>             break;
>         }
>     }
>     if(videoStream==-1)
>     {
>         printf(" Video Stream Absent\n");
>         return -1; // Didn't find a video stream
>     }
>     printf("Video Stream found\n");
>
>     // Open codec
>     if(avcodec_open(instream->codec, pCodec)<0)
>     {
>         printf("Codec open failed\n");
>         return -1; // Could not open codec
>     }
>
>
>       //Allocate video frame
>       picture=avcodec_alloc_frame();
>     av_init_packet(&pkt);
>
>     f = fopen(argv[1], "rb");
>     if (!f) {
>         fprintf(stderr, "could not open %s\n", argv[1]);
>         exit(1);
>     }
>     for(;;) {
>         pkt.size = fread(inbuf, 1, INBUF_SIZE, f);
>         if (pkt.size == 0)
>             break;
>         pkt.data = inbuf;
>         while (pkt.size > 0) {
>             len = avcodec_decode_video2(instream->codec, picture,
> &frameFinished, &pkt);
>             if (len < 0) {
>                 fprintf(stderr, "Error while decoding frame\n");
>                 exit(1);
>             }
>             if (frameFinished) {
>                 printf("saving frame\n");
>                 fflush(stdout);
>             }
>             pkt.size -= len;
>             pkt.data += len;
>         }
>     }
> }
>
> Kindly let me know what I am doing wrong here.
>
>
>
> On Thu, Feb 24, 2011 at 3:13 PM, John Doe <[email protected]>wrote:
>
>> Hi,
>>
>> I have written a simple program based on the api-example.c file in ffmpeg
>> and drangers tutorial to capture video frames from various video files. I am
>> facing different issues while decoding various file formats. I am new to
>> ffmpeg. I have gone through drangers tutorial and api-example.c in
>> libavcodec. But I am unable to find a reason for this peculiar behaviour.
>> Kindly let me knwo what i am to do here.
>>
>> In case of wmv, it captures two frames and then returns and error in
>> decoding.
>> This is the log i get after running the program
>>
>> [wmv3 @ 0x86739b0]Extra data: 8 bits left, value: 0
>> Stream info retrieval success
>> Input #0, asf, from 'Vid1.wmv':
>>   Metadata:
>>     title           :
>>     author          :
>>     copyright       :
>>     comment         :
>>     WMFSDKVersion   : 12.0.7600.16385
>>     WMFSDKNeeded    : 0.0.0.0000
>>     IsVBR           : 1
>>     VBR Peak        : 116
>>     Buffer Average  : 521
>>   Duration: 00:24:42.26, start: 5.000000, bitrate: 6084 kb/s
>>     Stream #0.0: Audio: wmav2, 44100 Hz, 2 channels, s16, 235 kb/s
>>     Stream #0.1: Video: wmv3, yuv420p, 1440x1080, 29.97 tbr, 1k tbn, 1k
>> tbc
>> Video Stream found
>> [wmv3 @ 0x86739b0]Extra data: 8 bits left, value: 0
>> Start transcoding
>> Reading from video Stream with packet size : 50810
>> Frame Captured
>> Reading from video Stream with packet size : 11889
>> Error in decoding
>>
>> In case of an mp4 file , av_read_frame is failing altogether.This is the
>> error log:
>> Note:  the x264 library has been comppiled and ffmpeg has been configured
>> with x264 library.
>>
>>
>> Stream info retrieval success
>> Input #0, mov,mp4,m4a,3gp,3g2,mj2, from 'Vid2.mp4':
>>   Metadata:
>>     major_brand     : FACE
>>     minor_version   : 1337
>>     compatible_brands: isomavc1FACE
>>   Duration: 00:04:15.60, start: 0.000000, bitrate: 391 kb/s
>>     Stream #0.0(und): Video: h264, yuv420p, 352x262 [PAR 151:152 DAR
>> 3322:2489], 295 kb/s, PAR 349:352 DAR 349:262, 25 fps, 25 tbr, 25k tbn, 50
>> tbc
>>     Stream #0.1(und): Audio: aac, 44100 Hz, stereo, s16, 93 kb/s
>> Video Stream found
>> Start transcoding
>> Stream over
>>
>> This code however captures and decodes all the frames from an MPEG-TS
>> stream that is streamed using vlc player when the url of the stream is given
>> an input argument.
>>
>> This is my code: Can you tell me what I am missing?
>> #include<stdio.h>
>> #include<stdlib.h>
>> #include "libavutil/fifo.h"
>> #include "libavformat/avformat.h"
>> #include "libavutil/avutil.h"
>> #include "libavfilter/avfilter.h"
>> #include "libavcodec/avcodec.h"
>> #include<sys/stat.h>
>>
>>
>> int main(int argc, char *argv[])
>> {
>>     av_register_all();
>>
>>     AVFormatContext             *pFormatCtx;
>>     AVCodecContext                 *pCodecCtx;
>>     AVCodec                     *pCodec;
>>     AVPacket                    pkt;
>>       AVFrame                     *pFrame;
>>     AVStream                    *instream;
>>
>>     //Open file / Stream
>>     if(av_open_input_file(&pFormatCtx, argv[1], NULL, 0, NULL)!=0)
>>     {
>>         printf("Stream open failed\n");
>>         return -1;
>>     }
>>     //Retrieve stream info
>>     if(av_find_stream_info(pFormatCtx)<0)
>>     {
>>         printf("Stream info retrieval failed\n");
>>         return -1;
>>     }
>>
>>     int i = 0,error,frameFinished;
>>     printf("Stream info retrieval success\n");
>>     dump_format(pFormatCtx,0,argv[1],0);
>>     int videoStream=-1;
>>     for(i=0; i<pFormatCtx->nb_streams; i++)
>>     {
>>         instream = pFormatCtx->streams [i];
>>         if(pFormatCtx->streams[i]->codec->codec_type==CODEC_TYPE_VIDEO)
>>         {
>>             pCodecCtx = pFormatCtx->streams[i]->codec;
>>             videoStream=i;
>>
>> pCodec=avcodec_find_decoder(pFormatCtx->streams[i]->codec->codec_id);
>>             if(pCodec==NULL)
>>             {
>>                 printf("Unsupported codec!\n");
>>                 return -1; // Codec not found
>>             }
>>             break;
>>         }
>>     }
>>     if(videoStream==-1)
>>     {
>>         printf(" Video Stream Absent\n");
>>         return -1; // Didn't find a video stream
>>     }
>>     printf("Video Stream found\n");
>>
>>     // Open codec
>>     if(avcodec_open(instream->codec, pCodec)<0)
>>     {
>>         printf("Codec open failed\n");
>>         return -1; // Could not open codec
>>     }
>>
>>
>>       //Allocate video frame
>>       pFrame=avcodec_alloc_frame();
>>     av_init_packet(&pkt);
>>
>>     printf("Start transcoding\n");
>>     while(av_read_frame (pFormatCtx, &pkt)>=0)
>>     {
>>         if(pkt.stream_index = videoStream)
>>         {
>>             printf("Reading from video Stream with packet size :
>> %d\n",pkt.size);
>>               error = avcodec_decode_video(pCodecCtx, pFrame,
>> &frameFinished, pkt.data, pkt.size);
>>
>>             if(error < 0)
>>             {
>>                 printf("Error in decoding\n");
>>                 return -1;
>>             }
>>             if(frameFinished)
>>             {
>>                 printf("Frame Captured\n");
>>
>>             }
>>             av_init_packet(&pkt);
>>         }
>>     }
>>     printf("Stream over\n");
>> }
>>
>>
>>
>
_______________________________________________
libav-user mailing list
[email protected]
https://lists.mplayerhq.hu/mailman/listinfo/libav-user

Reply via email to