5#ifndef PONYPLAYER_PREVIEW_H
6#define PONYPLAYER_PREVIEW_H
11#include <libswscale/swscale.h>
17 int videoStreamIndex{-1};
18 AVStream *videoStream{};
26 if (
fmtCtx->streams[i]->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
27 videoStreamIndex =
static_cast<int>(i);
28 videoStream =
fmtCtx->streams[i];
30 pkt = av_packet_alloc();
34 qWarning() <<
"Previewer: can not find video stream";
39 if (pkt) av_packet_free(&pkt);
52 avcodec_flush_buffers(ctx->
codecCtx);
53 ret = av_seek_frame(
fmtCtx, -1,
54 static_cast<int64_t
>(pos * AV_TIME_BASE), AVSEEK_FLAG_BACKWARD);
56 qWarning() <<
"Previewer: av_seek_frame failed";
61 ret = av_read_frame(
fmtCtx, pkt);
63 qWarning() <<
"Previewer: reach eof, no available picture";
66 if (pkt->stream_index == videoStreamIndex) {
67 ret = avcodec_send_packet(ctx->
codecCtx, pkt);
73 double pts =
static_cast<double>(ctx->
frameBuf->pts) * av_q2d(videoStream->time_base);
81 return {frame,
true, pts};
85 if (ret == AVERROR(EAGAIN) || ret ==
ERROR_EOF);
Definition: decoders.hpp:105
AVFrame * frameBuf
Definition: decoders.hpp:110
AVCodecContext * codecCtx
Definition: decoders.hpp:109
Definition: dispatcher.hpp:81
AVFormatContext * fmtCtx
Definition: dispatcher.hpp:86
Definition: previewer.hpp:14
~Previewer()
Definition: previewer.hpp:37
VideoFrameRef previewRequest(qreal pos)
Definition: previewer.hpp:47
Previewer(const std::string &fn, QObject *parent)
Definition: previewer.hpp:24
PonyAudioFormat getAudioInputFormat() override
Definition: previewer.hpp:97
void setAudioOutputFormat(PonyAudioFormat format) override
Definition: previewer.hpp:99
void test_onWork() override
Definition: previewer.hpp:101
unsigned int StreamIndex
Definition: dispatcher.hpp:75
const int ERROR_EOF
Definition: helper.hpp:14
QString ffmpegErrToString(int err)
Definition: helper.hpp:21
#define INCLUDE_FFMPEG_END
Definition: ponyplayer.h:26
#define NOT_IMPLEMENT_YET
Definition: ponyplayer.h:39