mirror of
https://github.com/FFmpeg/FFmpeg.git
synced 2025-02-04 06:08:26 +02:00
avcodec/frame_thread_encoder: remove usage of avcodec_encode_video2()
Call the encoder's internal AVCodec.encode2() function instead. Signed-off-by: James Almer <jamrial@gmail.com>
This commit is contained in:
parent
82bf41f3ab
commit
cde7818d9f
@ -277,14 +277,12 @@ int attribute_align_arg avcodec_encode_video2(AVCodecContext *avctx,
|
|||||||
return AVERROR(ENOSYS);
|
return AVERROR(ENOSYS);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(CONFIG_FRAME_THREAD_ENCODER &&
|
|
||||||
avctx->internal->frame_thread_encoder && (avctx->active_thread_type&FF_THREAD_FRAME))
|
|
||||||
return ff_thread_video_encode_frame(avctx, avpkt, frame, got_packet_ptr);
|
|
||||||
|
|
||||||
if ((avctx->flags&AV_CODEC_FLAG_PASS1) && avctx->stats_out)
|
if ((avctx->flags&AV_CODEC_FLAG_PASS1) && avctx->stats_out)
|
||||||
avctx->stats_out[0] = '\0';
|
avctx->stats_out[0] = '\0';
|
||||||
|
|
||||||
if (!(avctx->codec->capabilities & AV_CODEC_CAP_DELAY) && !frame) {
|
if (!frame &&
|
||||||
|
!(avctx->codec->capabilities & AV_CODEC_CAP_DELAY ||
|
||||||
|
(avctx->internal->frame_thread_encoder && avctx->active_thread_type & FF_THREAD_FRAME))) {
|
||||||
av_packet_unref(avpkt);
|
av_packet_unref(avpkt);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -299,7 +297,15 @@ int attribute_align_arg avcodec_encode_video2(AVCodecContext *avctx,
|
|||||||
|
|
||||||
av_assert0(avctx->codec->encode2);
|
av_assert0(avctx->codec->encode2);
|
||||||
|
|
||||||
ret = avctx->codec->encode2(avctx, avpkt, frame, got_packet_ptr);
|
|
||||||
|
if (CONFIG_FRAME_THREAD_ENCODER &&
|
||||||
|
avctx->internal->frame_thread_encoder && (avctx->active_thread_type & FF_THREAD_FRAME))
|
||||||
|
ret = ff_thread_video_encode_frame(avctx, avpkt, frame, got_packet_ptr);
|
||||||
|
else {
|
||||||
|
ret = avctx->codec->encode2(avctx, avpkt, frame, got_packet_ptr);
|
||||||
|
if (*got_packet_ptr && !(avctx->codec->capabilities & AV_CODEC_CAP_DELAY))
|
||||||
|
avpkt->pts = avpkt->dts = frame->pts;
|
||||||
|
}
|
||||||
av_assert0(ret <= 0);
|
av_assert0(ret <= 0);
|
||||||
|
|
||||||
emms_c();
|
emms_c();
|
||||||
@ -326,8 +332,6 @@ int attribute_align_arg avcodec_encode_video2(AVCodecContext *avctx,
|
|||||||
if (!ret) {
|
if (!ret) {
|
||||||
if (!*got_packet_ptr)
|
if (!*got_packet_ptr)
|
||||||
avpkt->size = 0;
|
avpkt->size = 0;
|
||||||
else if (!(avctx->codec->capabilities & AV_CODEC_CAP_DELAY))
|
|
||||||
avpkt->pts = avpkt->dts = frame->pts;
|
|
||||||
|
|
||||||
if (needs_realloc && avpkt->data) {
|
if (needs_realloc && avpkt->data) {
|
||||||
ret = av_buffer_realloc(&avpkt->buf, avpkt->size + AV_INPUT_BUFFER_PADDING_SIZE);
|
ret = av_buffer_realloc(&avpkt->buf, avpkt->size + AV_INPUT_BUFFER_PADDING_SIZE);
|
||||||
|
@ -66,7 +66,7 @@ static void * attribute_align_arg worker(void *v){
|
|||||||
AVPacket *pkt = NULL;
|
AVPacket *pkt = NULL;
|
||||||
|
|
||||||
while (!atomic_load(&c->exit)) {
|
while (!atomic_load(&c->exit)) {
|
||||||
int got_packet, ret;
|
int got_packet = 0, ret;
|
||||||
AVFrame *frame;
|
AVFrame *frame;
|
||||||
Task task;
|
Task task;
|
||||||
|
|
||||||
@ -86,19 +86,20 @@ static void * attribute_align_arg worker(void *v){
|
|||||||
pthread_mutex_unlock(&c->task_fifo_mutex);
|
pthread_mutex_unlock(&c->task_fifo_mutex);
|
||||||
frame = task.indata;
|
frame = task.indata;
|
||||||
|
|
||||||
ret = avcodec_encode_video2(avctx, pkt, frame, &got_packet);
|
ret = avctx->codec->encode2(avctx, pkt, frame, &got_packet);
|
||||||
pthread_mutex_lock(&c->buffer_mutex);
|
|
||||||
av_frame_unref(frame);
|
|
||||||
pthread_mutex_unlock(&c->buffer_mutex);
|
|
||||||
av_frame_free(&frame);
|
|
||||||
if(got_packet) {
|
if(got_packet) {
|
||||||
int ret2 = av_packet_make_refcounted(pkt);
|
int ret2 = av_packet_make_refcounted(pkt);
|
||||||
if (ret >= 0 && ret2 < 0)
|
if (ret >= 0 && ret2 < 0)
|
||||||
ret = ret2;
|
ret = ret2;
|
||||||
|
pkt->pts = pkt->dts = frame->pts;
|
||||||
} else {
|
} else {
|
||||||
pkt->data = NULL;
|
pkt->data = NULL;
|
||||||
pkt->size = 0;
|
pkt->size = 0;
|
||||||
}
|
}
|
||||||
|
pthread_mutex_lock(&c->buffer_mutex);
|
||||||
|
av_frame_unref(frame);
|
||||||
|
pthread_mutex_unlock(&c->buffer_mutex);
|
||||||
|
av_frame_free(&frame);
|
||||||
pthread_mutex_lock(&c->finished_task_mutex);
|
pthread_mutex_lock(&c->finished_task_mutex);
|
||||||
c->finished_tasks[task.index].outdata = pkt; pkt = NULL;
|
c->finished_tasks[task.index].outdata = pkt; pkt = NULL;
|
||||||
c->finished_tasks[task.index].return_code = ret;
|
c->finished_tasks[task.index].return_code = ret;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user