going with the simpler nested audio option

This commit is contained in:
itsmattkc
2018-11-10 14:38:51 +11:00
parent bff412502f
commit 323ce263f0
8 changed files with 73 additions and 49 deletions
+32 -17
View File
@@ -217,14 +217,22 @@ void ViewerWidget::process_effect(Clip* c, Effect* e, double timecode, GLTexture
}
}
GLuint ViewerWidget::compose_sequence(Clip* nest, bool render_audio) {
GLuint ViewerWidget::compose_sequence(QVector<Clip*>& nests, bool render_audio) {
Sequence* s = viewer->seq;
long playhead = s->playhead;
if (nest != NULL) {
s = static_cast<Sequence*>(nest->media);
playhead += nest->clip_in - nest->timeline_in;
playhead = refactor_frame_number(playhead, nest->sequence->frame_rate, s->frame_rate);
if (!nests.isEmpty()) {
for (int i=0;i<nests.size();i++) {
s = static_cast<Sequence*>(nests.at(i)->media);
playhead += nests.at(i)->clip_in - nests.at(i)->timeline_in;
playhead = refactor_frame_number(playhead, nests.at(i)->sequence->frame_rate, s->frame_rate);
}
if (nests.last()->fbo != NULL) {
nests.last()->fbo[0]->bind();
glClear(GL_COLOR_BUFFER_BIT);
nests.last()->fbo[0]->release();
}
}
QVector<Clip*> current_clips;
@@ -234,7 +242,7 @@ GLuint ViewerWidget::compose_sequence(Clip* nest, bool render_audio) {
// if clip starts within one second and/or hasn't finished yet
if (c != NULL) {
if (!(nest != NULL && !same_sign(c->track, nest->track))) {
if (!(!nests.isEmpty() && !same_sign(c->track, nests.last()->track))) {
bool clip_is_active = false;
switch (c->media_type) {
@@ -288,7 +296,7 @@ GLuint ViewerWidget::compose_sequence(Clip* nest, bool render_audio) {
int half_width = s->width/2;
int half_height = s->height/2;
if (rendering || nest != NULL) half_height = -half_height; // invert vertical
if (rendering || !nests.isEmpty()) half_height = -half_height; // invert vertical
glPushMatrix();
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glColor4f(1.0, 1.0, 1.0, 1.0);
@@ -349,7 +357,9 @@ GLuint ViewerWidget::compose_sequence(Clip* nest, bool render_audio) {
// for nested sequences
if (c->media_type == MEDIA_TYPE_SEQUENCE) {
textureID = compose_sequence(c, render_audio);
nests.append(c);
textureID = compose_sequence(nests, render_audio);
nests.removeLast();
fbo_switcher = true;
}
@@ -406,8 +416,8 @@ GLuint ViewerWidget::compose_sequence(Clip* nest, bool render_audio) {
}
// EFFECT CODE END
if (nest != NULL) {
nest->fbo[0]->bind();
if (!nests.isEmpty()) {
nests.last()->fbo[0]->bind();
glViewport(0, 0, s->width, s->height);
} else if (rendering) {
glViewport(0, 0, s->width, s->height);
@@ -433,8 +443,8 @@ GLuint ViewerWidget::compose_sequence(Clip* nest, bool render_audio) {
glBindTexture(GL_TEXTURE_2D, 0);
if (nest != NULL) {
nest->fbo[0]->release();
if (!nests.isEmpty()) {
nests.last()->fbo[0]->release();
if (default_fbo != NULL) default_fbo->bind();
}
@@ -447,12 +457,14 @@ GLuint ViewerWidget::compose_sequence(Clip* nest, bool render_audio) {
case MEDIA_TYPE_TONE:
if (c->lock.tryLock()) {
// clip is not caching, start caching audio
cache_clip(c, playhead, c->audio_reset, !render_audio, nest);
cache_clip(c, playhead, c->audio_reset, !render_audio, nests);
c->lock.unlock();
}
break;
case MEDIA_TYPE_SEQUENCE:
compose_sequence(c, render_audio);
nests.append(c);
compose_sequence(nests, render_audio);
nests.removeLast();
break;
}
}
@@ -474,9 +486,9 @@ GLuint ViewerWidget::compose_sequence(Clip* nest, bool render_audio) {
glPopMatrix();
if (nest != NULL && nest->fbo != NULL) {
if (!nests.isEmpty() && nests.last()->fbo != NULL) {
// returns nested clip's texture
return nest->fbo[0]->texture();
return nests.last()->fbo[0]->texture();
}
return 0;
@@ -501,7 +513,10 @@ void ViewerWidget::paintGL() {
// compose video preview
glClearColor(0, 0, 0, 0);
compose_sequence(NULL, render_audio);
QVector<Clip*> nests;
compose_sequence(nests, render_audio);
if (waveform) {
double waveform_zoom = (double) waveform_ms->audio_preview.size() / (double) width();