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
