pthread_mutex_unlock(&c->buffer_mutex);
av_frame_free(&frame);
if(got_packet) {
- int ret2 = av_dup_packet(pkt);
+ int ret2 = av_packet_make_refcounted(pkt);
if (ret >= 0 && ret2 < 0)
ret = ret2;
} else {
pthread_join(c->worker[i], NULL);
}
+ while (av_fifo_size(c->task_fifo) > 0) {
+ Task task;
+ AVFrame *frame;
+ av_fifo_generic_read(c->task_fifo, &task, sizeof(task), NULL);
+ frame = task.indata;
+ av_frame_free(&frame);
+ task.indata = NULL;
+ }
+
+ for (i=0; i<BUFFER_SIZE; i++) {
+ if (c->finished_tasks[i].outdata != NULL) {
+ AVPacket *pkt = c->finished_tasks[i].outdata;
+ av_packet_free(&pkt);
+ c->finished_tasks[i].outdata = NULL;
+ }
+ }
+
pthread_mutex_destroy(&c->task_fifo_mutex);
pthread_mutex_destroy(&c->finished_task_mutex);
pthread_mutex_destroy(&c->buffer_mutex);