[FFmpeg-devel] [PATCH v13 06/15] avcodec/vaapi_encode: move the dpb logic from VAAPI to base layer

Lynne dev at lynne.ee
Mon Jun 10 05:00:32 EEST 2024


On 07/06/2024 18:48, Lynne wrote:
> On 07/06/2024 17:22, Wu, Tong1 wrote:
>>> From: ffmpeg-devel <ffmpeg-devel-bounces at ffmpeg.org> On Behalf Of Lynne
>>> via ffmpeg-devel
>>> Sent: Friday, June 7, 2024 11:10 PM
>>> To: ffmpeg-devel at ffmpeg.org
>>> Cc: Lynne <dev at lynne.ee>
>>> Subject: Re: [FFmpeg-devel] [PATCH v13 06/15] avcodec/vaapi_encode: move
>>> the dpb logic from VAAPI to base layer
>>>
>>> On 03/06/2024 11:18, tong1.wu-at-intel.com at ffmpeg.org wrote:
>>>> From: Tong Wu <tong1.wu at intel.com>
>>>>
>>>> Move receive_packet function to base. This requires adding *alloc,
>>>> *issue, *output, *free as hardware callbacks. HWBaseEncodePicture is
>>>> introduced as the base layer structure. The related parameters in
>>>> VAAPIEncodeContext are also extracted to HWBaseEncodeContext. Then DPB
>>>> management logic can be fully extracted to base layer as-is.
>>>>
>>>> Signed-off-by: Tong Wu <tong1.wu at intel.com>
>>>> ---
>>>>    libavcodec/Makefile             |   2 +-
>>>>    libavcodec/hw_base_encode.c     | 594 ++++++++++++++++++++++++
>>>>    libavcodec/hw_base_encode.h     | 124 +++++
>>>>    libavcodec/vaapi_encode.c       | 793 +++++ 
>>>> ---------------------------
>>>>    libavcodec/vaapi_encode.h       | 102 +---
>>>>    libavcodec/vaapi_encode_av1.c   |  35 +-
>>>>    libavcodec/vaapi_encode_h264.c  |  84 ++--
>>>>    libavcodec/vaapi_encode_h265.c  |  53 ++-
>>>>    libavcodec/vaapi_encode_mjpeg.c |  13 +-
>>>>    libavcodec/vaapi_encode_mpeg2.c |  33 +-
>>>>    libavcodec/vaapi_encode_vp8.c   |  18 +-
>>>>    libavcodec/vaapi_encode_vp9.c   |  24 +-
>>>>    12 files changed, 985 insertions(+), 890 deletions(-)
>>>>    create mode 100644 libavcodec/hw_base_encode.c
>>>
>>> This patch doesn't apply,
>>>
>>> error: sha1 information is lacking or useless (libavcodec/ 
>>> hw_base_encode.c).
>>> error: could not build fake ancestor
>>>
>>> Could you resent the patchset or link me a repo so I can work with it?
>>
>> https://github.com/intel-media-ci/ffmpeg/pull/689 This is the same as 
>> v13 please have a try.
> 
> That worked, thanks.

I don't think the behaviour is correct when the encoding length is less 
than the decode delay. In my old Vulkan code, I had this piece of code 
in the initialization function:

 > if (!src) {
 >     ctx->end_of_stream = 1;
 >     /* Fix timestamps if we hit end-of-stream before the initial
 >      * decode delay has elapsed. */
 >     if (ctx->input_order < ctx->decode_delay)
 >         ctx->dts_pts_diff = ctx->pic_end->pts - ctx->first_pts;
 >     return AVERROR_EOF;
 > }

I think a flush function should be added, to be called by each encoder, 
to make sure the timestamps remain correct.

Also, the D3D12VA structures need an FF prefix, e.g.
D3D12VAEncodeContext -> FFD3D12VAEncodeContext.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_0xA2FEA5F03F034464.asc
Type: application/pgp-keys
Size: 624 bytes
Desc: OpenPGP public key
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20240610/bd6370dc/attachment.key>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature.asc
Type: application/pgp-signature
Size: 236 bytes
Desc: OpenPGP digital signature
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20240610/bd6370dc/attachment.sig>


More information about the ffmpeg-devel mailing list