[FFmpeg-trac] #7152(undetermined:new): avformat_find_stream_info() doesn't work as expected
FFmpeg
trac at avcodec.org
Fri Apr 20 23:34:45 EEST 2018
#7152: avformat_find_stream_info() doesn't work as expected
-------------------------------------+-------------------------------------
Reporter: whs | Type: defect
Status: new | Priority: normal
Component: | Version:
undetermined | unspecified
Keywords: | Blocked By:
Blocking: | Reproduced by developer: 0
Analyzed by developer: 0 |
-------------------------------------+-------------------------------------
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 at 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
--
Ticket URL: <https://trac.ffmpeg.org/ticket/7152>
FFmpeg <https://ffmpeg.org>
FFmpeg issue tracker
More information about the FFmpeg-trac
mailing list