[FFmpeg-devel] [PATCH] lavc/cuvid: fail early if GPU can't handle given video resolution

Philip Langdale philipl at overt.org
Mon Jan 2 18:37:43 EET 2017


On Mon, 2 Jan 2017 00:56:18 -0700
Pavel Koshevoy <pkoshevoy at gmail.com> wrote:

> On Sun, Jan 1, 2017 at 6:00 PM,  <pkoshevoy at gmail.com> wrote:
> > From: Pavel Koshevoy <pkoshevoy at gmail.com>
> >
> > NVDEC (CUVID) does not support unlimited video resolutions, so if
> > the resolution of the source is known it can be used during
> > avcodec_open2 call to fail early, rather than failing later during
> > avcodec_send_packet call.
> >
> > This problem surfaced when trying to decode 5120x2700 h246 video on
> > Geforce GT 730 -- avcodec_open2 succeeded but decoding failed.
> > ---
> >  libavcodec/cuvid.c | 4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/libavcodec/cuvid.c b/libavcodec/cuvid.c
> > index 8fc713d..2e70b62 100644
> > --- a/libavcodec/cuvid.c
> > +++ b/libavcodec/cuvid.c
> > @@ -625,8 +625,8 @@ static int
> > cuvid_test_dummy_decoder(AVCodecContext *avctx, CUVIDPARSERPARAMS
> > *cu cuinfo.ChromaFormat = cudaVideoChromaFormat_420;
> > cuinfo.OutputFormat = cudaVideoSurfaceFormat_NV12;
> >
> > -    cuinfo.ulWidth = 1280;
> > -    cuinfo.ulHeight = 720;
> > +    cuinfo.ulWidth = avctx->coded_width ? avctx->coded_width :
> > 1280;
> > +    cuinfo.ulHeight = avctx->coded_height ? avctx->coded_height :
> > 720; cuinfo.ulTargetWidth = cuinfo.ulWidth;
> >      cuinfo.ulTargetHeight = cuinfo.ulHeight;
> >
> > --
> > 2.9.2
> >  
> 
> 
> Perhaps a more comprehensive solution is needed.  I've run into the
> same problem again (avcodec_open2 succeeds, decoding spits errors)
> when I tried to play back an mpeg2 stream with YUV422P pixel format.
> 
> I have a new patch but I'd like to test it on a Pascal GPU first.  I
> am still hoping that 422 decoding will work.  It looks like it should
> be supported, but I've observed on Geforce GT 730 that even though I
> can instantiate a cuvid decoder with cudaVideoChromaFormat_422 without
> error -- the decoded video is garbage everywhere except for 16-pixel
> wide column along the left edge of the frame.
> 
> In ee88dcb2 cuvid_handle_video_sequence was hard-coded to error-out if
> the chroma format is not 420.  This looks like an NVIDIA driver/cuvid
> bug... does anyone know how to bring it to their attention?

It is documented as only supporting 420, even though it doesn't return
an error, so it's not a bug per-se - it's just that they don't detect
and return an error, so we do it ourselves.

--phil


More information about the ffmpeg-devel mailing list