00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __SAMPLE_H__
00018 #define __SAMPLE_H__
00019
00020 #include <glib.h>
00021 #include "xmms/xmms_streamtype.h"
00022
00023 G_BEGIN_DECLS
00024
00025 typedef enum {
00026 XMMS_SAMPLE_FORMAT_UNKNOWN,
00027 XMMS_SAMPLE_FORMAT_S8,
00028 XMMS_SAMPLE_FORMAT_U8,
00029 XMMS_SAMPLE_FORMAT_S16,
00030 XMMS_SAMPLE_FORMAT_U16,
00031 XMMS_SAMPLE_FORMAT_S32,
00032 XMMS_SAMPLE_FORMAT_U32,
00033 XMMS_SAMPLE_FORMAT_FLOAT,
00034 XMMS_SAMPLE_FORMAT_DOUBLE,
00035
00036 } xmms_sample_format_t;
00037
00038 typedef struct xmms_sample_converter_St xmms_sample_converter_t;
00039
00040
00041 typedef gint8 xmms_samples8_t;
00042 #define XMMS_SAMPLES8_MIN -128
00043 #define XMMS_SAMPLES8_MAX 127
00044 typedef guint8 xmms_sampleu8_t;
00045 #define XMMS_SAMPLEU8_MAX 255
00046 typedef gint16 xmms_samples16_t;
00047 #define XMMS_SAMPLES16_MIN -32768
00048 #define XMMS_SAMPLES16_MAX 32767
00049 typedef guint16 xmms_sampleu16_t;
00050 #define XMMS_SAMPLEU16_MAX 65535
00051 typedef gint32 xmms_samples32_t;
00052 #define XMMS_SAMPLES32_MIN (-2147483647L-1)
00053 #define XMMS_SAMPLES32_MAX 2147483647L
00054 typedef guint32 xmms_sampleu32_t;
00055 #define XMMS_SAMPLEU32_MAX 4294967295UL
00056 typedef gfloat xmms_samplefloat_t;
00057 typedef gdouble xmms_sampledouble_t;
00058 typedef void xmms_sample_t;
00059
00060 guint xmms_sample_bytes_to_ms (const xmms_stream_type_t *st, guint samples);
00061
00062 static inline gint
00063 xmms_sample_size_get (xmms_sample_format_t fmt)
00064 {
00065 switch (fmt) {
00066 case XMMS_SAMPLE_FORMAT_UNKNOWN:
00067 return -1;
00068 case XMMS_SAMPLE_FORMAT_S8:
00069 return sizeof (xmms_samples8_t);
00070 case XMMS_SAMPLE_FORMAT_U8:
00071 return sizeof (xmms_sampleu8_t);
00072 case XMMS_SAMPLE_FORMAT_S16:
00073 return sizeof (xmms_samples16_t);
00074 case XMMS_SAMPLE_FORMAT_U16:
00075 return sizeof (xmms_sampleu16_t);
00076 case XMMS_SAMPLE_FORMAT_S32:
00077 return sizeof (xmms_samples32_t);
00078 case XMMS_SAMPLE_FORMAT_U32:
00079 return sizeof (xmms_sampleu32_t);
00080 case XMMS_SAMPLE_FORMAT_FLOAT:
00081 return sizeof (xmms_samplefloat_t);
00082 case XMMS_SAMPLE_FORMAT_DOUBLE:
00083 return sizeof (xmms_sampledouble_t);
00084 }
00085 return -1;
00086 }
00087
00088 static inline gboolean
00089 xmms_sample_signed_get (xmms_sample_format_t fmt)
00090 {
00091 switch (fmt) {
00092 case XMMS_SAMPLE_FORMAT_S8:
00093 case XMMS_SAMPLE_FORMAT_S16:
00094 case XMMS_SAMPLE_FORMAT_S32:
00095 return TRUE;
00096 case XMMS_SAMPLE_FORMAT_UNKNOWN:
00097 case XMMS_SAMPLE_FORMAT_U8:
00098 case XMMS_SAMPLE_FORMAT_U16:
00099 case XMMS_SAMPLE_FORMAT_U32:
00100 case XMMS_SAMPLE_FORMAT_FLOAT:
00101 case XMMS_SAMPLE_FORMAT_DOUBLE:
00102 return FALSE;
00103 }
00104 return FALSE;
00105
00106 }
00107
00108 static inline const gchar *
00109 xmms_sample_name_get (xmms_sample_format_t fmt)
00110 {
00111 switch (fmt) {
00112 case XMMS_SAMPLE_FORMAT_UNKNOWN:
00113 return "Unknown";
00114 case XMMS_SAMPLE_FORMAT_S8:
00115 return "S8";
00116 case XMMS_SAMPLE_FORMAT_U8:
00117 return "U8";
00118 case XMMS_SAMPLE_FORMAT_S16:
00119 return "S16";
00120 case XMMS_SAMPLE_FORMAT_U16:
00121 return "U16";
00122 case XMMS_SAMPLE_FORMAT_S32:
00123 return "S32";
00124 case XMMS_SAMPLE_FORMAT_U32:
00125 return "U32";
00126 case XMMS_SAMPLE_FORMAT_FLOAT:
00127 return "FLOAT";
00128 case XMMS_SAMPLE_FORMAT_DOUBLE:
00129 return "DOUBLE";
00130 }
00131 return "UNKNOWN";
00132 }
00133
00134 G_END_DECLS
00135
00136 #endif