summaryrefslogtreecommitdiff
path: root/inc/profiles/profile_data.h
diff options
context:
space:
mode:
Diffstat (limited to 'inc/profiles/profile_data.h')
-rw-r--r--inc/profiles/profile_data.h213
1 files changed, 213 insertions, 0 deletions
diff --git a/inc/profiles/profile_data.h b/inc/profiles/profile_data.h
new file mode 100644
index 0000000..7ae01d2
--- /dev/null
+++ b/inc/profiles/profile_data.h
@@ -0,0 +1,213 @@
+/*
+ * File: profile_data.h
+ * Author: savop
+ *
+ * Created on 5. Januar 2010, 12:27
+ */
+
+#ifndef _PROFILE_DATA_H
+#define _PROFILE_DATA_H
+
+#ifdef __cplusplus
+#include <vdr/tools.h>
+extern "C" {
+#include <libavformat/avformat.h>
+#include <libavcodec/avcodec.h>
+}
+#endif
+
+#define MAX_BITRATES 32 ///< maximum amount of different CBR bitrates
+#define MAX_CHANNEL_LAYOUTS 20 ///< maximum amount of different channel layout modes
+#define MAX_SAMPLE_RATES 16 ///< maximum amount of different sampling rates
+
+#define Kbps(x) x*1000 ///< Kbit per second
+#define Mbps(x) x*1000*1000 ///< Mbit per second
+#define KHz(x) x*1000
+#define MHz(x) x*1000*1000
+
+#define CHANNEL_LAYOUT_10 CH_LAYOUT_MONO ///< 1/0 1
+#define CHANNEL_LAYOUT_10_1 (CHANNEL_LAYOUT_10|CH_LOW_FREQUENCY)///< 1/0 1.1 (incl. LFE)
+#define CHANNEL_LAYOUT_20 CH_LAYOUT_STEREO ///< 2/0 2
+#define CHANNEL_LAYOUT_20_1 (CHANNEL_LAYOUT_20|CH_LOW_FREQUENCY)///< 2/0 2.1 (incl. LFE)
+#define CHANNEL_LAYOUT_21 (CH_LAYOUT_STEREO|CH_BACK_CENTER) ///< 2/1 3
+#define CHANNEL_LAYOUT_21_1 (CHANNEL_LAYOUT_21|CH_LOW_FREQUENCY)///< 2/1 3.1 (incl. LFE)
+#define CHANNEL_LAYOUT_22 CH_LAYOUT_QUAD ///< 2/2 4
+#define CHANNEL_LAYOUT_22_1 (CHANNEL_LAYOUT_22|CH_LOW_FREQUENCY)///< 2/2 4.1 (incl. LFE)
+#define CHANNEL_LAYOUT_30 CH_LAYOUT_SURROUND ///< 3/0 3
+#define CHANNEL_LAYOUT_30_1 (CHANNEL_LAYOUT_30|CH_LOW_FREQUENCY)///< 3/0 3.1 (incl. LFE)
+#define CHANNEL_LAYOUT_31 (CH_LAYOUT_SURROUND|CH_BACK_CENTER) ///< 3/1 4
+#define CHANNEL_LAYOUT_31_1 (CHANNEL_LAYOUT_31|CH_LOW_FREQUENCY)///< 3/1 4.1 (incl. LFE)
+#define CHANNEL_LAYOUT_32 CH_LAYOUT_5POINT0 ///< 3/2 5
+#define CHANNEL_LAYOUT_5_1 CH_LAYOUT_5POINT1 ///< 5.1 5.1 (incl. LFE)
+#define CHANNEL_LAYOUT_7_1 CH_LAYOUT_7POINT1 ///< 7.1 7.1 (incl. LFE)
+
+/**
+ * The combination of DLNA profile ID and the corresponding mime type
+ *
+ * This complies with the DLNA media format guidelines. Though this is very
+ * similar to the profile structure of libdlna, it comes without the additional
+ * label field as it seams to be not needed.
+ */
+struct DLNAProfile {
+ const char* ID; ///< the DLNA profile ID
+ const char* mime; ///< the mime type of the resource
+};
+
+/**
+ * The DLNA profile for a icon image
+ *
+ * This complies with the DLNA media format guidelines. It contains a valid
+ * mime type, the resolution of the image and the corresponding bit depth
+ */
+struct DLNAIconProfile {
+ const char* mime; ///< the mime type of the image
+ unsigned short width; ///< image width in pixel
+ unsigned short height; ///< image height in pixel
+ unsigned char bitDepth; ///< bit depth in bits per pixel
+};
+
+enum VideoContainerProfile {
+ DLNA_VCP_UNKNOWN=-1,
+ DLNA_VCP_MPEG1=0,
+ DLNA_VCP_MPEG2_PS,
+ DLNA_VCP_MPEG2_TS,
+ DLNA_VCP_MPEG2_TS_T,
+ DLNA_VCP_MPEG2_TS_ISO,
+ DLNA_VCP_MP4,
+ DLNA_VCP_3GPP,
+ DLNA_VCP_ASF,
+};
+
+enum VideoPortionProfile {
+ DLNA_VPP_UNKNOWN=-1,
+ DLNA_VPP_MPEG1=0,
+ DLNA_VPP_MPEG2_PAL_SD,
+ DLNA_VPP_MPEG2_PAL_HD,
+ DLNA_VPP_MPEG2_NTSC_SD,
+ DLNA_VPP_MPEG2_NTSC_HD,
+ DLNA_VPP_MPEG2_SP,
+ DLNA_VPP_MPEG2_MP_LL,
+ DLNA_VPP_MPEG4_P2_SP_L0B,
+ DLNA_VPP_MPEG4_P2_SP_L2,
+ DLNA_VPP_MPEG4_P2_SP_L3,
+ DLNA_VPP_MPEG4_P2_SP_L3_VGA,
+ DLNA_VPP_MPEG4_P2_ASP_L5,
+ DLNA_VPP_MPEG4_P2_ASP_L5_SO,
+ DLNA_VPP_MPEG4_P2_ASP_L4_SO,
+ DLNA_VPP_MPEG4_P2_H263_P0_L10,
+ DLNA_VPP_MPEG4_P2_H263_P3_L10,
+ DLNA_VPP_MPEG4_P2_CO,
+ DLNA_VPP_MPEG4_P10_MP_SD,
+ DLNA_VPP_MPEG4_P10_MP_HD,
+ DLNA_VPP_MPEG4_P10_BL_L3_SD,
+ DLNA_VPP_MPEG4_P10_BL_L3L_SD,
+ DLNA_VPP_MPEG4_P10_BL_CIF30,
+ DLNA_VPP_MPEG4_P10_BL_L2_CIF30,
+ DLNA_VPP_MPEG4_P10_BL_CIF15,
+ DLNA_VPP_MPEG4_P10_BL_L12_CIF15,
+ DLNA_VPP_MPEG4_P10_BL_L1B_QCIF
+};
+
+enum AudioPortionProfile {
+ DLNA_APP_UNKNOWN=-1,
+ DLNA_APP_LPCM=0,
+ DLNA_APP_MPEG1_L1,
+ DLNA_APP_MPEG1_L2,
+ DLNA_APP_MPEG1_L3,
+ DLNA_APP_MPEG1_L3X,
+ DLNA_APP_MPEG2_L2, //TODO: Distinguish MPEG1 oder MPEG2 audio with FFMPEG
+ DLNA_APP_AAC,
+ DLNA_APP_AAC_MULT5,
+ DLNA_APP_AAC_LTP,
+ DLNA_APP_AAC_LTP_MULT5,
+ DLNA_APP_AAC_LTP_MULT7,
+ DLNA_APP_HEAAC,
+ DLNA_APP_HEAAC_L2,
+ DLNA_APP_HEAAC_MULT5,
+ DLNA_APP_ATRAC3plus,
+ DLNA_APP_AC3,
+ DLNA_APP_XAC3,
+ DLNA_APP_G726,
+ DLNA_APP_AMR,
+ DLNA_APP_AMR_WBplus,
+ DLNA_APP_BL_QCIF15,
+ DLNA_APP_BSAC,
+ DLNA_APP_BSAC_MULT5
+};
+
+struct DLNAVideoMapping {
+ DLNAProfile* Profile;
+ VideoContainerProfile VideoContainer;
+ VideoPortionProfile VideoProfile;
+ AudioPortionProfile AudioProfile;
+};
+
+struct AcceptedBitrates {
+ /**
+ * <b>true</b> if VBR, <b>false</b> otherwise
+ */
+ bool VBR;
+ /**
+ * list of valid bitrates.
+ *
+ * if VBR is true, the array must contain exactly two items.
+ * The first item is the minimum and the second item is the maximum bitrate
+ *
+ * The bitrate unit is bps. So, if you have 15bps, it is 15000000bps
+ */
+ int bitrates[MAX_BITRATES];
+};
+
+struct AcceptedResolution {
+ /**
+ * Screen width
+ */
+ int width;
+ /**
+ * Screen height
+ */
+ int height;
+ /**
+ * Frames per second
+ *
+ * this value may contain a higher value which is divided by the multiplier
+ * given in <b>multiplier</b>
+ */
+ int fps;
+ /**
+ * Multiplier for calculating FPS
+ *
+ * The multiplier typically contains values like 1 or 1001 to calculate
+ * the exact frame rate of 29,97 FPS in most NTSC systems
+ */
+ int multiplier;
+};
+
+struct AcceptedAudioChannels {
+ int max_channels;
+ int64_t layouts[MAX_CHANNEL_LAYOUTS];
+ bool supportsLFE;
+};
+
+struct AcceptedSamplingRates {
+ int rates[MAX_SAMPLE_RATES];
+};
+
+class cDLNAProfiler {
+public:
+ virtual DLNAProfile* probeDLNAProfile(AVFormatContext* FormatCtx) = 0;
+};
+
+class cAudioProfiler {
+public:
+ virtual AudioPortionProfile probeAudioProfile(AVFormatContext* FormatCtx) = 0;
+};
+
+class cVideoProfiler {
+public:
+ virtual VideoPortionProfile probeVideoProfile(AVFormatContext* FormatCtx) = 0;
+ virtual VideoContainerProfile probeContainerProfile(AVFormatContext* FormatCtx) = 0;
+};
+
+#endif /* _PROFILE_DATA_H */
+