]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/frame_thread_encoder.c
vc1dec: prevent v_edge_pos from becoming negative.
[ffmpeg] / libavcodec / frame_thread_encoder.c
index 664526a303c22b61c3ef529d11b983711b9280f9..0ac018b35e7a2ef419429329e8143e4a1f5b21a5 100644 (file)
@@ -95,9 +95,12 @@ static void * attribute_align_arg worker(void *v){
         c->parent_avctx->release_buffer(c->parent_avctx, frame);
         pthread_mutex_unlock(&c->buffer_mutex);
         av_freep(&frame);
-        if(!got_packet)
-            continue;
-        av_dup_packet(pkt);
+        if(got_packet) {
+            av_dup_packet(pkt);
+        } else {
+            pkt->data = NULL;
+            pkt->size = 0;
+        }
         pthread_mutex_lock(&c->finished_task_mutex);
         c->finished_tasks[task.index].outdata = pkt; pkt = NULL;
         c->finished_tasks[task.index].return_code = ret;
@@ -223,7 +226,7 @@ int ff_thread_video_encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVF
             if(!new)
                 return AVERROR(ENOMEM);
             pthread_mutex_lock(&c->buffer_mutex);
-            ret = c->parent_avctx->get_buffer(c->parent_avctx, new);
+            ret = ff_get_buffer(c->parent_avctx, new);
             pthread_mutex_unlock(&c->buffer_mutex);
             if(ret<0)
                 return ret;
@@ -257,11 +260,11 @@ int ff_thread_video_encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVF
     }
     task = c->finished_tasks[c->finished_task_index];
     *pkt = *(AVPacket*)(task.outdata);
+    if(pkt->data)
+        *got_packet_ptr = 1;
     av_freep(&c->finished_tasks[c->finished_task_index].outdata);
     c->finished_task_index = (c->finished_task_index+1) % BUFFER_SIZE;
     pthread_mutex_unlock(&c->finished_task_mutex);
 
-    *got_packet_ptr = 1;
-
     return task.return_code;
 }