Message ID | 20191027041947.24126-1-andriy.gelman@gmail.com |
---|---|
State | Accepted |
Commit | 1aec1183f3e82e9aa20fe23d961f663c1efc45fb |
Headers | show |
On Sun, 27. Oct 00:19, Andriy Gelman wrote: > From: Andriy Gelman <andriy.gelman@gmail.com> > > This part of the code counts the number of planes returned by the v4l2 > device for each queried capture/output buffer. > When testing the GPU h264 encoder on Nvidia's Jetson Nano, this caused an > infinite loop because avbuf->buf.length included some empty buffers (i.e. > where avbuf->buf.m.planes[i].length = 0), meaning that the counter was > never incremented and break was never reached. > This is fixed in the commit by using a well defined iteration range. > --- > libavcodec/v4l2_buffers.c | 8 +++----- > 1 file changed, 3 insertions(+), 5 deletions(-) > > diff --git a/libavcodec/v4l2_buffers.c b/libavcodec/v4l2_buffers.c > index e301dcd6bd..dc1b9eaf24 100644 > --- a/libavcodec/v4l2_buffers.c > +++ b/libavcodec/v4l2_buffers.c > @@ -511,11 +511,9 @@ int ff_v4l2_buffer_initialize(V4L2Buffer* avbuf, int index) > > if (V4L2_TYPE_IS_MULTIPLANAR(ctx->type)) { > avbuf->num_planes = 0; > - for (;;) { > - /* in MP, the V4L2 API states that buf.length means num_planes */ > - if (avbuf->num_planes >= avbuf->buf.length) > - break; > - if (avbuf->buf.m.planes[avbuf->num_planes].length) > + /* in MP, the V4L2 API states that buf.length means num_planes */ > + for (i = 0; i < avbuf->buf.length; i++) { > + if (avbuf->buf.m.planes[i].length) > avbuf->num_planes++; > } > } else > -- > 2.23.0 > ping
On Fri, Nov 1, 2019 at 6:39 AM Andriy Gelman <andriy.gelman@gmail.com> wrote: > On Sun, 27. Oct 00:19, Andriy Gelman wrote: > > From: Andriy Gelman <andriy.gelman@gmail.com> > > > > This part of the code counts the number of planes returned by the v4l2 > > device for each queried capture/output buffer. > > When testing the GPU h264 encoder on Nvidia's Jetson Nano, this caused an > > infinite loop because avbuf->buf.length included some empty buffers (i.e. > > where avbuf->buf.m.planes[i].length = 0), meaning that the counter was > > never incremented and break was never reached. > > This is fixed in the commit by using a well defined iteration range. > > --- > > libavcodec/v4l2_buffers.c | 8 +++----- > > 1 file changed, 3 insertions(+), 5 deletions(-) > > > > diff --git a/libavcodec/v4l2_buffers.c b/libavcodec/v4l2_buffers.c > > index e301dcd6bd..dc1b9eaf24 100644 > > --- a/libavcodec/v4l2_buffers.c > > +++ b/libavcodec/v4l2_buffers.c > > @@ -511,11 +511,9 @@ int ff_v4l2_buffer_initialize(V4L2Buffer* avbuf, > int index) > > > > if (V4L2_TYPE_IS_MULTIPLANAR(ctx->type)) { > > avbuf->num_planes = 0; > > - for (;;) { > > - /* in MP, the V4L2 API states that buf.length means > num_planes */ > > - if (avbuf->num_planes >= avbuf->buf.length) > > - break; > > - if (avbuf->buf.m.planes[avbuf->num_planes].length) > > + /* in MP, the V4L2 API states that buf.length means num_planes > */ > > + for (i = 0; i < avbuf->buf.length; i++) { > > + if (avbuf->buf.m.planes[i].length) > > avbuf->num_planes++; > > } > > } else > > -- > > 2.23.0 > > > > ping > Applied, thank you! > > -- > Andriy > _______________________________________________ > ffmpeg-devel mailing list > ffmpeg-devel@ffmpeg.org > https://ffmpeg.org/mailman/listinfo/ffmpeg-devel > > To unsubscribe, visit link above, or email > ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
diff --git a/libavcodec/v4l2_buffers.c b/libavcodec/v4l2_buffers.c index e301dcd6bd..dc1b9eaf24 100644 --- a/libavcodec/v4l2_buffers.c +++ b/libavcodec/v4l2_buffers.c @@ -511,11 +511,9 @@ int ff_v4l2_buffer_initialize(V4L2Buffer* avbuf, int index) if (V4L2_TYPE_IS_MULTIPLANAR(ctx->type)) { avbuf->num_planes = 0; - for (;;) { - /* in MP, the V4L2 API states that buf.length means num_planes */ - if (avbuf->num_planes >= avbuf->buf.length) - break; - if (avbuf->buf.m.planes[avbuf->num_planes].length) + /* in MP, the V4L2 API states that buf.length means num_planes */ + for (i = 0; i < avbuf->buf.length; i++) { + if (avbuf->buf.m.planes[i].length) avbuf->num_planes++; } } else
From: Andriy Gelman <andriy.gelman@gmail.com> This part of the code counts the number of planes returned by the v4l2 device for each queried capture/output buffer. When testing the GPU h264 encoder on Nvidia's Jetson Nano, this caused an infinite loop because avbuf->buf.length included some empty buffers (i.e. where avbuf->buf.m.planes[i].length = 0), meaning that the counter was never incremented and break was never reached. This is fixed in the commit by using a well defined iteration range. --- libavcodec/v4l2_buffers.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-)