XMMS2

src/include/xmms/xmms_sample.h

Go to the documentation of this file.
00001 /*  XMMS2 - X Music Multiplexer System
00002  *  Copyright (C) 2003-2009 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