mirror of https://git.ffmpeg.org/ffmpeg.git
frame_thread_encoder: use ref-counting to avoid memcpy of all input frames
Apparently uneeded lock/unlock removed by commiter Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
parent
fe439c2069
commit
1ffcf6ac90
|
@ -254,25 +254,17 @@ int ff_thread_video_encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVF
|
||||||
av_assert1(!*got_packet_ptr);
|
av_assert1(!*got_packet_ptr);
|
||||||
|
|
||||||
if(frame){
|
if(frame){
|
||||||
if(!(avctx->flags & CODEC_FLAG_INPUT_PRESERVED)){
|
AVFrame *new = av_frame_alloc();
|
||||||
AVFrame *new = av_frame_alloc();
|
if(!new)
|
||||||
if(!new)
|
return AVERROR(ENOMEM);
|
||||||
return AVERROR(ENOMEM);
|
ret = av_frame_ref(new, frame);
|
||||||
pthread_mutex_lock(&c->buffer_mutex);
|
if(ret < 0) {
|
||||||
ret = ff_get_buffer(c->parent_avctx, new, 0);
|
av_frame_free(&new);
|
||||||
pthread_mutex_unlock(&c->buffer_mutex);
|
return ret;
|
||||||
if(ret<0)
|
|
||||||
return ret;
|
|
||||||
new->pts = frame->pts;
|
|
||||||
new->quality = frame->quality;
|
|
||||||
new->pict_type = frame->pict_type;
|
|
||||||
av_image_copy(new->data, new->linesize, (const uint8_t **)frame->data, frame->linesize,
|
|
||||||
avctx->pix_fmt, avctx->width, avctx->height);
|
|
||||||
frame = new;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
task.index = c->task_index;
|
task.index = c->task_index;
|
||||||
task.indata = (void*)frame;
|
task.indata = (void*)new;
|
||||||
pthread_mutex_lock(&c->task_fifo_mutex);
|
pthread_mutex_lock(&c->task_fifo_mutex);
|
||||||
av_fifo_generic_write(c->task_fifo, &task, sizeof(task), NULL);
|
av_fifo_generic_write(c->task_fifo, &task, sizeof(task), NULL);
|
||||||
pthread_cond_signal(&c->task_fifo_cond);
|
pthread_cond_signal(&c->task_fifo_cond);
|
||||||
|
|
Loading…
Reference in New Issue