Conversation
5ae7775 to
910ad82
Compare
|
I tested this on my RX 6600. While I understand that MF is inferior to AMF, I noticed an issue with delayed frames that can't be resolved with the existing ffmpeg encoder parameters. I've opened a PR that should help: LizardByte/build-deps#72 This will require you to add the |
|
I'm getting a segfault on line 1030 of video.cpp with an Intel dGPU Here's some of my log: https://gist.github.com/brad-richardson/4ad89fbd492ad211463f367c462a7875 Any ideas for configs to try or that I'm missing? |
|
@brad-richardson Yeah, I saw the same issue on my ARM machine. There is a bug on FFmpeg where it double-releases an internal Media Foundation pointer if initialization fails to set an output format. For my ARM system, it didn't like the rate control mode I had set and setting it to FFmpeg's MF support seems pretty poor. It doesn't have a lot of the config parameters plumbed, crashes when init fails, doesn't support GPU surfaces, etc. I think I'm going to put this on hold and work on QSV instead. |
910ad82 to
6120051
Compare
|
On AMD Vega 6 don't work H264 (black screen when streaming). H265 works fine. |
src/platform/common.h
Outdated
| */ | ||
| virtual int set_frame(AVFrame *frame, AVBufferRef *hw_frames_ctx) { | ||
| virtual int set_frame(AVFrame *frame, AVBufferRef *hw_frames_ctx, int target_format) { | ||
| BOOST_LOG(error) << "Illegal call to hwdevice_t::set_frame(). Did you forget to override it?"; |
There was a problem hiding this comment.
This error message is triggered when encoder = software is set (and causes the software encoders to become unavailable).
src/video.cpp
Outdated
| } | ||
|
|
||
| int set_frame(AVFrame *frame, AVBufferRef *hw_frames_ctx) { | ||
| int set_frame(AVFrame *frame, AVBufferRef *hw_frames_ctx, AVPixelFormat target_format) { |
There was a problem hiding this comment.
changing AVPixelFormat here to int (or perhaps updating in all other cases to AVPixelFormat) should fix the issue with software rendering.
|
Apart from the software rendering regression that needs fixing, this looks good to me... with the caveat that my AMD card seems to violate the target bitrate by at least 3x. I'm not really sure why this happens, and manually testing other encoder parameters doesn't help. Of course, don't take my observation re: bitrate as a reason to block merging, as MediaFoundation is never going to be preferred over AMF for AMD cards. |
@cgutman Any thoughts on resuming work on this one (if anything else is needed before merging)? |
|
I'm concerned that GPUs might hit this fallback due to race conditions during driver installation or monitor hotplugging. I want to do some work first to minimize the chance of that happening (and fix the bug in software encoding). |
|
Updating w/ rebase to make this easier to fix conflicts after adjusting clang-format rules |
6120051 to
9ef2add
Compare
9ef2add to
cf64312
Compare
|
I think there may be a leak in the Media Foundation encoder in FFmpeg or maybe something in the Intel driver that I'm testing with, but memory usage increases each time the encoder loads and seems to never drop back to normal. That will probably need to be investigated before this is merged. |
|
This PR is stale because it has been open for 90 days with no activity. Comment or remove the stale label, otherwise this will be closed in 10 days. |
|
This PR was closed because it has been stalled for 10 days with no activity. |
Description
This PR introduces support for Media Foundation encoders (h264_mf and hevc_mf). This enables partial hardware acceleration on Windows systems where NVENC, QSV, and AMD AMF are unsupported, like ARM platforms. I also implemented support for GPU accelerated color conversion when encoding from CPU memory and enabled that feature for Media Foundation.
Screenshot
Issues Fixed or Closed
Type of Change
.github/...)Checklist
Branch Updates
LizardByte requires that branches be up-to-date before merging. This means that after any PR is merged, this branch
must be updated before it can be merged. You must also
Allow edits from maintainers.