mirror of
https://github.com/motioneye-project/motioneyeos.git
synced 2025-07-28 13:46:32 +00:00
ffmpeg: v4l2_m2m: fix output media file missing keyframe at timestamp 0
This commit is contained in:
parent
65f2815773
commit
74f5b58d94
@ -0,0 +1,19 @@
|
||||
commit e370306deb9c48f4daa4ae4d622a7bd8b3828bef
|
||||
Author: Joo Aun Saw <jasaw@dius.com.au>
|
||||
Date: Mon Aug 19 15:20:52 2019 +1000
|
||||
|
||||
avcodec/v4l2_m2m_enc: use joined with 1st frame header mode
|
||||
|
||||
diff --git a/libavcodec/v4l2_m2m_enc.c b/libavcodec/v4l2_m2m_enc.c
|
||||
index 354d78babb..32aaaf18fb 100644
|
||||
--- a/libavcodec/v4l2_m2m_enc.c
|
||||
+++ b/libavcodec/v4l2_m2m_enc.c
|
||||
@@ -174,7 +174,7 @@ static int v4l2_prepare_encoder(V4L2m2mContext *s)
|
||||
v4l2_set_timeperframe(s, avctx->framerate.num, avctx->framerate.den);
|
||||
|
||||
/* set ext ctrls */
|
||||
- v4l2_set_ext_ctrl(s, MPEG_CID(HEADER_MODE), MPEG_VIDEO(HEADER_MODE_SEPARATE), "header mode");
|
||||
+ v4l2_set_ext_ctrl(s, MPEG_CID(HEADER_MODE), MPEG_VIDEO(HEADER_MODE_JOINED_WITH_1ST_FRAME), "header mode");
|
||||
/* enable bit rate control */
|
||||
if (avctx->bit_rate > 1) {
|
||||
v4l2_set_ext_ctrl(s, MPEG_CID(FRAME_RC_ENABLE) , 1, "rate control");
|
@ -0,0 +1,30 @@
|
||||
commit 05ee1b8f65e4029fcad832743701712a1a000ea3
|
||||
Author: Joo Aun Saw <jasaw@dius.com.au>
|
||||
Date: Mon Aug 19 15:21:30 2019 +1000
|
||||
|
||||
avcodec/v4l2: add timeout when dequeueing buffers
|
||||
|
||||
Add timeout to prevent lock up when buffer queue is empty.
|
||||
|
||||
diff --git a/libavcodec/v4l2_context.c b/libavcodec/v4l2_context.c
|
||||
index efcb0426e4..8f9420e28d 100644
|
||||
--- a/libavcodec/v4l2_context.c
|
||||
+++ b/libavcodec/v4l2_context.c
|
||||
@@ -580,7 +580,7 @@ int ff_v4l2_context_dequeue_frame(V4L2Context* ctx, AVFrame* frame)
|
||||
* 1. decoded frame available
|
||||
* 2. an input buffer is ready to be dequeued
|
||||
*/
|
||||
- avbuf = v4l2_dequeue_v4l2buf(ctx, -1);
|
||||
+ avbuf = v4l2_dequeue_v4l2buf(ctx, ctx_to_m2mctx(ctx)->draining ? -1 : 200);
|
||||
if (!avbuf) {
|
||||
if (ctx->done)
|
||||
return AVERROR_EOF;
|
||||
@@ -600,7 +600,7 @@ int ff_v4l2_context_dequeue_packet(V4L2Context* ctx, AVPacket* pkt)
|
||||
* 1. encoded packet available
|
||||
* 2. an input buffer ready to be dequeued
|
||||
*/
|
||||
- avbuf = v4l2_dequeue_v4l2buf(ctx, -1);
|
||||
+ avbuf = v4l2_dequeue_v4l2buf(ctx, ctx_to_m2mctx(ctx)->draining ? -1 : 200);
|
||||
if (!avbuf) {
|
||||
if (ctx->done)
|
||||
return AVERROR_EOF;
|
Loading…
x
Reference in New Issue
Block a user