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 }