SplitterDestinationInParameter.cs 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. using Ryujinx.Common.Utilities;
  2. using System;
  3. using System.Runtime.InteropServices;
  4. namespace Ryujinx.Audio.Renderer.Parameter
  5. {
  6. /// <summary>
  7. /// Input header for a splitter destination update.
  8. /// </summary>
  9. [StructLayout(LayoutKind.Sequential, Pack = 1)]
  10. public struct SplitterDestinationInParameter
  11. {
  12. /// <summary>
  13. /// Magic of the input header.
  14. /// </summary>
  15. public uint Magic;
  16. /// <summary>
  17. /// Target splitter destination data id.
  18. /// </summary>
  19. public int Id;
  20. /// <summary>
  21. /// Mix buffer volumes storage.
  22. /// </summary>
  23. private MixArray _mixBufferVolume;
  24. /// <summary>
  25. /// The mix to output the result of the splitter.
  26. /// </summary>
  27. public int DestinationId;
  28. /// <summary>
  29. /// Set to true if in use.
  30. /// </summary>
  31. [MarshalAs(UnmanagedType.I1)]
  32. public bool IsUsed;
  33. /// <summary>
  34. /// Reserved/padding.
  35. /// </summary>
  36. private unsafe fixed byte _reserved[3];
  37. [StructLayout(LayoutKind.Sequential, Size = 4 * Constants.MixBufferCountMax, Pack = 1)]
  38. private struct MixArray { }
  39. /// <summary>
  40. /// Mix buffer volumes.
  41. /// </summary>
  42. /// <remarks>Used when a splitter id is specified in the mix.</remarks>
  43. public Span<float> MixBufferVolume => SpanHelpers.AsSpan<MixArray, float>(ref _mixBufferVolume);
  44. /// <summary>
  45. /// The expected constant of any input header.
  46. /// </summary>
  47. private const uint ValidMagic = 0x44444E53;
  48. /// <summary>
  49. /// Check if the magic is valid.
  50. /// </summary>
  51. /// <returns>Returns true if the magic is valid.</returns>
  52. public bool IsMagicValid()
  53. {
  54. return Magic == ValidMagic;
  55. }
  56. }
  57. }