- emit rendererPosition((int) m_mltConsumer->position());
- mlt_image_format format = mlt_image_rgb24a;
- int width = 0;
- int height = 0;
- const uchar* image = frame.get_image(format, width, height);
- QImage qimage(width, height, QImage::Format_ARGB32_Premultiplied);
- memcpy(qimage.scanLine(0), image, width * height * 4);
- emit showImageSignal(qimage);
- if (analyseAudio) showAudio(frame);
- if (sendFrameForAnalysis && frame.get_frame()->convert_image) {
- emit frameUpdated(qimage.rgbSwapped());
+ int currentPos = m_mltConsumer->position();
+ if (currentPos == requestedSeekPosition) requestedSeekPosition = SEEK_INACTIVE;
+ emit rendererPosition(currentPos);
+ if (frame->is_valid()) {
+ mlt_image_format format = mlt_image_rgb24a;
+ int width = 0;
+ int height = 0;
+ const uchar* image = frame->get_image(format, width, height);
+ QImage qimage(width, height, QImage::Format_ARGB32_Premultiplied);
+ memcpy(qimage.scanLine(0), image, width * height * 4);
+ if (analyseAudio) showAudio(*frame);
+ delete frame;
+ emit showImageSignal(qimage);
+ if (sendFrameForAnalysis) {
+ emit frameUpdated(qimage.rgbSwapped());
+ }
+ } else delete frame;
+ showFrameSemaphore.release();
+ emit checkSeeking();
+}
+
+void Render::slotCheckSeeking()
+{
+ if (requestedSeekPosition != SEEK_INACTIVE) {
+ m_mltProducer->seek(requestedSeekPosition);
+ if (m_paused) {
+ refresh();
+ }
+ requestedSeekPosition = SEEK_INACTIVE;