XMMS2
|
00001 /* XMMS2 - X Music Multiplexer System 00002 * Copyright (C) 2003-2011 XMMS2 Team 00003 * 00004 * PLUGINS ARE NOT CONSIDERED TO BE DERIVED WORK !!! 00005 * 00006 * This library is free software; you can redistribute it and/or 00007 * modify it under the terms of the GNU Lesser General Public 00008 * License as published by the Free Software Foundation; either 00009 * version 2.1 of the License, or (at your option) any later version. 00010 * 00011 * This library is distributed in the hope that it will be useful, 00012 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00014 * Lesser General Public License for more details. 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 /* DO NOT CHANGE ORDER! Just add to the end! */ 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