- if (producer->get_double("meta.media.frame_rate_den") > 0) {
- filePropertyMap["fps"] = locale.toString(producer->get_double("meta.media.frame_rate_num") / producer->get_double("meta.media.frame_rate_den"));
- } else filePropertyMap["fps"] = producer->get("source_fps");
-
- if (frame && frame->is_valid()) {
- filePropertyMap["frame_size"] = QString::number(frame->get_int("width")) + 'x' + QString::number(frame->get_int("height"));
- filePropertyMap["frequency"] = QString::number(frame->get_int("frequency"));
- filePropertyMap["channels"] = QString::number(frame->get_int("channels"));
- filePropertyMap["aspect_ratio"] = frame->get("aspect_ratio");
-
- if (frame->get_int("test_image") == 0) {
- if (url.path().endsWith(".mlt") || url.path().endsWith(".westley") || url.path().endsWith(".kdenlive")) {
- filePropertyMap["type"] = "playlist";
- metadataPropertyMap["comment"] = QString::fromUtf8(producer->get("title"));
- } else if (frame->get_int("test_audio") == 0)
- filePropertyMap["type"] = "av";
- else
- filePropertyMap["type"] = "video";
-
- int variance;
- mlt_image_format format = mlt_image_rgb24a;
- int frame_width = width;
- int frame_height = imageHeight;
- QPixmap pix;
- do {
- variance = 100;
- uint8_t *data = frame->get_image(format, frame_width, frame_height, 0);
- QImage image((uchar *)data, frame_width, frame_height, QImage::Format_ARGB32_Premultiplied);
-
- if (!image.isNull()) {
- if (frame_width > (2 * width)) {
- // there was a scaling problem, do it manually
- QImage scaled = image.scaled(width, imageHeight);
- pix = QPixmap::fromImage(scaled.rgbSwapped());
- } else pix = QPixmap::fromImage(image.rgbSwapped());
- variance = KThumb::imageVariance(image);
- } else
- pix.fill(Qt::black);
-
- if (frameNumber == 0 && variance< 6) {
- // Thumbnail is not interesting (for example all black, seek to fetch better thumb
- frameNumber = 100;
- producer->seek(frameNumber);
- delete frame;
- frame = producer->get_frame();
- variance = -1;
- }
- } while (variance == -1);
- emit replyGetImage(clipId, pix);