service.unlock();
}*/
- kDebug() << "// // // CLOSE RENDERER " << m_name;
+ //kDebug() << "// // // CLOSE RENDERER " << m_name;
if (m_blackClip) delete m_blackClip;
//delete m_osdInfo;
}
}
}
+void Render::disablePreview(bool disable)
+{
+ if (m_mltConsumer) {
+ m_mltConsumer->stop();
+ m_mltConsumer->set("preview_off", (int) disable);
+ m_mltConsumer->set("refresh", 0);
+ m_mltConsumer->start();
+ }
+}
+
void Render::showAudio(Mlt::Frame& frame)
{
if (!frame.is_valid() || frame.get_int("test_audio") != 0) {
return;
}
mlt_audio_format audio_format = mlt_audio_s16;
- int freq = 0;
- int num_channels = 0;
+ //FIXME: should not be hardcoded..
+ int freq = 48000;
+ int num_channels = 2;
int samples = 0;
int16_t* data = (int16_t*)frame.get_audio(audio_format, freq, num_channels, samples);
}
for (int j = 0; j < params.count(); j++) {
- filter->set((params.at(j).name()).toUtf8().constData(), params.at(j).value().toUtf8().constData());
+ filter->set(params.at(j).name().toUtf8().constData(), params.at(j).value().toUtf8().constData());
}
for (int j = 0; j < filtersList.count(); j++) {
mlt_service_unlock(serv);
}
-bool Render::mltResizeClipCrop(ItemInfo info, GenTime diff)
+bool Render::mltResizeClipCrop(ItemInfo info, GenTime newCropStart)
{
Mlt::Service service(m_mltProducer->parent().get_service());
- int frameOffset = (int) diff.frames(m_fps);
+ int newCropFrame = (int) newCropStart.frames(m_fps);
Mlt::Tractor tractor(service);
Mlt::Producer trackProducer(tractor.track(info.track));
Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service());
int previousStart = clip->get_in();
int previousOut = clip->get_out();
delete clip;
- trackPlaylist.resize_clip(clipIndex, previousStart + frameOffset, previousOut + frameOffset);
+ if (previousStart == newCropFrame) {
+ kDebug() << "//////// No ReSIZING Required";
+ service.unlock();
+ return true;
+ }
+ int frameOffset = newCropFrame - previousStart;
+ trackPlaylist.resize_clip(clipIndex, newCropFrame, previousOut + frameOffset);
service.unlock();
m_mltConsumer->set("refresh", 1);
return true;
Mlt::Producer trackProducer(tractor.track(startTrack));
Mlt::Playlist trackPlaylist((mlt_playlist) trackProducer.get_service());
int clipIndex = trackPlaylist.get_clip_index_at(moveStart);
- //kDebug() << "////// LOOKING FOR CLIP TO MOVE, INDEX: " << clipIndex;
+ int clipDuration = trackPlaylist.clip_length(clipIndex);
bool checkLength = false;
if (endTrack == startTrack) {
Mlt::Producer *clipProducer = trackPlaylist.replace_with_blank(clipIndex);
- if ((!overwrite && !trackPlaylist.is_blank_at(moveEnd)) || !clipProducer || !clipProducer->is_valid() || clipProducer->is_blank()) {
- // error, destination is not empty
- if (clipProducer) {
- if (!trackPlaylist.is_blank_at(moveEnd) && clipProducer->is_valid()) trackPlaylist.insert_at(moveStart, clipProducer, 1);
- delete clipProducer;
+ if (!overwrite) {
+ bool success = true;
+ if (!trackPlaylist.is_blank_at(moveEnd) || !clipProducer || !clipProducer->is_valid() || clipProducer->is_blank()) {
+ success = false;
+ }
+ else {
+ // Check that the destination region is empty
+ trackPlaylist.consolidate_blanks(0);
+ int destinationIndex = trackPlaylist.get_clip_index_at(moveEnd);
+ if (destinationIndex < trackPlaylist.count() - 1) {
+ // We are not at the end of the track
+ int blankSize = trackPlaylist.blanks_from(destinationIndex, 1);
+ // Make sure we have enough place to insert clip
+ if (blankSize - clipDuration - (moveEnd - trackPlaylist.clip_start(destinationIndex)) < 0) success = false;
+ }
}
- //int ix = trackPlaylist.get_clip_index_at(moveEnd);
- kDebug() << "// ERROR MOVING CLIP TO : " << moveEnd;
- service.unlock();
- return false;
- } else {
- trackPlaylist.consolidate_blanks(0);
- if (overwrite) {
- trackPlaylist.remove_region(moveEnd, clipProducer->get_playtime());
- int clipIndex = trackPlaylist.get_clip_index_at(moveEnd);
- trackPlaylist.insert_blank(clipIndex, clipProducer->get_playtime() - 1);
+ if (!success) {
+ if (clipProducer) {
+ trackPlaylist.insert_at(moveStart, clipProducer, 1);
+ delete clipProducer;
+ }
+ kDebug() << "// ERROR MOVING CLIP TO : " << moveEnd;
+ service.unlock();
+ return false;
}
- int newIndex = trackPlaylist.insert_at(moveEnd, clipProducer, 1);
- trackPlaylist.consolidate_blanks(1);
+ }
+
+ if (overwrite) {
+ trackPlaylist.remove_region(moveEnd, clipProducer->get_playtime());
+ int clipIndex = trackPlaylist.get_clip_index_at(moveEnd);
+ trackPlaylist.insert_blank(clipIndex, clipProducer->get_playtime() - 1);
+ }
+ int newIndex = trackPlaylist.insert_at(moveEnd, clipProducer, 1);
+ if (newIndex == -1) {
+ kDebug()<<"// CANNOT MOVE CLIP TO: "<<moveEnd;
+ trackPlaylist.insert_at(moveStart, clipProducer, 1);
delete clipProducer;
- /*if (QString(clipProducer.parent().get("transparency")).toInt() == 1) {
- mltMoveTransparency(moveStart, moveEnd, startTrack, endTrack, QString(clipProducer.parent().get("id")).toInt());
- }*/
- if (newIndex + 1 == trackPlaylist.count()) checkLength = true;
+ service.unlock();
+ return false;
}
- //service.unlock();
+ trackPlaylist.consolidate_blanks(1);
+ delete clipProducer;
+ if (newIndex + 1 == trackPlaylist.count()) checkLength = true;
} else {
Mlt::Producer destTrackProducer(tractor.track(endTrack));
Mlt::Playlist destTrackPlaylist((mlt_playlist) destTrackProducer.get_service());
if (!overwrite && !destTrackPlaylist.is_blank_at(moveEnd)) {
// error, destination is not empty
+ kDebug() << "Cannot move: Destination is not empty";
service.unlock();
return false;
} else {