]> git.sesse.net Git - ffmpeg/blobdiff - libavcodec/frame_thread_encoder.c
ff_emulated_edge_mc: fix handling of w/h being 0
[ffmpeg] / libavcodec / frame_thread_encoder.c
index 664526a303c22b61c3ef529d11b983711b9280f9..ab095dc98e433f9c0d30b3f3fc851e99c026a690 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;
@@ -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;
 }