[FFmpeg-devel] [PATCH 2/4] avcodec/encode: restructure the core encoding code

Fu, Linjie linjie.fu at intel.com
Fri Feb 28 14:37:44 EET 2020


> -----Original Message-----
> From: ffmpeg-devel <ffmpeg-devel-bounces at ffmpeg.org> On Behalf Of
> Michael Niedermayer
> Sent: Friday, February 28, 2020 19:53
> To: FFmpeg development discussions and patches <ffmpeg-
> devel at ffmpeg.org>
> Subject: Re: [FFmpeg-devel] [PATCH 2/4] avcodec/encode: restructure the
> core encoding code
> 
> On Thu, Feb 27, 2020 at 03:02:00PM -0300, James Almer wrote:
> > This commit follows the same logic as 061a0c14bb, but for the encode API:
> The
> > new public encoding API will no longer be a wrapper around the old
> deprecated
> > one, and the internal API used by the encoders now consists of a single
> > receive_packet() callback that pulls frames as required.
> >
> > Signed-off-by: James Almer <jamrial at gmail.com>
> > ---
> >  libavcodec/avcodec.h  |  12 +-
> >  libavcodec/encode.c   | 268 ++++++++++++++++++++++++++++++++------
> ----
> >  libavcodec/encode.h   |  39 ++++++
> >  libavcodec/internal.h |   7 +-
> >  libavcodec/utils.c    |  12 +-
> >  5 files changed, 268 insertions(+), 70 deletions(-)
> >  create mode 100644 libavcodec/encode.h
> 
> this seems to break build here
> :
> 
> ffbuild/common.mak:59: recipe for target 'libavcodec/vaapi_encode_vp9.o'
> failed
> make: *** [libavcodec/vaapi_encode_vp9.o] Error 1
> libavcodec/vaapi_encode_mjpeg.c:562:6: error: ‘AVCodec {aka struct
> AVCodec}’ has no member named ‘send_frame’; did you mean ‘long_name’?
>      .send_frame     = &ff_vaapi_encode_send_frame,
>       ^~~~~~~~~~
>       long_name
> libavcodec/vaapi_encode_mjpeg.c:562:23: warning: initialization from
> incompatible pointer type [-Wincompatible-pointer-types]
>      .send_frame     = &ff_vaapi_encode_send_frame,
>                        ^
> libavcodec/vaapi_encode_mjpeg.c:562:23: note: (near initialization for
> ‘ff_mjpeg_vaapi_encoder.encode_sub’)
> ffbuild/common.mak:59: recipe for target
> 'libavcodec/vaapi_encode_mjpeg.o' failed
> make: *** [libavcodec/vaapi_encode_mjpeg.o] Error 1
> libavcodec/vaapi_encode_h265.c:1290:6: error: ‘AVCodec {aka struct
> AVCodec}’ has no member named ‘send_frame’; did you mean ‘long_name’?
>      .send_frame     = &ff_vaapi_encode_send_frame,
>       ^~~~~~~~~~
>       long_name
> libavcodec/vaapi_encode_h265.c:1290:23: warning: initialization from
> incompatible pointer type [-Wincompatible-pointer-types]
>      .send_frame     = &ff_vaapi_encode_send_frame,
>                        ^
> libavcodec/vaapi_encode_h265.c:1290:23: note: (near initialization for
> ‘ff_hevc_vaapi_encoder.encode_sub’)
> libavcodec/vaapi_encode_mpeg2.c:700:6: error: ‘AVCodec {aka struct
> AVCodec}’ has no member named ‘send_frame’; did you mean ‘long_name’?
>      .send_frame     = &ff_vaapi_encode_send_frame,
>       ^~~~~~~~~~
>       long_name
> libavcodec/vaapi_encode_mpeg2.c:700:23: warning: initialization from
> incompatible pointer type [-Wincompatible-pointer-types]
>      .send_frame     = &ff_vaapi_encode_send_frame,
>                        ^
> libavcodec/vaapi_encode_mpeg2.c:700:23: note: (near initialization for
> ‘ff_mpeg2_vaapi_encoder.encode_sub’)
> ffbuild/common.mak:59: recipe for target 'libavcodec/vaapi_encode_h265.o'
> failed
> make: *** [libavcodec/vaapi_encode_h265.o] Error 1
> ffbuild/common.mak:59: recipe for target
> 'libavcodec/vaapi_encode_mpeg2.o' failed
> make: *** [libavcodec/vaapi_encode_mpeg2.o] Error 1
> libavcodec/vaapi_encode_h264.c:1354:6: error: ‘AVCodec {aka struct
> AVCodec}’ has no member named ‘send_frame’; did you mean ‘long_name’?
>      .send_frame     = &ff_vaapi_encode_send_frame,
>       ^~~~~~~~~~
>       long_name
> libavcodec/vaapi_encode_h264.c:1354:23: warning: initialization from
> incompatible pointer type [-Wincompatible-pointer-types]
>      .send_frame     = &ff_vaapi_encode_send_frame,
>                        ^
> libavcodec/vaapi_encode_h264.c:1354:23: note: (near initialization for
> ‘ff_h264_vaapi_encoder.encode_sub’)
> ffbuild/common.mak:59: recipe for target 'libavcodec/vaapi_encode_h264.o'
> failed
> make: *** [libavcodec/vaapi_encode_h264.o] Error 1
> libavcodec/vaapi_encode_vp8.c:255:6: error: ‘AVCodec {aka struct AVCodec}’
> has no member named ‘send_frame’; did you mean ‘long_name’?
>      .send_frame     = &ff_vaapi_encode_send_frame,
>       ^~~~~~~~~~
>       long_name
> libavcodec/vaapi_encode_vp8.c:255:23: warning: initialization from
> incompatible pointer type [-Wincompatible-pointer-types]
>      .send_frame     = &ff_vaapi_encode_send_frame,
>                        ^
> libavcodec/vaapi_encode_vp8.c:255:23: note: (near initialization for
> ‘ff_vp8_vaapi_encoder.encode_sub’)
> ffbuild/common.mak:59: recipe for target 'libavcodec/vaapi_encode_vp8.o'
> failed
> make: *** [libavcodec/vaapi_encode_vp8.o] Error 1

I think that's because vaapi_encode (use send_frame) needs to be transferred into the
new API (which removes send_frame) at the same time.

See descriptions in [0/4]:
PATCH 2/4 can't be applied until all the relevant encoders
have been adapted, and said changes squashed into it. This means librav1e, nvenc,
amfenc, v4l2_m2m, and vaapi_enc.

- Linjie


More information about the ffmpeg-devel mailing list