fix: don't do empty hwupload for VT

A hwupload without any filter to actually consume the frame would cause VideoToolbox's encoder to produce frames with artifacts. Check if the filter chain actually has a valid filter before adding hwupload.

Signed-off-by: gnattu <gnattuoc@me.com>
pull/11235/head
gnattu 2 months ago
parent 77807a3ddb
commit 220e9e8d5b

@ -5096,13 +5096,16 @@ namespace MediaBrowser.Controller.MediaEncoding
return (null, null, null);
}
/* Make main filters for video stream */
var mainFilters = new List<string>();
// INPUT videotoolbox/memory surface(vram/uma)
// this will pass-through automatically if in/out format matches.
mainFilters.Add("format=nv12|p010le|videotoolbox_vld");
mainFilters.Add("hwupload=derive_device=videotoolbox");
var hwuploadFilters = new List<string>
{
"format=nv12|p010le|videotoolbox_vld",
"hwupload=derive_device=videotoolbox"
};
/* Make main filters for video stream */
var mainFilters = new List<string>();
// hw deint
if (doDeintH2645)
@ -5159,6 +5162,16 @@ namespace MediaBrowser.Controller.MediaEncoding
overlayFilters.Add("overlay_videotoolbox=eof_action=pass:repeatlast=0");
}
var needFiltering = mainFilters.Any(f => !string.IsNullOrEmpty(f)) ||
subFilters.Any(f => !string.IsNullOrEmpty(f)) ||
overlayFilters.Any(f => !string.IsNullOrEmpty(f));
if (needFiltering)
{
hwuploadFilters.AddRange(mainFilters);
mainFilters = hwuploadFilters;
}
return (mainFilters, subFilters, overlayFilters);
}

Loading…
Cancel
Save