Opened 7 years ago
#7152 new defect
avformat_find_stream_info() doesn't work as expected
Reported by: | whs | Owned by: | |
---|---|---|---|
Priority: | normal | Component: | undetermined |
Version: | unspecified | Keywords: | |
Cc: | Blocked By: | ||
Blocking: | Reproduced by developer: | no | |
Analyzed by developer: | no |
Description
I downloaded the snapshot of ffmpeg.
I compiled and installed it.
Then, I download the example on http://dranger.com/ffmpeg/tutorial01.html
With some change the code as follow
// tutorial01.c // Code based on a tutorial by Martin Bohme (boehme@inb.uni-luebeckREMOVETHIS.de) // Tested on Gentoo, CVS version 5/01/07 compiled with GCC 4.1.1 // With updates from https://github.com/chelyaev/ffmpeg-tutorial // Updates tested on: // LAVC 54.59.100, LAVF 54.29.104, LSWS 2.1.101 // on GCC 4.7.2 in Debian February 2015 // A small sample program that shows how to use libavformat and libavcodec to // read video from a file. // // Use // // gcc -o tutorial01 tutorial01.c -lavformat -lavcodec -lswscale -lz // // to build (assuming libavformat and libavcodec are correctly installed // your system). // // Run using // // tutorial01 myvideofile.mpg // // to write the first five frames from "myvideofile.mpg" to disk in PPM // format. #include <libavcodec/avcodec.h> #include <libavformat/avformat.h> #include <libswscale/swscale.h> #include <stdio.h> // compatibility with newer API #if LIBAVCODEC_VERSION_INT < AV_VERSION_INT(55,28,1) #define av_frame_alloc avcodec_alloc_frame #define av_frame_free avcodec_free_frame #endif void SaveFrame(AVFrame *pFrame, int width, int height, int iFrame) { FILE *pFile; char szFilename[32]; int y; // Open file sprintf(szFilename, "frame%d.ppm", iFrame); pFile=fopen(szFilename, "wb"); if(pFile==NULL) return; // Write header fprintf(pFile, "P6\n%d %d\n255\n", width, height); // Write pixel data for(y=0; y<height; y++) fwrite(pFrame->data[0]+y*pFrame->linesize[0], 1, width*3, pFile); // Close file fclose(pFile); } int main(int argc, char *argv[]) { // Initalizing these to NULL prevents segfaults! AVFormatContext *pFormatCtx = NULL; int i, videoStream; AVCodecContext *pCodecCtxOrig = NULL; AVCodecContext *pCodecCtx = NULL; AVCodec *pCodec = NULL; AVFrame *pFrame = NULL; AVFrame *pFrameRGB = NULL; AVPacket packet; int frameFinished; int numBytes; uint8_t *buffer = NULL; struct SwsContext *sws_ctx = NULL; if(argc < 2) { printf("Please provide a movie file\n"); return -1; } // Register all formats and codecs av_register_all(); // Open video file if(avformat_open_input(&pFormatCtx, argv[1], NULL, NULL)!=0) return -1; // Couldn't open file // Retrieve stream information if(avformat_find_stream_info(pFormatCtx, NULL)<0) return -1; // Couldn't find stream information // Dump information about file onto standard error av_dump_format(pFormatCtx, 0, argv[1], 0); // Find the first video stream videoStream=-1; for(i=0; i<pFormatCtx->nb_streams; i++) if(pFormatCtx->streams[i]->codec->codec_type==AVMEDIA_TYPE_VIDEO) { videoStream=i; break; } if(videoStream==-1) return -1; // Didn't find a video stream // Get a pointer to the codec context for the video stream pCodecCtxOrig=pFormatCtx->streams[videoStream]->codecpar; // Find the decoder for the video stream pCodec=avcodec_find_decoder(pCodecCtxOrig->codec_id); if(pCodec==NULL) { fprintf(stderr, "Unsupported codec!\n"); return -1; // Codec not found } // Copy context pCodecCtx = avcodec_alloc_context3(pCodec); if(avcodec_copy_context(pCodecCtx, pCodecCtxOrig) != 0) { fprintf(stderr, "Couldn't copy codec context"); return -1; // Error copying codec context } // Open codec if(avcodec_open2(pCodecCtx, pCodec, NULL)<0) return -1; // Could not open codec // Allocate video frame pFrame=av_frame_alloc(); // Allocate an AVFrame structure pFrameRGB=av_frame_alloc(); if(pFrameRGB==NULL) return -1; // Determine required buffer size and allocate buffer numBytes=avpicture_get_size(AV_PIX_FMT_RGB24, pCodecCtx->width, pCodecCtx->height); buffer=(uint8_t *)av_malloc(numBytes*sizeof(uint8_t)); // Assign appropriate parts of buffer to image planes in pFrameRGB // Note that pFrameRGB is an AVFrame, but AVFrame is a superset // of AVPicture avpicture_fill((AVPicture *)pFrameRGB, buffer, AV_PIX_FMT_RGB24, pCodecCtx->width, pCodecCtx->height); // initialize SWS context for software scaling sws_ctx = sws_getContext(pCodecCtx->width, pCodecCtx->height, pCodecCtx->pix_fmt, pCodecCtx->width, pCodecCtx->height, AV_PIX_FMT_RGB24, SWS_BILINEAR, NULL, NULL, NULL ); // Read frames and save first five frames to disk i=0; while(av_read_frame(pFormatCtx, &packet)>=0) { // Is this a packet from the video stream? if(packet.stream_index==videoStream) { // Decode video frame avcodec_decode_video2(pCodecCtx, pFrame, &frameFinished, &packet); // Did we get a video frame? if(frameFinished) { // Convert the image from its native format to RGB sws_scale(sws_ctx, (uint8_t const * const *)pFrame->data, pFrame->linesize, 0, pCodecCtx->height, pFrameRGB->data, pFrameRGB->linesize); // Save the frame to disk if(++i<=5) SaveFrame(pFrameRGB, pCodecCtx->width, pCodecCtx->height, i); } } // Free the packet that was allocated by av_read_frame av_free_packet(&packet); } // Free the RGB image av_free(buffer); av_frame_free(&pFrameRGB); // Free the YUV frame av_frame_free(&pFrame); // Close the codecs avcodec_close(pCodecCtx); avcodec_close(pCodecCtxOrig); // Close the video file avformat_close_input(&pFormatCtx); return 0; }
I then compile it with
gcc tutorial01.c -lavformat -lavcodec -lavutil -lswscale
When I run the
./a.out '/home/whs/Videos/The_Last_Jedi/The_Last_Jedi_t00.mkv'
I got the error
[matroska,webm @ 0xc0aaa0] Could not find codec parameters for stream 4 (Subtitle: hdmv_pgs_subtitle (pgssub)): unspecified size Consider increasing the value for the 'analyzeduration' and 'probesize' options [matroska,webm @ 0xc0aaa0] Could not find codec parameters for stream 5 (Subtitle: hdmv_pgs_subtitle (pgssub)): unspecified size Consider increasing the value for the 'analyzeduration' and 'probesize' options [matroska,webm @ 0xc0aaa0] Could not find codec parameters for stream 6 (Subtitle: hdmv_pgs_subtitle (pgssub)): unspecified size Consider increasing the value for the 'analyzeduration' and 'probesize' options [matroska,webm @ 0xc0aaa0] Could not find codec parameters for stream 7 (Subtitle: hdmv_pgs_subtitle (pgssub)): unspecified size Consider increasing the value for the 'analyzeduration' and 'probesize' options [matroska,webm @ 0xc0aaa0] Could not find codec parameters for stream 8 (Subtitle: hdmv_pgs_subtitle (pgssub)): unspecified size Consider increasing the value for the 'analyzeduration' and 'probesize' options [matroska,webm @ 0xc0aaa0] Could not find codec parameters for stream 9 (Subtitle: hdmv_pgs_subtitle (pgssub)): unspecified size Consider increasing the value for the 'analyzeduration' and 'probesize' options Input #0, matroska,webm, from '/home/whs/Videos/The_Last_Jedi/The_Last_Jedi_t00.mkv': Metadata: title : The Last Jedi encoder : libmakemkv v1.12.0 (1.3.5/1.4.7) x86_64-linux-gnu creation_time : 2018-04-19 12:36:00 Duration: 02:31:51.60, start: 0.000000, bitrate: 33756 kb/s Chapter #0:0: start 0.000000, end 18.643625 Metadata: title : Chapter 01 Chapter #0:1: start 18.643625, end 105.730625 Metadata: title : Chapter 02 Chapter #0:2: start 105.730625, end 191.816625 Metadata: title : Chapter 03 Chapter #0:3: start 191.816625, end 463.296167 Metadata: title : Chapter 04 Chapter #0:4: start 463.296167, end 768.434333 Metadata: title : Chapter 05 Chapter #0:5: start 768.434333, end 824.573750 Metadata: title : Chapter 06 Chapter #0:6: start 824.573750, end 989.279958 Metadata: title : Chapter 07 Chapter #0:7: start 989.279958, end 1199.281417 Metadata: title : Chapter 08 Chapter #0:8: start 1199.281417, end 1371.370000 Metadata: title : Chapter 09 Chapter #0:9: start 1371.370000, end 1564.980083 Metadata: title : Chapter 10 Chapter #0:10: start 1564.980083, end 1642.515875 Metadata: title : Chapter 11 Chapter #0:11: start 1642.515875, end 1884.757875 Metadata: title : Chapter 12 Chapter #0:12: start 1884.757875, end 1974.681042 Metadata: title : Chapter 13 Chapter #0:13: start 1974.681042, end 2127.667208 Metadata: title : Chapter 14 Chapter #0:14: start 2127.667208, end 2291.497542 Metadata: title : Chapter 15 Chapter #0:15: start 2291.497542, end 2513.427583 Metadata: title : Chapter 16 Chapter #0:16: start 2513.427583, end 2669.541875 Metadata: title : Chapter 17 Chapter #0:17: start 2669.541875, end 2811.475333 Metadata: title : Chapter 18 Chapter #0:18: start 2811.475333, end 3101.932167 Metadata: title : Chapter 19 Chapter #0:19: start 3101.932167, end 3230.060167 Metadata: title : Chapter 20 Chapter #0:20: start 3230.060167, end 3341.504833 Metadata: title : Chapter 21 Chapter #0:21: start 3341.504833, end 3459.581125 Metadata: title : Chapter 22 Chapter #0:22: start 3459.581125, end 3556.636417 Metadata: title : Chapter 23 Chapter #0:23: start 3556.636417, end 3725.847125 Metadata: title : Chapter 24 Chapter #0:24: start 3725.847125, end 3787.700583 Metadata: title : Chapter 25 Chapter #0:25: start 3787.700583, end 3941.729458 Metadata: title : Chapter 26 Chapter #0:26: start 3941.729458, end 4023.477792 Metadata: title : Chapter 27 Chapter #0:27: start 4023.477792, end 4225.721500 Metadata: title : Chapter 28 Chapter #0:28: start 4225.721500, end 4410.322583 Metadata: title : Chapter 29 Chapter #0:29: start 4410.322583, end 4663.450458 Metadata: title : Chapter 30 Chapter #0:30: start 4663.450458, end 4853.056542 Metadata: title : Chapter 31 Chapter #0:31: start 4853.056542, end 5057.969583 Metadata: title : Chapter 32 Chapter #0:32: start 5057.969583, end 5183.219708 Metadata: title : Chapter 33 Chapter #0:33: start 5183.219708, end 5279.524250 Metadata: title : Chapter 34 Chapter #0:34: start 5279.524250, end 5449.360583 Metadata: title : Chapter 35 Chapter #0:35: start 5449.360583, end 5574.569000 Metadata: title : Chapter 36 Chapter #0:36: start 5574.569000, end 5753.706292 Metadata: title : Chapter 37 Chapter #0:37: start 5753.706292, end 5830.616458 Metadata: title : Chapter 38 Chapter #0:38: start 5830.616458, end 5952.863583 Metadata: title : Chapter 39 Chapter #0:39: start 5952.863583, end 6127.663208 Metadata: title : Chapter 40 Chapter #0:40: start 6127.663208, end 6303.714083 Metadata: title : Chapter 41 Chapter #0:41: start 6303.714083, end 6575.694125 Metadata: title : Chapter 42 Chapter #0:42: start 6575.694125, end 6740.608875 Metadata: title : Chapter 43 Chapter #0:43: start 6740.608875, end 6964.749458 Metadata: title : Chapter 44 Chapter #0:44: start 6964.749458, end 7132.083292 Metadata: title : Chapter 45 Chapter #0:45: start 7132.083292, end 7391.133750 Metadata: title : Chapter 46 Chapter #0:46: start 7391.133750, end 7599.758833 Metadata: title : Chapter 47 Chapter #0:47: start 7599.758833, end 7903.604042 Metadata: title : Chapter 48 Chapter #0:48: start 7903.604042, end 8112.104000 Metadata: title : Chapter 49 Chapter #0:49: start 8112.104000, end 8416.699958 Metadata: title : Chapter 50 Chapter #0:50: start 8416.699958, end 8619.694417 Metadata: title : Chapter 51 Chapter #0:51: start 8619.694417, end 9111.602500 Metadata: title : Chapter 52 Stream #0:0(eng): Video: h264 (High), yuv420p, 1920x1080 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 47.95 tbc Metadata: BPS-eng : 30705362 DURATION-eng : 02:31:51.602500000 NUMBER_OF_FRAMES-eng: 218460 NUMBER_OF_BYTES-eng: 34971880054 SOURCE_ID-eng : 001011 _STATISTICS_WRITING_APP-eng: MakeMKV v1.12.0 linux(x64-release) _STATISTICS_WRITING_DATE_UTC-eng: 2018-04-19 12:36:00 _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES SOURCE_ID Stream #0:1(eng): Audio: dts (DTS), 48000 Hz, 5.1(side), fltp, 1536 kb/s (default) Metadata: title : Surround 5.1 BPS-eng : 1509000 DURATION-eng : 02:31:51.616000000 NUMBER_OF_FRAMES-eng: 854214 NUMBER_OF_BYTES-eng: 1718678568 SOURCE_ID-eng : 001100 _STATISTICS_WRITING_APP-eng: MakeMKV v1.12.0 linux(x64-release) _STATISTICS_WRITING_DATE_UTC-eng: 2018-04-19 12:36:00 _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES SOURCE_ID Stream #0:2(fra): Audio: ac3, 48000 Hz, 5.1(side), fltp, 640 kb/s Metadata: title : Surround 5.1 BPS-eng : 640000 DURATION-eng : 02:31:51.616000000 NUMBER_OF_FRAMES-eng: 284738 NUMBER_OF_BYTES-eng: 728929280 SOURCE_ID-eng : 001102 _STATISTICS_WRITING_APP-eng: MakeMKV v1.12.0 linux(x64-release) _STATISTICS_WRITING_DATE_UTC-eng: 2018-04-19 12:36:00 _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES SOURCE_ID Stream #0:3(spa): Audio: ac3, 48000 Hz, 5.1(side), fltp, 640 kb/s Metadata: title : Surround 5.1 BPS-eng : 640000 DURATION-eng : 02:31:51.616000000 NUMBER_OF_FRAMES-eng: 284738 NUMBER_OF_BYTES-eng: 728929280 SOURCE_ID-eng : 001103 _STATISTICS_WRITING_APP-eng: MakeMKV v1.12.0 linux(x64-release) _STATISTICS_WRITING_DATE_UTC-eng: 2018-04-19 12:36:00 _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES SOURCE_ID Stream #0:4(eng): Subtitle: hdmv_pgs_subtitle Metadata: BPS-eng : 31027 DURATION-eng : 02:23:23.031937500 NUMBER_OF_FRAMES-eng: 3796 NUMBER_OF_BYTES-eng: 33366586 SOURCE_ID-eng : 001200 _STATISTICS_WRITING_APP-eng: MakeMKV v1.12.0 linux(x64-release) _STATISTICS_WRITING_DATE_UTC-eng: 2018-04-19 12:36:00 _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES SOURCE_ID Stream #0:5(fra): Subtitle: hdmv_pgs_subtitle Metadata: BPS-eng : 25846 DURATION-eng : 02:25:12.266062500 NUMBER_OF_FRAMES-eng: 3416 NUMBER_OF_BYTES-eng: 28148178 SOURCE_ID-eng : 001201 _STATISTICS_WRITING_APP-eng: MakeMKV v1.12.0 linux(x64-release) _STATISTICS_WRITING_DATE_UTC-eng: 2018-04-19 12:36:00 _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES SOURCE_ID Stream #0:6(spa): Subtitle: hdmv_pgs_subtitle Metadata: BPS-eng : 25710 DURATION-eng : 02:22:40.572854166 NUMBER_OF_FRAMES-eng: 3182 NUMBER_OF_BYTES-eng: 27511663 SOURCE_ID-eng : 001202 _STATISTICS_WRITING_APP-eng: MakeMKV v1.12.0 linux(x64-release) _STATISTICS_WRITING_DATE_UTC-eng: 2018-04-19 12:36:00 _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES SOURCE_ID Stream #0:7(eng): Subtitle: hdmv_pgs_subtitle Metadata: BPS-eng : 70591 DURATION-eng : 02:24:13.207062500 NUMBER_OF_FRAMES-eng: 4798 NUMBER_OF_BYTES-eng: 76355021 SOURCE_ID-eng : 001203 _STATISTICS_WRITING_APP-eng: MakeMKV v1.12.0 linux(x64-release) _STATISTICS_WRITING_DATE_UTC-eng: 2018-04-19 12:36:00 _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES SOURCE_ID Stream #0:8(fra): Subtitle: hdmv_pgs_subtitle Metadata: BPS-eng : 58091 DURATION-eng : 02:24:11.121645833 NUMBER_OF_FRAMES-eng: 4758 NUMBER_OF_BYTES-eng: 62819211 SOURCE_ID-eng : 001204 _STATISTICS_WRITING_APP-eng: MakeMKV v1.12.0 linux(x64-release) _STATISTICS_WRITING_DATE_UTC-eng: 2018-04-19 12:36:00 _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES SOURCE_ID Stream #0:9(spa): Subtitle: hdmv_pgs_subtitle Metadata: BPS-eng : 59683 DURATION-eng : 02:24:11.121645833 NUMBER_OF_FRAMES-eng: 4758 NUMBER_OF_BYTES-eng: 64541222 SOURCE_ID-eng : 001205 _STATISTICS_WRITING_APP-eng: MakeMKV v1.12.0 linux(x64-release) _STATISTICS_WRITING_DATE_UTC-eng: 2018-04-19 12:36:00 _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES SOURCE_ID Stream #0:10(fra): Subtitle: hdmv_pgs_subtitle, 1920x1080 Metadata: BPS-eng : 252 DURATION-eng : 02:25:22.401187500 NUMBER_OF_FRAMES-eng: 44 NUMBER_OF_BYTES-eng: 275272 SOURCE_ID-eng : 001206 _STATISTICS_WRITING_APP-eng: MakeMKV v1.12.0 linux(x64-release) _STATISTICS_WRITING_DATE_UTC-eng: 2018-04-19 12:36:00 _STATISTICS_TAGS-eng: BPS DURATION NUMBER_OF_FRAMES NUMBER_OF_BYTES SOURCE_ID Segmentation fault (core dumped)
It appear that the
pFormatCtx->streams[0]->codec->codec_id
equals to
0
and
pFormatCtx->streams[0]->codecpar
is
NULL
but according to the header file of libavformat
https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/avformat.h#L1002
avformat_find_stream_info()
should fill
AVCodecParameters *codecpar;
during demuxing
Note:
See TracTickets
for help on using tickets.