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;
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;
}
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;
}