00001 #ifndef VIDEOCOLOURSPACE_H
00002 #define VIDEOCOLOURSPACE_H
00003
00004 #include <QMap>
00005 #include "videoouttypes.h"
00006
00007 class Matrix
00008 {
00009 public:
00010 Matrix(float m11, float m12, float m13, float m14,
00011 float m21, float m22, float m23, float m24,
00012 float m31, float m32, float m33, float m34);
00013 Matrix();
00014
00015 void setToIdentity(void);
00016 void scale(float val1, float val2, float val3);
00017 void translate(float val1, float val2, float val3);
00018 Matrix & operator*=(const Matrix &r);
00019 void product(int row, const Matrix &r);
00020 void debug(void);
00021 float m[4][4];
00022 };
00023
00024 typedef enum VideoCStd
00025 {
00026 kCSTD_Unknown = 0,
00027 kCSTD_ITUR_BT_601,
00028 kCSTD_ITUR_BT_709,
00029 kCSTD_SMPTE_240M,
00030 } VideoCStd;
00031
00032 class VideoColourSpace
00033 {
00034 public:
00035 VideoColourSpace(VideoCStd colour_std = kCSTD_ITUR_BT_601);
00036 ~VideoColourSpace() { }
00037
00038 PictureAttributeSupported SupportedAttributes(void) const
00039 { return m_supported_attributes; }
00040 void SetSupportedAttributes(PictureAttributeSupported supported);
00041
00042 void* GetMatrix(void) { return &m_matrix.m; }
00043 bool HasChanged(void) const { return m_changed; }
00044
00045 int GetPictureAttribute(PictureAttribute attribute);
00046 int SetPictureAttribute(PictureAttribute attribute, int value);
00047 void SetColourSpace(VideoCStd csp = kCSTD_Unknown);
00048
00049 private:
00050 void SetStudioLevels(bool studio);
00051 void SetBrightness(int value);
00052 void SetContrast(int value);
00053 void SetHue(int value);
00054 void SetSaturation(int value);
00055
00056 void SaveValue(PictureAttribute attribute, int value);
00057 void Update(void);
00058 void Debug(void);
00059
00060 private:
00061 PictureAttributeSupported m_supported_attributes;
00062 QMap<PictureAttribute,int> m_db_settings;
00063
00064 bool m_changed;
00065 bool m_studioLevels;
00066 float m_brightness;
00067 float m_contrast;
00068 float m_saturation;
00069 float m_hue;
00070 VideoCStd m_colourSpace;
00071 Matrix m_matrix;
00072 };
00073
00074 #endif