Wollte ein kleines Tool schreiben, welches mir einfach die FrameTypen eines Videos ausgibt.
Da ich schon lange nichts mehr direkt mit libav gemacht habe, hab ich dann folgendes geschrieben:
Code
int count = 0;
AVPacket packet;
av_init_packet(&packet);
AVFrame *pFrame;
pFrame = avcodec_alloc_frame();
avcodec_get_frame_defaults(pFrame); // reset frame
int gotPicture = 0;
QString type;
int ret;
// output frame types for all frames
while (av_read_frame(m_formatContext, &packet) == 0) {
if (packet.stream_index != videoStreamIndex) { //only check the frame that belong to the current stream
av_free_packet(&packet);
continue;
}
// HERE avcodec_decode_video2 crashes
ret = avcodec_decode_video2(codecContext, pFrame, &gotPicture, &packet);
// never reached :(
if (ret < 0) {
ui.textBrowser->append(tr("Error decoding video,..."));
return;
}
// get frame type
if (gotPicture) {
count++;
type = frameTypeToString(pFrame->pict_type, pFrame->key_frame);
ui.textBrowser->append(tr("Frame %1, type: %2").arg(count).arg(type));
avcodec_get_frame_defaults(pFrame); // reset frame
}
// free&reset stuff
av_free_packet(&packet);
gotPicture = 0;
}
Alles anzeigen
mehr bei: http://pastebin.com/8KWmAwzk
Leider fliegt mir das Ganze bei:
ret = avcodec_decode_video2(codecContext, pFrame, &gotPicture, &packet);
immer um die Ohren, nur leider k.A. warum
-> sieht jemand den Fehler?
Cu Selur
Ps.: Ziemlich sicher es ist irgendwas doofes.