00001
00002
00003 #ifndef _VIDEOOUT_TYPES_H_
00004 #define _VIDEOOUT_TYPES_H_
00005
00006 #include <QString>
00007 #include <QObject>
00008 #include <QSize>
00009
00010 typedef enum PIPState
00011 {
00012 kPIPOff = 0,
00013 kPIPonTV,
00014 kPIPStandAlone,
00015 kPBPLeft,
00016 kPBPRight,
00017 } PIPState;
00018
00019 typedef enum PIPLocation
00020 {
00021 kPIPTopLeft = 0,
00022 kPIPBottomLeft,
00023 kPIPTopRight,
00024 kPIPBottomRight,
00025 kPIP_END
00026 } PIPLocation;
00027
00028 typedef enum ZoomDirection
00029 {
00030 kZoomHome = 0,
00031 kZoomIn,
00032 kZoomOut,
00033 kZoomUp,
00034 kZoomDown,
00035 kZoomLeft,
00036 kZoomRight,
00037 kZoomAspectUp,
00038 kZoomAspectDown,
00039 } ZoomDirection;
00040
00041 typedef enum AspectOverrideMode
00042 {
00043 kAspect_Toggle = -1,
00044 kAspect_Off = 0,
00045 kAspect_4_3,
00046 kAspect_16_9,
00047 kAspect_14_9,
00048 kAspect_2_35_1,
00049 kAspect_END
00050 } AspectOverrideMode;
00051
00052 typedef enum AdjustFillMode
00053 {
00054 kAdjustFill_Toggle = -1,
00055 kAdjustFill_Off = 0,
00056 kAdjustFill_Half,
00057 kAdjustFill_Full,
00058 kAdjustFill_HorizontalStretch,
00059 kAdjustFill_VerticalStretch,
00060 kAdjustFill_HorizontalFill,
00061 kAdjustFill_VerticalFill,
00062 kAdjustFill_END,
00063 kAdjustFill_AutoDetect_DefaultOff,
00064 kAdjustFill_AutoDetect_DefaultHalf,
00065 } AdjustFillMode;
00066
00067 typedef enum LetterBoxColour
00068 {
00069 kLetterBoxColour_Toggle = -1,
00070 kLetterBoxColour_Black = 0,
00071 kLetterBoxColour_Gray25,
00072 kLetterBoxColour_END
00073 } LetterBoxColour;
00074
00075 typedef enum FrameScanType
00076 {
00077 kScan_Ignore = -1,
00078 kScan_Detect = 0,
00079 kScan_Interlaced = 1,
00080 kScan_Intr2ndField = 2,
00081 kScan_Progressive = 3,
00082 } FrameScanType;
00083
00084 typedef enum PictureAttribute
00085 {
00086 kPictureAttribute_None = 0,
00087 kPictureAttribute_MIN = 1,
00088 kPictureAttribute_Brightness = 1,
00089 kPictureAttribute_Contrast,
00090 kPictureAttribute_Colour,
00091 kPictureAttribute_Hue,
00092 kPictureAttribute_StudioLevels,
00093 kPictureAttribute_Volume,
00094 kPictureAttribute_MAX
00095 } PictureAttribute;
00096
00097 typedef enum PictureAttributeSupported
00098 {
00099 kPictureAttributeSupported_None = 0x00,
00100 kPictureAttributeSupported_Brightness = 0x01,
00101 kPictureAttributeSupported_Contrast = 0x02,
00102 kPictureAttributeSupported_Colour = 0x04,
00103 kPictureAttributeSupported_Hue = 0x08,
00104 kPictureAttributeSupported_StudioLevels = 0x10,
00105 kPictureAttributeSupported_Volume = 0x20,
00106 } PictureAttributeSupported;
00107
00108 typedef enum StereoscopicMode
00109 {
00110 kStereoscopicModeNone,
00111 kStereoscopicModeSideBySide,
00112 kStereoscopicModeSideBySideDiscard,
00113 kStereoscopicModeTopAndBottom,
00114 kStereoscopicModeTopAndBottomDiscard,
00115 } StereoscopicMode;
00116
00117 inline QString StereoscopictoString(StereoscopicMode mode)
00118 {
00119 switch (mode)
00120 {
00121 case kStereoscopicModeNone:
00122 return QObject::tr("No 3D");
00123 case kStereoscopicModeSideBySide:
00124 return QObject::tr("3D Side by Side");
00125 case kStereoscopicModeSideBySideDiscard:
00126 return QObject::tr("Discard 3D Side by Side");
00127 case kStereoscopicModeTopAndBottom:
00128 return QObject::tr("3D Top and Bottom");
00129 case kStereoscopicModeTopAndBottomDiscard:
00130 return QObject::tr("Discard 3D Top and Bottom");
00131 }
00132 return QObject::tr("Unknown");
00133 }
00134
00135 typedef enum VideoErrorState
00136 {
00137 kError_None = 0x00,
00138 kError_Unknown = 0x01,
00139 kError_Decode = 0x02,
00140 kError_Switch_Renderer = 0x04,
00141 } VideoErrorState;
00142
00143 inline bool is_interlaced(FrameScanType scan)
00144 {
00145 return (kScan_Interlaced == scan) || (kScan_Intr2ndField == scan);
00146 }
00147
00148 inline bool is_progressive(FrameScanType scan)
00149 {
00150 return (kScan_Progressive == scan);
00151 }
00152
00153 inline QString toString(FrameScanType scan, bool brief = false)
00154 {
00155 QString ret = QObject::tr("Unknown");
00156 switch (scan)
00157 {
00158 case kScan_Ignore:
00159 ret = QObject::tr("Ignore"); break;
00160 case kScan_Detect:
00161 ret = QObject::tr("Detect"); break;
00162 case kScan_Interlaced:
00163 if (brief)
00164 ret = QObject::tr("Interlaced");
00165 else
00166 ret = QObject::tr("Interlaced (Normal)");
00167 break;
00168 case kScan_Intr2ndField:
00169 if (brief)
00170 ret = QObject::tr("Interlaced");
00171 else
00172 ret = QObject::tr("Interlaced (Reversed)");
00173 break;
00174 case kScan_Progressive:
00175 ret = QObject::tr("Progressive"); break;
00176 default:
00177 break;
00178 }
00179
00180 ret.detach();
00181 return ret;
00182 }
00183
00184 inline QString toString(PIPLocation location)
00185 {
00186 QString ret = QString::null;
00187 switch (location)
00188 {
00189 case kPIPTopLeft: ret = QObject::tr("Top Left"); break;
00190 case kPIPBottomLeft: ret = QObject::tr("Bottom Left"); break;
00191 case kPIPTopRight: ret = QObject::tr("Top Right"); break;
00192 case kPIPBottomRight: ret = QObject::tr("Bottom Right"); break;
00193 case kPIP_END: break;
00194 }
00195
00196 ret.detach();
00197 return ret;
00198 }
00199
00200 inline QString toString(AspectOverrideMode aspectmode)
00201 {
00202 QString ret = QObject::tr("Off");
00203 switch (aspectmode)
00204 {
00205 case kAspect_4_3: ret = QObject::tr("4:3"); break;
00206 case kAspect_14_9: ret = QObject::tr("14:9"); break;
00207 case kAspect_16_9: ret = QObject::tr("16:9"); break;
00208 case kAspect_2_35_1: ret = QObject::tr("2.35:1"); break;
00209 case kAspect_Toggle:
00210 case kAspect_Off:
00211 case kAspect_END: break;
00212 }
00213
00214 ret.detach();
00215 return ret;
00216 }
00217
00218 inline QString toString(LetterBoxColour letterboxcolour)
00219 {
00220 QString ret = QObject::tr("Black");
00221 switch (letterboxcolour)
00222 {
00223 case kLetterBoxColour_Gray25: ret = QObject::tr("Gray"); break;
00224 case kLetterBoxColour_Black:
00225 case kLetterBoxColour_Toggle:
00226 case kLetterBoxColour_END: break;
00227 }
00228
00229 ret.detach();
00230 return ret;
00231 }
00232
00233 inline QString toXString(LetterBoxColour letterboxcolour)
00234 {
00235 QString ret = "gray0";
00236 switch (letterboxcolour)
00237 {
00238 case kLetterBoxColour_Gray25: ret = "gray25"; break;
00239 case kLetterBoxColour_Black:
00240 case kLetterBoxColour_Toggle:
00241 case kLetterBoxColour_END: break;
00242 }
00243
00244 ret.detach();
00245 return ret;
00246 }
00247
00248 inline float get_aspect_override(AspectOverrideMode aspectmode, float orig)
00249 {
00250 float ret = orig;
00251 switch (aspectmode)
00252 {
00253 case kAspect_4_3: ret = 4.0f / 3.0f; break;
00254 case kAspect_14_9: ret = 14.0f / 9.0f; break;
00255 case kAspect_16_9: ret = 16.0f / 9.0f; break;
00256 case kAspect_2_35_1: ret = 2.35f ; break;
00257 case kAspect_Toggle:
00258 case kAspect_Off:
00259 case kAspect_END: break;
00260 }
00261 return ret;
00262 }
00263
00264 inline QString toString(AdjustFillMode aspectmode)
00265 {
00266 QString ret = QObject::tr("Off");
00267 switch (aspectmode)
00268 {
00269 case kAdjustFill_Half: ret = QObject::tr("Half"); break;
00270 case kAdjustFill_Full: ret = QObject::tr("Full"); break;
00271 case kAdjustFill_HorizontalStretch:
00272 ret = QObject::tr("H.Stretch"); break;
00273 case kAdjustFill_VerticalStretch:
00274 ret = QObject::tr("V.Stretch"); break;
00275 case kAdjustFill_VerticalFill:
00276 ret = QObject::tr("V.Fill"); break;
00277 case kAdjustFill_HorizontalFill:
00278 ret = QObject::tr("H.Fill"); break;
00279 case kAdjustFill_Toggle:
00280 case kAdjustFill_Off:
00281 case kAdjustFill_END: break;
00282 case kAdjustFill_AutoDetect_DefaultOff:
00283 ret = QObject::tr("Auto Detect (Default Off)");
00284 break;
00285 case kAdjustFill_AutoDetect_DefaultHalf:
00286 ret = QObject::tr("Auto Detect (Default Half)");
00287 break;
00288 }
00289
00290 ret.detach();
00291 return ret;
00292 }
00293
00294 inline QString toString(PictureAttribute pictureattribute)
00295 {
00296 QString ret = QObject::tr("None");
00297 switch (pictureattribute)
00298 {
00299 case kPictureAttribute_None: break;
00300 case kPictureAttribute_Brightness:
00301 ret = QObject::tr("Brightness"); break;
00302 case kPictureAttribute_Contrast:
00303 ret = QObject::tr("Contrast"); break;
00304 case kPictureAttribute_Colour:
00305 ret = QObject::tr("Color"); break;
00306 case kPictureAttribute_Hue:
00307 ret = QObject::tr("Hue"); break;
00308 case kPictureAttribute_StudioLevels:
00309 ret = QObject::tr("Studio Levels"); break;
00310 case kPictureAttribute_Volume:
00311 ret = QObject::tr("Volume"); break;
00312 case kPictureAttribute_MAX:
00313 ret = "MAX"; break;
00314 }
00315
00316 ret.detach();
00317 return ret;
00318 }
00319
00320 inline QString toDBString(PictureAttribute pictureattribute)
00321 {
00322 QString ret = QString::null;
00323 switch (pictureattribute)
00324 {
00325 case kPictureAttribute_None: break;
00326 case kPictureAttribute_Brightness:
00327 ret = "brightness"; break;
00328 case kPictureAttribute_Contrast:
00329 ret = "contrast"; break;
00330 case kPictureAttribute_Colour:
00331 ret = "colour"; break;
00332 case kPictureAttribute_Hue:
00333 ret = "hue"; break;
00334 case kPictureAttribute_StudioLevels:
00335 ret = "studiolevels"; break;
00336 case kPictureAttribute_Volume:
00337 case kPictureAttribute_MAX: break;
00338 }
00339
00340 if (ret.isEmpty())
00341 return QString::null;
00342
00343 ret.detach();
00344 return ret;
00345 }
00346
00347 inline QString toXVString(PictureAttribute pictureattribute)
00348 {
00349 QString ret = QString::null;
00350 switch (pictureattribute)
00351 {
00352 case kPictureAttribute_None: break;
00353 case kPictureAttribute_Brightness:
00354 ret = "XV_BRIGHTNESS"; break;
00355 case kPictureAttribute_Contrast:
00356 ret = "XV_CONTRAST"; break;
00357 case kPictureAttribute_Colour:
00358 ret = "XV_SATURATION"; break;
00359 case kPictureAttribute_Hue:
00360 ret = "XV_HUE"; break;
00361 case kPictureAttribute_Volume:
00362 case kPictureAttribute_MAX: break;
00363 }
00364
00365 if (ret.isEmpty())
00366 return QString::null;
00367
00368 ret.detach();
00369 return ret;
00370 }
00371
00372 inline QString toString(PictureAttributeSupported supported)
00373 {
00374 QString ret = "";
00375
00376 if (kPictureAttributeSupported_Brightness & supported)
00377 ret += "Brightness, ";
00378 if (kPictureAttributeSupported_Contrast & supported)
00379 ret += "Contrast, ";
00380 if (kPictureAttributeSupported_Colour & supported)
00381 ret += "Colour, ";
00382 if (kPictureAttributeSupported_Hue & supported)
00383 ret += "Hue, ";
00384 if (kPictureAttributeSupported_StudioLevels & supported)
00385 ret += "Studio Levels, ";
00386 if (kPictureAttributeSupported_Volume & supported)
00387 ret += "Volume, ";
00388
00389 ret.detach();
00390 return ret;
00391 }
00392
00393 inline PictureAttributeSupported toMask(PictureAttribute pictureattribute)
00394 {
00395 PictureAttributeSupported ret = kPictureAttributeSupported_None;
00396 switch (pictureattribute)
00397 {
00398 case kPictureAttribute_None: break;
00399 case kPictureAttribute_Brightness:
00400 ret = kPictureAttributeSupported_Brightness; break;
00401 case kPictureAttribute_Contrast:
00402 ret = kPictureAttributeSupported_Contrast; break;
00403 case kPictureAttribute_Colour:
00404 ret = kPictureAttributeSupported_Colour; break;
00405 case kPictureAttribute_Hue:
00406 ret = kPictureAttributeSupported_Hue; break;
00407 case kPictureAttribute_StudioLevels:
00408 ret = kPictureAttributeSupported_StudioLevels; break;
00409 case kPictureAttribute_Volume:
00410 ret = kPictureAttributeSupported_Volume; break;
00411 case kPictureAttribute_MAX: break;
00412 }
00413 return ret;
00414 }
00415
00416 inline PictureAttribute next(PictureAttributeSupported supported,
00417 PictureAttribute attribute)
00418 {
00419 int i = ((int) attribute + 1) % (int) kPictureAttribute_MAX;
00420 for (int j = 0; j < kPictureAttribute_MAX;
00421 (i = (i+1) % kPictureAttribute_MAX), j++)
00422 {
00423 if (toMask((PictureAttribute) i) & supported)
00424 return (PictureAttribute) i;
00425 }
00426 return kPictureAttribute_None;
00427 }
00428
00429 #endif // _VIDEOOUT_TYPES_H_