Skip to content

DirectX D3D11 Scaling Filter #6523

@dashsantosh-mcw

Description

@dashsantosh-mcw

Description of the feature or enhancement you'd like to see in HandBrake

I've implemented a Hardware scaling filter using D3D11 VideoProcessBlt method on FFmpeg and also enabled support for PIX_FMT_D3D11 frames in the MediaFoundation Encoder. The following FFmpeg CLIs work fine

./ffmpeg.exe -hwaccel d3d11va -hwaccel_output_format d3d11 -hide_banner -i bbb_sunflower_2160p_30fps_normal.mp4 -hw_encoding 1 -c:v h264_mf -vframes 100 -loglevel verbose sample.mp4 -y
./ffmpeg.exe -hwaccel d3d11va -hwaccel_output_format d3d11 -hide_banner -i bbb_sunflower_2160p_30fps_normal.mp4 -hw_encoding 1 -c:v h264_mf -vf "scale_d3d11=width=1920:height=1080" -vframes 100 -loglevel verbose sample.mp4 -y

But on integration with HandBrake to enable full hardware pipeline for MF encoders, the output generated is broken - output bitstream's framerate is very low (expected 30fps, obtained random values ranging between 0.01 to 1.5fps) - some frames are corrupted. On un-silencing the ffmpeg logs in decavcodec.c, following error messages from FFmpeg are logged

decode_receive_frame_internal failed = Invalid data found when processing input
Static surface pool size exceeded
get_buffer() failed
thread_get_buffer() failed
decode_slice_headec error
no frame!

Code changes with FFmpeg patch: https://github.com/HandBrake/HandBrake/compare/master...dashsantosh-mcw:HandBrake:d3d11-scaling?expand=1

Any insights on this issue and how to fix this would be appreciated!

What Operating System are you running?

Windows 11

What version of HandBrake are you running?

No response

Where did you download HandBrake from?

No response

Activity Log, Crash Log or any other details

No response

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions