/ src / Ryujinx.Graphics.Vic / Types / FrameFormat.cs
FrameFormat.cs
 1  namespace Ryujinx.Graphics.Vic.Types
 2  {
 3      enum FrameFormat
 4      {
 5          Progressive,
 6          InterlacedTopFieldFirst,
 7          InterlacedBottomFieldFirst,
 8          TopField,
 9          BottomField,
10          SubPicProgressive,
11          SubPicInterlacedTopFieldFirst,
12          SubPicInterlacedBottomFieldFirst,
13          SubPicTopField,
14          SubPicBottomField,
15          TopFieldChromaBottom,
16          BottomFieldChromaTop,
17          SubPicTopFieldChromaBottom,
18          SubPicBottomFieldChromaTop,
19      }
20  
21      static class FrameFormatExtensions
22      {
23          public static bool IsField(this FrameFormat frameFormat)
24          {
25              switch (frameFormat)
26              {
27                  case FrameFormat.TopField:
28                  case FrameFormat.BottomField:
29                  case FrameFormat.SubPicTopField:
30                  case FrameFormat.SubPicBottomField:
31                  case FrameFormat.TopFieldChromaBottom:
32                  case FrameFormat.BottomFieldChromaTop:
33                  case FrameFormat.SubPicTopFieldChromaBottom:
34                  case FrameFormat.SubPicBottomFieldChromaTop:
35                      return true;
36              }
37  
38              return false;
39          }
40  
41          public static bool IsInterlaced(this FrameFormat frameFormat)
42          {
43              switch (frameFormat)
44              {
45                  case FrameFormat.InterlacedTopFieldFirst:
46                  case FrameFormat.InterlacedBottomFieldFirst:
47                  case FrameFormat.SubPicInterlacedTopFieldFirst:
48                  case FrameFormat.SubPicInterlacedBottomFieldFirst:
49                      return true;
50              }
51  
52              return false;
53          }
54  
55          public static bool IsInterlacedBottomFirst(this FrameFormat frameFormat)
56          {
57              return frameFormat == FrameFormat.InterlacedBottomFieldFirst ||
58                     frameFormat == FrameFormat.SubPicInterlacedBottomFieldFirst;
59          }
60  
61          public static bool IsTopField(this FrameFormat frameFormat, bool isLuma)
62          {
63              switch (frameFormat)
64              {
65                  case FrameFormat.TopField:
66                  case FrameFormat.SubPicTopField:
67                      return true;
68                  case FrameFormat.TopFieldChromaBottom:
69                  case FrameFormat.SubPicTopFieldChromaBottom:
70                      return isLuma;
71                  case FrameFormat.BottomFieldChromaTop:
72                  case FrameFormat.SubPicBottomFieldChromaTop:
73                      return !isLuma;
74              }
75  
76              return false;
77          }
78      }
79  }