testing paste hang fix

This commit is contained in:
itsmattkc
2018-06-22 22:15:08 -07:00
parent 58736bd243
commit 1200eacd50
5 changed files with 53 additions and 50 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE QtCreatorProject>
<!-- Written by QtCreator 4.6.2, 2018-06-22T16:59:12. -->
<!-- Written by QtCreator 4.6.2, 2018-06-22T18:08:30. -->
<qtcreator>
<data>
<variable>EnvironmentId</variable>
+5 -6
View File
@@ -302,9 +302,7 @@ void open_clip_worker(Clip* clip) {
clip->frame = av_frame_alloc();
qDebug() << "[INFO] Clip opened on track" << clip->track;
clip->open = true;
qDebug() << "[INFO] Clip opened on track" << clip->track;
}
void cache_clip_worker(Clip* clip, long playhead, bool write_A, bool write_B, bool reset) {
@@ -369,12 +367,13 @@ void close_clip_worker(Clip* clip) {
void Cacher::run() {
// open_lock is used to prevent the clip from being destroyed before the cacher has closed it properly
clip->open = true;
caching = true;
clip->open_lock.lock();
open_clip_worker(clip);
caching = true;
while (true) {
while (caching) {
clip->can_cache.wait(&clip->lock);
if (!caching) {
break;
@@ -383,7 +382,7 @@ void Cacher::run() {
}
}
close_clip_worker(clip);
close_clip_worker(clip);
clip->lock.unlock();
clip->open_lock.unlock();
+1 -1
View File
@@ -40,7 +40,7 @@ void handle_media(Sequence* sequence, long playhead, bool multithreaded) {
open_clip(c, multithreaded);
// add to current_clips, (insertion) sorted by track so composite them in order
cc_lock.lock();
cc_lock.lock();
bool found = false;
for (int j=0;j<current_clips.size();j++) {
if (current_clips[j]->track < c->track) {
+3 -3
View File
@@ -77,12 +77,12 @@ void Clip::reset() {
}
Clip::~Clip() {
if (open) {
if (open) {
close_clip(this);
}
// make sure clip has closed before clip is destroyed
open_lock.lock();
// make sure clip has closed before clip is destroyed
open_lock.lock();
open_lock.unlock();
for (int i=0;i<effects.size();i++) {
+43 -39
View File
@@ -74,50 +74,54 @@ void ViewerWidget::paintGL()
qDebug() << "[WARNING] Tried to display clip" << i << "but it's closed";
texture_failed = true;
} else if (is_clip_active(c, playhead)) {
if (c->stream->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
// start preparing cache
get_clip_frame(c, playhead);
if (c->lock.tryLock()) {
if (c->stream->codecpar->codec_type == AVMEDIA_TYPE_VIDEO) {
// start preparing cache
get_clip_frame(c, playhead);
if (c->texture == NULL) {
qDebug() << "[WARNING] Texture hasn't been created yet";
texture_failed = true;
} else if (playhead >= c->timeline_in) {
glLoadIdentity();
int half_width = c->sequence->width/2;
int half_height = c->sequence->height/2;
glOrtho(-half_width, half_width, half_height,- half_height, -1, 1);
int anchor_x = c->media_stream->video_width/2;
int anchor_y = c->media_stream->video_height/2;
if (c->texture == NULL) {
qDebug() << "[WARNING] Texture hasn't been created yet";
texture_failed = true;
} else if (playhead >= c->timeline_in) {
glLoadIdentity();
int half_width = c->sequence->width/2;
int half_height = c->sequence->height/2;
glOrtho(-half_width, half_width, half_height,- half_height, -1, 1);
int anchor_x = c->media_stream->video_width/2;
int anchor_y = c->media_stream->video_height/2;
// perform all transform effects
for (int j=0;j<c->effects.size();j++) {
c->effects.at(j)->process_gl(&anchor_x, &anchor_y);
// perform all transform effects
for (int j=0;j<c->effects.size();j++) {
c->effects.at(j)->process_gl(&anchor_x, &anchor_y);
}
int anchor_right = c->media_stream->video_width - anchor_x;
int anchor_bottom = c->media_stream->video_height - anchor_y;
c->texture->bind();
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0);
glVertex2f(-anchor_x, -anchor_y);
glTexCoord2f(1.0, 0.0);
glVertex2f(anchor_right, -anchor_y);
glTexCoord2f(1.0, 1.0);
glVertex2f(anchor_right, anchor_bottom);
glTexCoord2f(0.0, 1.0);
glVertex2f(-anchor_x, anchor_bottom);
glEnd();
c->texture->release();
}
int anchor_right = c->media_stream->video_width - anchor_x;
int anchor_bottom = c->media_stream->video_height - anchor_y;
c->texture->bind();
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0);
glVertex2f(-anchor_x, -anchor_y);
glTexCoord2f(1.0, 0.0);
glVertex2f(anchor_right, -anchor_y);
glTexCoord2f(1.0, 1.0);
glVertex2f(anchor_right, anchor_bottom);
glTexCoord2f(0.0, 1.0);
glVertex2f(-anchor_x, anchor_bottom);
glEnd();
c->texture->release();
} else if (render_audio &&
c->stream->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
// clip is not caching, start caching audio
cache_clip(c, playhead, false, false, c->reset_audio);
}
} else if (render_audio &&
c->stream->codecpar->codec_type == AVMEDIA_TYPE_AUDIO &&
c->lock.tryLock()) {
// clip is not caching, start caching audio
c->lock.unlock();
cache_clip(c, playhead, false, false, c->reset_audio);
} else {
qDebug() << "[WARNING] Clip was locked, must still be active";
texture_failed = true;
}
}
}