mirror of
https://github.com/LibreELEC/LibreELEC.tv.git
synced 2025-08-02 07:27:49 +00:00
ffmpeg: update rpi patch
Patch created using revisions dc91b91..34fb1cd from branch dev/4.4/rpi_import_1 of https://github.com/jc-kynesim/rpi-ffmpeg
This commit is contained in:
parent
9390f49b64
commit
34bc440c43
@ -47380,7 +47380,7 @@ index 8dbc7fc104..7d5fadcd3d 100644
|
|||||||
/**
|
/**
|
||||||
* Enqueues a V4L2Buffer
|
* Enqueues a V4L2Buffer
|
||||||
diff --git a/libavcodec/v4l2_context.c b/libavcodec/v4l2_context.c
|
diff --git a/libavcodec/v4l2_context.c b/libavcodec/v4l2_context.c
|
||||||
index ff1ea8e57b..b2c40636a2 100644
|
index ff1ea8e57b..d8a86e8261 100644
|
||||||
--- a/libavcodec/v4l2_context.c
|
--- a/libavcodec/v4l2_context.c
|
||||||
+++ b/libavcodec/v4l2_context.c
|
+++ b/libavcodec/v4l2_context.c
|
||||||
@@ -27,11 +27,13 @@
|
@@ -27,11 +27,13 @@
|
||||||
@ -47625,7 +47625,7 @@ index ff1ea8e57b..b2c40636a2 100644
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -280,171 +291,267 @@ static int v4l2_stop_encode(V4L2Context *ctx)
|
@@ -280,171 +291,274 @@ static int v4l2_stop_encode(V4L2Context *ctx)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47698,6 +47698,7 @@ index ff1ea8e57b..b2c40636a2 100644
|
|||||||
+
|
+
|
||||||
+ while (ioctl(m->fd, VIDIOC_DQBUF, &buf) != 0) {
|
+ while (ioctl(m->fd, VIDIOC_DQBUF, &buf) != 0) {
|
||||||
+ const int err = errno;
|
+ const int err = errno;
|
||||||
|
+ av_assert0(AVERROR(err) < 0);
|
||||||
+ if (err != EINTR) {
|
+ if (err != EINTR) {
|
||||||
+ av_log(avctx, AV_LOG_DEBUG, "%s VIDIOC_DQBUF, errno (%s)\n",
|
+ av_log(avctx, AV_LOG_DEBUG, "%s VIDIOC_DQBUF, errno (%s)\n",
|
||||||
+ ctx->name, av_err2str(AVERROR(err)));
|
+ ctx->name, av_err2str(AVERROR(err)));
|
||||||
@ -47811,6 +47812,12 @@ index ff1ea8e57b..b2c40636a2 100644
|
|||||||
- /* if re-init failed, abort */
|
- /* if re-init failed, abort */
|
||||||
- ctx->done = 1;
|
- ctx->done = 1;
|
||||||
- return NULL;
|
- return NULL;
|
||||||
|
- }
|
||||||
|
- if (ret) {
|
||||||
|
- /* if re-init was successful drop the buffer (if there was one)
|
||||||
|
- * since we had to reconfigure capture (unmap all buffers)
|
||||||
|
- */
|
||||||
|
- return NULL;
|
||||||
+ if (evt.type == V4L2_EVENT_SOURCE_CHANGE)
|
+ if (evt.type == V4L2_EVENT_SOURCE_CHANGE)
|
||||||
+ return do_source_change(m);
|
+ return do_source_change(m);
|
||||||
+
|
+
|
||||||
@ -47821,6 +47828,7 @@ index ff1ea8e57b..b2c40636a2 100644
|
|||||||
+// Get a buffer
|
+// Get a buffer
|
||||||
+// If output then just gets the buffer in the expected way
|
+// If output then just gets the buffer in the expected way
|
||||||
+// If capture then runs the capture state m/c to deal with res change etc.
|
+// If capture then runs the capture state m/c to deal with res change etc.
|
||||||
|
+// If return value == 0 then *ppavbuf != NULL
|
||||||
+
|
+
|
||||||
+static int
|
+static int
|
||||||
+get_qbuf(V4L2Context * const ctx, V4L2Buffer ** const ppavbuf, const int timeout)
|
+get_qbuf(V4L2Context * const ctx, V4L2Buffer ** const ppavbuf, const int timeout)
|
||||||
@ -47849,52 +47857,40 @@ index ff1ea8e57b..b2c40636a2 100644
|
|||||||
+ av_log(avctx, AV_LOG_TRACE, "V4L2 %s already done\n", ctx->name);
|
+ av_log(avctx, AV_LOG_TRACE, "V4L2 %s already done\n", ctx->name);
|
||||||
+ return AVERROR_EOF;
|
+ return AVERROR_EOF;
|
||||||
}
|
}
|
||||||
- if (ret) {
|
- }
|
||||||
- /* if re-init was successful drop the buffer (if there was one)
|
|
||||||
- * since we had to reconfigure capture (unmap all buffers)
|
- /* 2. dequeue the buffer */
|
||||||
- */
|
- if (pfd.revents & (POLLIN | POLLRDNORM | POLLOUT | POLLWRNORM)) {
|
||||||
- return NULL;
|
|
||||||
+
|
|
||||||
+ // If capture && timeout == -1 then also wait for rx buffer free
|
+ // If capture && timeout == -1 then also wait for rx buffer free
|
||||||
+ if (is_cap && timeout == -1 && m->output.streamon && !m->draining)
|
+ if (is_cap && timeout == -1 && m->output.streamon && !m->draining)
|
||||||
+ pfd.events |= poll_out;
|
+ pfd.events |= poll_out;
|
||||||
+
|
|
||||||
|
- if (!V4L2_TYPE_IS_OUTPUT(ctx->type)) {
|
||||||
|
- /* there is a capture buffer ready */
|
||||||
|
- if (pfd.revents & (POLLIN | POLLRDNORM))
|
||||||
|
- goto dequeue;
|
||||||
+ // If nothing Qed all we will get is POLLERR - avoid that
|
+ // If nothing Qed all we will get is POLLERR - avoid that
|
||||||
+ if ((pfd.events == poll_out && atomic_load(&m->output.q_count) == 0) ||
|
+ if ((pfd.events == poll_out && atomic_load(&m->output.q_count) == 0) ||
|
||||||
+ (pfd.events == poll_cap && atomic_load(&m->capture.q_count) == 0) ||
|
+ (pfd.events == poll_cap && atomic_load(&m->capture.q_count) == 0) ||
|
||||||
+ (pfd.events == (poll_cap | poll_out) && atomic_load(&m->capture.q_count) == 0 && atomic_load(&m->output.q_count) == 0)) {
|
+ (pfd.events == (poll_cap | poll_out) && atomic_load(&m->capture.q_count) == 0 && atomic_load(&m->output.q_count) == 0)) {
|
||||||
+ av_log(avctx, AV_LOG_TRACE, "V4L2 poll %s empty\n", ctx->name);
|
+ av_log(avctx, AV_LOG_TRACE, "V4L2 poll %s empty\n", ctx->name);
|
||||||
+ return AVERROR(EAGAIN);
|
+ return AVERROR(EAGAIN);
|
||||||
}
|
+ }
|
||||||
- }
|
|
||||||
|
|
||||||
- /* 2. dequeue the buffer */
|
|
||||||
- if (pfd.revents & (POLLIN | POLLRDNORM | POLLOUT | POLLWRNORM)) {
|
|
||||||
+ // Timeout kludged s.t. "forever" eventually gives up & produces logging
|
|
||||||
+ // If waiting for an event when we have seen a last_frame then we expect
|
|
||||||
+ // it to be ready already so force a short timeout
|
|
||||||
+ ret = poll(&pfd, 1,
|
|
||||||
+ ff_v4l2_ctx_eos(ctx) ? 10 :
|
|
||||||
+ timeout == -1 ? 3000 : timeout);
|
|
||||||
|
|
||||||
- if (!V4L2_TYPE_IS_OUTPUT(ctx->type)) {
|
|
||||||
- /* there is a capture buffer ready */
|
|
||||||
- if (pfd.revents & (POLLIN | POLLRDNORM))
|
|
||||||
- goto dequeue;
|
|
||||||
+ av_log(avctx, AV_LOG_TRACE, "V4L2 poll %s ret=%d, timeout=%d, events=%#x, revents=%#x\n",
|
|
||||||
+ ctx->name, ret, timeout, pfd.events, pfd.revents);
|
|
||||||
|
|
||||||
- /* the driver is ready to accept more input; instead of waiting for the capture
|
- /* the driver is ready to accept more input; instead of waiting for the capture
|
||||||
- * buffer to complete we return NULL so input can proceed (we are single threaded)
|
- * buffer to complete we return NULL so input can proceed (we are single threaded)
|
||||||
- */
|
- */
|
||||||
- if (pfd.revents & (POLLOUT | POLLWRNORM))
|
- if (pfd.revents & (POLLOUT | POLLWRNORM))
|
||||||
- return NULL;
|
- return NULL;
|
||||||
|
+ // Timeout kludged s.t. "forever" eventually gives up & produces logging
|
||||||
|
+ // If waiting for an event when we have seen a last_frame then we expect
|
||||||
|
+ // it to be ready already so force a short timeout
|
||||||
|
+ ret = poll(&pfd, 1,
|
||||||
|
+ ff_v4l2_ctx_eos(ctx) ? 10 :
|
||||||
|
+ timeout == -1 ? 3000 : timeout);
|
||||||
+ if (ret < 0) {
|
+ if (ret < 0) {
|
||||||
+ const int err = errno;
|
+ ret = AVERROR(errno); // Remember errno before logging etc.
|
||||||
+ if (err == EINTR)
|
+ av_assert0(ret < 0);
|
||||||
+ continue;
|
|
||||||
+ av_log(avctx, AV_LOG_ERROR, "V4L2 %s poll error %d (%s)\n", ctx->name, err, strerror(err));
|
|
||||||
+ return AVERROR(err);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
-dequeue:
|
-dequeue:
|
||||||
@ -47905,6 +47901,23 @@ index ff1ea8e57b..b2c40636a2 100644
|
|||||||
- memset(planes, 0, sizeof(planes));
|
- memset(planes, 0, sizeof(planes));
|
||||||
- buf.length = VIDEO_MAX_PLANES;
|
- buf.length = VIDEO_MAX_PLANES;
|
||||||
- buf.m.planes = planes;
|
- buf.m.planes = planes;
|
||||||
|
+ av_log(avctx, AV_LOG_TRACE, "V4L2 poll %s ret=%d, timeout=%d, events=%#x, revents=%#x\n",
|
||||||
|
+ ctx->name, ret, timeout, pfd.events, pfd.revents);
|
||||||
|
+
|
||||||
|
+ if (ret < 0) {
|
||||||
|
+ if (ret == AVERROR(EINTR))
|
||||||
|
+ continue;
|
||||||
|
+ av_log(avctx, AV_LOG_ERROR, "V4L2 %s poll error %d (%s)\n", ctx->name, AVUNERROR(ret), av_err2str(ret));
|
||||||
|
+ return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
- ret = ioctl(ctx_to_m2mctx(ctx)->fd, VIDIOC_DQBUF, &buf);
|
||||||
|
- if (ret) {
|
||||||
|
- if (errno != EAGAIN) {
|
||||||
|
- ctx->done = 1;
|
||||||
|
- if (errno != EPIPE)
|
||||||
|
- av_log(logger(ctx), AV_LOG_DEBUG, "%s VIDIOC_DQBUF, errno (%s)\n",
|
||||||
|
- ctx->name, av_err2str(AVERROR(errno)));
|
||||||
+ if (ret == 0) {
|
+ if (ret == 0) {
|
||||||
+ if (timeout == -1)
|
+ if (timeout == -1)
|
||||||
+ av_log(avctx, AV_LOG_ERROR, "V4L2 %s poll unexpected timeout: events=%#x\n", ctx->name, pfd.events);
|
+ av_log(avctx, AV_LOG_ERROR, "V4L2 %s poll unexpected timeout: events=%#x\n", ctx->name, pfd.events);
|
||||||
@ -47915,19 +47928,11 @@ index ff1ea8e57b..b2c40636a2 100644
|
|||||||
+ ctx->done = 1;
|
+ ctx->done = 1;
|
||||||
+ return ret;
|
+ return ret;
|
||||||
+ }
|
+ }
|
||||||
+ }
|
}
|
||||||
+ return AVERROR(EAGAIN);
|
|
||||||
}
|
|
||||||
|
|
||||||
- ret = ioctl(ctx_to_m2mctx(ctx)->fd, VIDIOC_DQBUF, &buf);
|
|
||||||
- if (ret) {
|
|
||||||
- if (errno != EAGAIN) {
|
|
||||||
- ctx->done = 1;
|
|
||||||
- if (errno != EPIPE)
|
|
||||||
- av_log(logger(ctx), AV_LOG_DEBUG, "%s VIDIOC_DQBUF, errno (%s)\n",
|
|
||||||
- ctx->name, av_err2str(AVERROR(errno)));
|
|
||||||
- }
|
|
||||||
- return NULL;
|
- return NULL;
|
||||||
|
+ return AVERROR(EAGAIN);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
+ if ((pfd.revents & POLLERR) != 0) {
|
+ if ((pfd.revents & POLLERR) != 0) {
|
||||||
+ av_log(avctx, AV_LOG_WARNING, "V4L2 %s POLLERR\n", ctx->name);
|
+ av_log(avctx, AV_LOG_WARNING, "V4L2 %s POLLERR\n", ctx->name);
|
||||||
+ return AVERROR_UNKNOWN;
|
+ return AVERROR_UNKNOWN;
|
||||||
@ -47949,6 +47954,13 @@ index ff1ea8e57b..b2c40636a2 100644
|
|||||||
- ctx->done = 1;
|
- ctx->done = 1;
|
||||||
-#endif
|
-#endif
|
||||||
+ continue;
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if ((pfd.revents & poll_cap) != 0) {
|
||||||
|
+ ret = dq_buf(ctx, ppavbuf);
|
||||||
|
+ if (ret == AVERROR(EPIPE))
|
||||||
|
+ continue;
|
||||||
|
+ return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
- avbuf = &ctx->buffers[buf.index];
|
- avbuf = &ctx->buffers[buf.index];
|
||||||
@ -47957,18 +47969,13 @@ index ff1ea8e57b..b2c40636a2 100644
|
|||||||
- if (V4L2_TYPE_IS_MULTIPLANAR(ctx->type)) {
|
- if (V4L2_TYPE_IS_MULTIPLANAR(ctx->type)) {
|
||||||
- memcpy(avbuf->planes, planes, sizeof(planes));
|
- memcpy(avbuf->planes, planes, sizeof(planes));
|
||||||
- avbuf->buf.m.planes = avbuf->planes;
|
- avbuf->buf.m.planes = avbuf->planes;
|
||||||
+ if ((pfd.revents & poll_cap) != 0) {
|
+ if ((pfd.revents & poll_out) != 0) {
|
||||||
+ ret = dq_buf(ctx, ppavbuf);
|
+ if (is_cap)
|
||||||
+ if (ret == AVERROR(EPIPE))
|
+ return AVERROR(EAGAIN);
|
||||||
+ continue;
|
+ return dq_buf(ctx, ppavbuf);
|
||||||
+ return ret;
|
|
||||||
}
|
}
|
||||||
- return avbuf;
|
- return avbuf;
|
||||||
+
|
+
|
||||||
+ if ((pfd.revents & poll_out) != 0) {
|
|
||||||
+ return is_cap ? 0 : dq_buf(ctx, ppavbuf);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ av_log(avctx, AV_LOG_ERROR, "V4L2 poll unexpected events=%#x, revents=%#x\n", pfd.events, pfd.revents);
|
+ av_log(avctx, AV_LOG_ERROR, "V4L2 poll unexpected events=%#x, revents=%#x\n", pfd.events, pfd.revents);
|
||||||
+ return AVERROR_UNKNOWN;
|
+ return AVERROR_UNKNOWN;
|
||||||
}
|
}
|
||||||
@ -48015,7 +48022,7 @@ index ff1ea8e57b..b2c40636a2 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -452,25 +559,45 @@ static V4L2Buffer* v4l2_getfree_v4l2buf(V4L2Context *ctx)
|
@@ -452,25 +566,45 @@ static V4L2Buffer* v4l2_getfree_v4l2buf(V4L2Context *ctx)
|
||||||
|
|
||||||
static int v4l2_release_buffers(V4L2Context* ctx)
|
static int v4l2_release_buffers(V4L2Context* ctx)
|
||||||
{
|
{
|
||||||
@ -48045,18 +48052,18 @@ index ff1ea8e57b..b2c40636a2 100644
|
|||||||
+ .type = ctx->type,
|
+ .type = ctx->type,
|
||||||
+ .count = 0, /* 0 -> unmap all buffers from the driver */
|
+ .count = 0, /* 0 -> unmap all buffers from the driver */
|
||||||
+ };
|
+ };
|
||||||
|
+
|
||||||
|
+ while ((ret = ioctl(fd, VIDIOC_REQBUFS, &req)) == -1) {
|
||||||
|
+ if (errno == EINTR)
|
||||||
|
+ continue;
|
||||||
|
+
|
||||||
|
+ ret = AVERROR(errno);
|
||||||
|
|
||||||
- for (j = 0; j < buffer->num_planes; j++) {
|
- for (j = 0; j < buffer->num_planes; j++) {
|
||||||
- struct V4L2Plane_info *p = &buffer->plane_info[j];
|
- struct V4L2Plane_info *p = &buffer->plane_info[j];
|
||||||
- if (p->mm_addr && p->length)
|
- if (p->mm_addr && p->length)
|
||||||
- if (munmap(p->mm_addr, p->length) < 0)
|
- if (munmap(p->mm_addr, p->length) < 0)
|
||||||
- av_log(logger(ctx), AV_LOG_ERROR, "%s unmap plane (%s))\n", ctx->name, av_err2str(AVERROR(errno)));
|
- av_log(logger(ctx), AV_LOG_ERROR, "%s unmap plane (%s))\n", ctx->name, av_err2str(AVERROR(errno)));
|
||||||
+ while ((ret = ioctl(fd, VIDIOC_REQBUFS, &req)) == -1) {
|
|
||||||
+ if (errno == EINTR)
|
|
||||||
+ continue;
|
|
||||||
+
|
|
||||||
+ ret = AVERROR(errno);
|
|
||||||
+
|
|
||||||
+ av_log(logger(ctx), AV_LOG_ERROR, "release all %s buffers (%s)\n",
|
+ av_log(logger(ctx), AV_LOG_ERROR, "release all %s buffers (%s)\n",
|
||||||
+ ctx->name, av_err2str(AVERROR(errno)));
|
+ ctx->name, av_err2str(AVERROR(errno)));
|
||||||
+
|
+
|
||||||
@ -48075,7 +48082,7 @@ index ff1ea8e57b..b2c40636a2 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
static inline int v4l2_try_raw_format(V4L2Context* ctx, enum AVPixelFormat pixfmt)
|
static inline int v4l2_try_raw_format(V4L2Context* ctx, enum AVPixelFormat pixfmt)
|
||||||
@@ -499,6 +626,8 @@ static inline int v4l2_try_raw_format(V4L2Context* ctx, enum AVPixelFormat pixfm
|
@@ -499,6 +633,8 @@ static inline int v4l2_try_raw_format(V4L2Context* ctx, enum AVPixelFormat pixfm
|
||||||
|
|
||||||
static int v4l2_get_raw_format(V4L2Context* ctx, enum AVPixelFormat *p)
|
static int v4l2_get_raw_format(V4L2Context* ctx, enum AVPixelFormat *p)
|
||||||
{
|
{
|
||||||
@ -48084,7 +48091,7 @@ index ff1ea8e57b..b2c40636a2 100644
|
|||||||
enum AVPixelFormat pixfmt = ctx->av_pix_fmt;
|
enum AVPixelFormat pixfmt = ctx->av_pix_fmt;
|
||||||
struct v4l2_fmtdesc fdesc;
|
struct v4l2_fmtdesc fdesc;
|
||||||
int ret;
|
int ret;
|
||||||
@@ -517,6 +646,13 @@ static int v4l2_get_raw_format(V4L2Context* ctx, enum AVPixelFormat *p)
|
@@ -517,6 +653,13 @@ static int v4l2_get_raw_format(V4L2Context* ctx, enum AVPixelFormat *p)
|
||||||
if (ret)
|
if (ret)
|
||||||
return AVERROR(EINVAL);
|
return AVERROR(EINVAL);
|
||||||
|
|
||||||
@ -48098,7 +48105,7 @@ index ff1ea8e57b..b2c40636a2 100644
|
|||||||
pixfmt = ff_v4l2_format_v4l2_to_avfmt(fdesc.pixelformat, AV_CODEC_ID_RAWVIDEO);
|
pixfmt = ff_v4l2_format_v4l2_to_avfmt(fdesc.pixelformat, AV_CODEC_ID_RAWVIDEO);
|
||||||
ret = v4l2_try_raw_format(ctx, pixfmt);
|
ret = v4l2_try_raw_format(ctx, pixfmt);
|
||||||
if (ret){
|
if (ret){
|
||||||
@@ -569,18 +705,84 @@ static int v4l2_get_coded_format(V4L2Context* ctx, uint32_t *p)
|
@@ -569,18 +712,84 @@ static int v4l2_get_coded_format(V4L2Context* ctx, uint32_t *p)
|
||||||
*
|
*
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
@ -48170,24 +48177,24 @@ index ff1ea8e57b..b2c40636a2 100644
|
|||||||
+ {
|
+ {
|
||||||
+ if (cmd == VIDIOC_STREAMOFF)
|
+ if (cmd == VIDIOC_STREAMOFF)
|
||||||
+ flush_all_buffers_status(ctx);
|
+ flush_all_buffers_status(ctx);
|
||||||
|
+
|
||||||
- ctx->streamon = (cmd == VIDIOC_STREAMON);
|
|
||||||
+ ctx->streamon = (cmd == VIDIOC_STREAMON);
|
+ ctx->streamon = (cmd == VIDIOC_STREAMON);
|
||||||
+ av_log(avctx, AV_LOG_DEBUG, "%s set status %d (%s) OK\n", ctx->name,
|
+ av_log(avctx, AV_LOG_DEBUG, "%s set status %d (%s) OK\n", ctx->name,
|
||||||
+ cmd, (cmd == VIDIOC_STREAMON) ? "ON" : "OFF");
|
+ cmd, (cmd == VIDIOC_STREAMON) ? "ON" : "OFF");
|
||||||
+ }
|
+ }
|
||||||
|
|
||||||
- return 0;
|
- ctx->streamon = (cmd == VIDIOC_STREAMON);
|
||||||
+ // Both stream off & on effectively clear flag_last
|
+ // Both stream off & on effectively clear flag_last
|
||||||
+ ctx->flag_last = 0;
|
+ ctx->flag_last = 0;
|
||||||
+
|
|
||||||
|
- return 0;
|
||||||
+ ff_mutex_unlock(&ctx->lock);
|
+ ff_mutex_unlock(&ctx->lock);
|
||||||
+
|
+
|
||||||
+ return ret;
|
+ return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ff_v4l2_context_enqueue_frame(V4L2Context* ctx, const AVFrame* frame)
|
int ff_v4l2_context_enqueue_frame(V4L2Context* ctx, const AVFrame* frame)
|
||||||
@@ -608,7 +810,8 @@ int ff_v4l2_context_enqueue_frame(V4L2Context* ctx, const AVFrame* frame)
|
@@ -608,7 +817,8 @@ int ff_v4l2_context_enqueue_frame(V4L2Context* ctx, const AVFrame* frame)
|
||||||
return ff_v4l2_buffer_enqueue(avbuf);
|
return ff_v4l2_buffer_enqueue(avbuf);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -48197,7 +48204,7 @@ index ff1ea8e57b..b2c40636a2 100644
|
|||||||
{
|
{
|
||||||
V4L2m2mContext *s = ctx_to_m2mctx(ctx);
|
V4L2m2mContext *s = ctx_to_m2mctx(ctx);
|
||||||
V4L2Buffer* avbuf;
|
V4L2Buffer* avbuf;
|
||||||
@@ -616,8 +819,9 @@ int ff_v4l2_context_enqueue_packet(V4L2Context* ctx, const AVPacket* pkt)
|
@@ -616,8 +826,9 @@ int ff_v4l2_context_enqueue_packet(V4L2Context* ctx, const AVPacket* pkt)
|
||||||
|
|
||||||
if (!pkt->size) {
|
if (!pkt->size) {
|
||||||
ret = v4l2_stop_decode(ctx);
|
ret = v4l2_stop_decode(ctx);
|
||||||
@ -48208,7 +48215,7 @@ index ff1ea8e57b..b2c40636a2 100644
|
|||||||
s->draining = 1;
|
s->draining = 1;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -626,8 +830,11 @@ int ff_v4l2_context_enqueue_packet(V4L2Context* ctx, const AVPacket* pkt)
|
@@ -626,8 +837,11 @@ int ff_v4l2_context_enqueue_packet(V4L2Context* ctx, const AVPacket* pkt)
|
||||||
if (!avbuf)
|
if (!avbuf)
|
||||||
return AVERROR(EAGAIN);
|
return AVERROR(EAGAIN);
|
||||||
|
|
||||||
@ -48222,7 +48229,7 @@ index ff1ea8e57b..b2c40636a2 100644
|
|||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
return ff_v4l2_buffer_enqueue(avbuf);
|
return ff_v4l2_buffer_enqueue(avbuf);
|
||||||
@@ -636,19 +843,10 @@ int ff_v4l2_context_enqueue_packet(V4L2Context* ctx, const AVPacket* pkt)
|
@@ -636,19 +850,10 @@ int ff_v4l2_context_enqueue_packet(V4L2Context* ctx, const AVPacket* pkt)
|
||||||
int ff_v4l2_context_dequeue_frame(V4L2Context* ctx, AVFrame* frame, int timeout)
|
int ff_v4l2_context_dequeue_frame(V4L2Context* ctx, AVFrame* frame, int timeout)
|
||||||
{
|
{
|
||||||
V4L2Buffer *avbuf;
|
V4L2Buffer *avbuf;
|
||||||
@ -48245,7 +48252,7 @@ index ff1ea8e57b..b2c40636a2 100644
|
|||||||
|
|
||||||
return ff_v4l2_buffer_buf_to_avframe(frame, avbuf);
|
return ff_v4l2_buffer_buf_to_avframe(frame, avbuf);
|
||||||
}
|
}
|
||||||
@@ -656,19 +854,10 @@ int ff_v4l2_context_dequeue_frame(V4L2Context* ctx, AVFrame* frame, int timeout)
|
@@ -656,19 +861,10 @@ int ff_v4l2_context_dequeue_frame(V4L2Context* ctx, AVFrame* frame, int timeout)
|
||||||
int ff_v4l2_context_dequeue_packet(V4L2Context* ctx, AVPacket* pkt)
|
int ff_v4l2_context_dequeue_packet(V4L2Context* ctx, AVPacket* pkt)
|
||||||
{
|
{
|
||||||
V4L2Buffer *avbuf;
|
V4L2Buffer *avbuf;
|
||||||
@ -48268,7 +48275,7 @@ index ff1ea8e57b..b2c40636a2 100644
|
|||||||
|
|
||||||
return ff_v4l2_buffer_buf_to_avpkt(pkt, avbuf);
|
return ff_v4l2_buffer_buf_to_avpkt(pkt, avbuf);
|
||||||
}
|
}
|
||||||
@@ -702,78 +891,158 @@ int ff_v4l2_context_get_format(V4L2Context* ctx, int probe)
|
@@ -702,78 +898,158 @@ int ff_v4l2_context_get_format(V4L2Context* ctx, int probe)
|
||||||
|
|
||||||
int ff_v4l2_context_set_format(V4L2Context* ctx)
|
int ff_v4l2_context_set_format(V4L2Context* ctx)
|
||||||
{
|
{
|
||||||
@ -61254,32 +61261,35 @@ index 0000000000..92bc13a3df
|
|||||||
+
|
+
|
||||||
diff --git a/pi-util/clean_usr_libs.sh b/pi-util/clean_usr_libs.sh
|
diff --git a/pi-util/clean_usr_libs.sh b/pi-util/clean_usr_libs.sh
|
||||||
new file mode 100755
|
new file mode 100755
|
||||||
index 0000000000..98ab9d6de9
|
index 0000000000..b3b2d5509d
|
||||||
--- /dev/null
|
--- /dev/null
|
||||||
+++ b/pi-util/clean_usr_libs.sh
|
+++ b/pi-util/clean_usr_libs.sh
|
||||||
@@ -0,0 +1,23 @@
|
@@ -0,0 +1,26 @@
|
||||||
+set -e
|
+set -e
|
||||||
+U=/usr/lib/arm-linux-gnueabihf
|
+U=/usr/lib/arm-linux-gnueabihf
|
||||||
+rm -f $U/libavcodec.*
|
+rm -f $U/libavcodec.*
|
||||||
+rm -f $U/libavdevice.*
|
+rm -f $U/libavdevice.*
|
||||||
+rm -f $U/libavfilter.*
|
+rm -f $U/libavfilter.*
|
||||||
+rm -f $U/libavformat.*
|
+rm -f $U/libavformat.*
|
||||||
+rm -f $U/libavresample.*
|
|
||||||
+rm -f $U/libavutil.*
|
+rm -f $U/libavutil.*
|
||||||
|
+rm -f $U/libswresample.*
|
||||||
|
+rm -f $U/libswscale.*
|
||||||
+U=/usr/lib/arm-linux-gnueabihf/neon/vfp
|
+U=/usr/lib/arm-linux-gnueabihf/neon/vfp
|
||||||
+rm -f $U/libavcodec.*
|
+rm -f $U/libavcodec.*
|
||||||
+rm -f $U/libavdevice.*
|
+rm -f $U/libavdevice.*
|
||||||
+rm -f $U/libavfilter.*
|
+rm -f $U/libavfilter.*
|
||||||
+rm -f $U/libavformat.*
|
+rm -f $U/libavformat.*
|
||||||
+rm -f $U/libavresample.*
|
|
||||||
+rm -f $U/libavutil.*
|
+rm -f $U/libavutil.*
|
||||||
|
+rm -f $U/libswresample.*
|
||||||
|
+rm -f $U/libswscale.*
|
||||||
+U=/usr/lib/aarch64-linux-gnu
|
+U=/usr/lib/aarch64-linux-gnu
|
||||||
+rm -f $U/libavcodec.*
|
+rm -f $U/libavcodec.*
|
||||||
+rm -f $U/libavdevice.*
|
+rm -f $U/libavdevice.*
|
||||||
+rm -f $U/libavfilter.*
|
+rm -f $U/libavfilter.*
|
||||||
+rm -f $U/libavformat.*
|
+rm -f $U/libavformat.*
|
||||||
+rm -f $U/libavresample.*
|
|
||||||
+rm -f $U/libavutil.*
|
+rm -f $U/libavutil.*
|
||||||
|
+rm -f $U/libswresample.*
|
||||||
|
+rm -f $U/libswscale.*
|
||||||
+
|
+
|
||||||
diff --git a/pi-util/conf_arm64_native.sh b/pi-util/conf_arm64_native.sh
|
diff --git a/pi-util/conf_arm64_native.sh b/pi-util/conf_arm64_native.sh
|
||||||
new file mode 100644
|
new file mode 100644
|
||||||
|
Loading…
x
Reference in New Issue
Block a user