NVDEC (H264): Use separate contexts per channel and decode frames in DTS order (#2671)
* Use separate NVDEC contexts per channel (for FFMPEG) * Remove NVDEC -> VIC frame override hack * Add missing bottom_field_pic_order_in_frame_present_flag * Make FFMPEG logging static * nit: Remove empty lines * New FFMPEG decoding approach -- call h264_decode_frame directly, trim surface cache to reduce memory usage * Fix case * Silence warnings * PR feedback * Per-decoder rather than per-codec ownership of surfaces on the cache
This commit is contained in:
parent
0d23504e30
commit
f4f496cb48
18 changed files with 358 additions and 200 deletions
|
@ -22,21 +22,6 @@ namespace Ryujinx.HLE.HOS.Services.Nv
|
|||
var vic = new VicDevice(Smmu);
|
||||
Host1x.RegisterDevice(ClassId.Nvdec, nvdec);
|
||||
Host1x.RegisterDevice(ClassId.Vic, vic);
|
||||
|
||||
nvdec.FrameDecoded += (FrameDecodedEventArgs e) =>
|
||||
{
|
||||
// FIXME:
|
||||
// Figure out what is causing frame ordering issues on H264.
|
||||
// For now this is needed as workaround.
|
||||
if (e.CodecId == CodecId.H264)
|
||||
{
|
||||
vic.SetSurfaceOverride(e.LumaOffset, e.ChromaOffset, 0);
|
||||
}
|
||||
else
|
||||
{
|
||||
vic.DisableSurfaceOverride();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue