X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=src%2Fkthumb.cpp;h=e8b15d8d35706535888e7e49b340f9c5a05f5985;hb=d6f446ace7edcb56f94f21fa9df4a06061717441;hp=f78ada2cb2526130d2bb25b0134fb823a7ef4eee;hpb=697c31bbfce63be7ee071d64e1dbc2f86943d2a0;p=kdenlive diff --git a/src/kthumb.cpp b/src/kthumb.cpp index f78ada2c..e8b15d8d 100644 --- a/src/kthumb.cpp +++ b/src/kthumb.cpp @@ -88,11 +88,10 @@ void MyThread::run() m_producer.seek(z); Mlt::Frame *mlt_frame = m_producer.get_frame(); if (mlt_frame && mlt_frame->is_valid()) { - double m_framesPerSecond = mlt_producer_get_fps(m_producer.get_producer()); //mlt_frame->get_double( "fps" ); + double m_framesPerSecond = mlt_producer_get_fps(m_producer.get_producer()); int m_samples = mlt_sample_calculator(m_framesPerSecond, m_frequency, mlt_frame_get_position(mlt_frame->get_frame())); mlt_audio_format m_audioFormat = mlt_audio_pcm; - - qint16* m_pcm = mlt_frame->get_audio(m_audioFormat, m_frequency, m_channels, m_samples); + qint16* m_pcm = static_cast(mlt_frame->get_audio(m_audioFormat, m_frequency, m_channels, m_samples)); for (int c = 0; c < m_channels; c++) { QByteArray m_array; @@ -185,70 +184,18 @@ QPixmap KThumb::getImage(KUrl url, int width, int height) void KThumb::extractImage(int frame, int frame2) { // kDebug() << "//extract thumb: " << frame << ", " << frame2; - if (m_url.isEmpty() || !KdenliveSettings::videothumbnails() || m_producer == NULL) return; + if (!KdenliveSettings::videothumbnails() || m_producer == NULL) return; const int twidth = (int)(KdenliveSettings::trackheight() * m_dar); const int theight = KdenliveSettings::trackheight(); - if (m_producer->is_blank()) { - QPixmap pix(twidth, theight); - pix.fill(Qt::black); - if (frame != -1) emit thumbReady(frame, pix); - if (frame2 != -1) emit thumbReady(frame2, pix); - return; - } - Mlt::Frame *mltFrame; - mlt_image_format format = mlt_image_rgb24a; if (frame != -1) { - //videoThumbProducer.getThumb(frame); - m_producer->seek(frame); - mltFrame = m_producer->get_frame(); - if (frame2 != -1) m_producer->seek(frame2); - if (!mltFrame) { - kDebug() << "///// BROKEN FRAME"; - QPixmap p(twidth, theight); - p.fill(Qt::red); - emit thumbReady(frame, p); - return; - } else { - int frame_width = twidth; - int frame_height = theight; - QPixmap pix(twidth, theight); - uint8_t *data = mltFrame->get_image(format, frame_width, frame_height, 0); - QImage image((uchar *)data, frame_width, frame_height, QImage::Format_ARGB32); - - if (!image.isNull()) { - pix = QPixmap::fromImage(image.rgbSwapped()); - } else - pix.fill(Qt::red); - - delete mltFrame; - emit thumbReady(frame, pix); - } - } else if (frame2 != -1) m_producer->seek(frame2); + QPixmap pix = getFrame(m_producer, frame, twidth, theight); + emit thumbReady(frame, pix); + } if (frame2 != -1) { - mltFrame = m_producer->get_frame(); - if (!mltFrame) { - kDebug() << "///// BROKEN FRAME"; - QPixmap p(twidth, theight); - p.fill(Qt::red); - emit thumbReady(frame2, p); - return; - } else { - int frame_width = twidth; - int frame_height = theight; - QPixmap pix(twidth, theight); - uint8_t *data = mltFrame->get_image(format, frame_width, frame_height, 0); - QImage image((uchar *)data, frame_width, frame_height, QImage::Format_ARGB32); - - if (!image.isNull()) { - pix = QPixmap::fromImage(image.rgbSwapped()); - } else - pix.fill(Qt::red); - - delete mltFrame; - emit thumbReady(frame2, pix); - } + QPixmap pix = getFrame(m_producer, frame2, twidth, theight); + emit thumbReady(frame2, pix); } } @@ -272,70 +219,50 @@ QPixmap KThumb::getImage(KUrl url, int frame, int width, int height) Mlt::Producer *producer = new Mlt::Producer(profile, tmp); delete[] tmp; - if (producer->is_blank()) { - pix.fill(Qt::black); - delete producer; - return pix; - } pix = getFrame(producer, frame, width, height); delete producer; return pix; } -//static -/* -QPixmap KThumb::getImage(QDomElement xml, int frame, int width, int height) { - Mlt::Profile profile((char*) KdenliveSettings::current_profile().data()); - QPixmap pix(width, height); - QDomDocument doc; - QDomElement mlt = doc.createElement("mlt"); - QDomElement play = doc.createElement("playlist"); - doc.appendChild(mlt); - mlt.appendChild(play); - play.appendChild(doc.importNode(xml, true)); - char *tmp = Render::decodedString(doc.toString()); - Mlt::Producer producer(profile, "xml-string", tmp); - delete[] tmp; - - if (producer.is_blank()) { - pix.fill(Qt::black); - return pix; - } - return getFrame(producer, frame, width, height); -}*/ //static QPixmap KThumb::getFrame(Mlt::Producer *producer, int framepos, int width, int height) { + QPixmap p(width, height); if (producer == NULL) { - QPixmap p(width, height); p.fill(Qt::red); return p; } + if (producer->is_blank()) { + p.fill(Qt::black); + return p; + } + producer->seek(framepos); Mlt::Frame *frame = producer->get_frame(); if (!frame) { kDebug() << "///// BROKEN FRAME"; - QPixmap p(width, height); p.fill(Qt::red); return p; } + /*Mlt::Producer parentProd(producer->parent()); + Mlt::Service service(parentProd.get_service()); + mlt_service_lock(service.get_service());*/ + mlt_image_format format = mlt_image_rgb24a; - int frame_width = width; - int frame_height = height; - QPixmap pix(width, height); - uint8_t *data = frame->get_image(format, frame_width, frame_height, 0); - QImage image((uchar *)data, frame_width, frame_height, QImage::Format_ARGB32); + uint8_t *data = frame->get_image(format, width, height, 0); + QImage image((uchar *)data, width, height, QImage::Format_ARGB32); + //mlt_service_unlock(service.get_service()); if (!image.isNull()) { - pix = QPixmap::fromImage(image.rgbSwapped()); + p = QPixmap::fromImage(image.rgbSwapped()); } else - pix.fill(Qt::red); + p.fill(Qt::red); delete frame; - return pix; + return p; } /* void KThumb::getImage(KUrl url, int frame, int width, int height)