relative_seek_ms += cmd.relative_seek_ms;
relative_seek_frames += cmd.relative_seek_frames;
} else if (cmd.command == QueuedCommand::SEEK_ABSOLUTE) {
- base_pts = cmd.seek_ms;
+ base_pts = av_rescale_q(cmd.seek_ms, AVRational{ 1, 1000 }, video_timebase);
relative_seek_ms = 0;
relative_seek_frames = 0;
}
matmul3x3(tmp2, translation_matrix, zoom_matrix);
fixup_zoom_matrix();
+ update();
}
void VideoWidget::mousePressEvent(QMouseEvent *e)
last_drag_x = e->position().x();
last_drag_y = e->position().y();
+
+ update();
}
// Normalize the matrix so that we never get skew or similar,
AVFrameWithDeleter video_avframe = av_frame_alloc_unique();
bool eof = false;
do {
- AVPacket pkt;
+ AVPacket *pkt = av_packet_alloc();
unique_ptr<AVPacket, decltype(av_packet_unref)*> pkt_cleanup(
- &pkt, av_packet_unref);
- av_init_packet(&pkt);
- pkt.data = nullptr;
- pkt.size = 0;
- if (av_read_frame(format_ctx, &pkt) == 0) {
- if (pkt.stream_index == video_stream_index) {
- if (avcodec_send_packet(video_codec_ctx, &pkt) < 0) {
+ pkt, av_packet_unref);
+ pkt->data = nullptr;
+ pkt->size = 0;
+ if (av_read_frame(format_ctx, pkt) == 0) {
+ if (pkt->stream_index == video_stream_index) {
+ if (avcodec_send_packet(video_codec_ctx, pkt) < 0) {
fprintf(stderr, "%s: Cannot send packet to video codec.\n", pathname.c_str());
*error = true;
return AVFrameWithDeleter(nullptr);