1b815c7f3Sopenharmony_ci/*
2b815c7f3Sopenharmony_ci** Copyright (C) 1999-2011 Erik de Castro Lopo <erikd@mega-nerd.com>
3b815c7f3Sopenharmony_ci**
4b815c7f3Sopenharmony_ci** This program is free software; you can redistribute it and/or modify
5b815c7f3Sopenharmony_ci** it under the terms of the GNU Lesser General Public License as published by
6b815c7f3Sopenharmony_ci** the Free Software Foundation; either version 2.1 of the License, or
7b815c7f3Sopenharmony_ci** (at your option) any later version.
8b815c7f3Sopenharmony_ci**
9b815c7f3Sopenharmony_ci** This program is distributed in the hope that it will be useful,
10b815c7f3Sopenharmony_ci** but WITHOUT ANY WARRANTY; without even the implied warranty of
11b815c7f3Sopenharmony_ci** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12b815c7f3Sopenharmony_ci** GNU Lesser General Public License for more details.
13b815c7f3Sopenharmony_ci**
14b815c7f3Sopenharmony_ci** You should have received a copy of the GNU Lesser General Public License
15b815c7f3Sopenharmony_ci** along with this program; if not, write to the Free Software
16b815c7f3Sopenharmony_ci** Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17b815c7f3Sopenharmony_ci*/
18b815c7f3Sopenharmony_ci
19b815c7f3Sopenharmony_ci#include	"sfconfig.h"
20b815c7f3Sopenharmony_ci
21b815c7f3Sopenharmony_ci#include	<stdio.h>
22b815c7f3Sopenharmony_ci
23b815c7f3Sopenharmony_ci#include	"sndfile.h"
24b815c7f3Sopenharmony_ci#include	"common.h"
25b815c7f3Sopenharmony_ci
26b815c7f3Sopenharmony_ci/*------------------------------------------------------------------------------
27b815c7f3Sopenharmony_ci** Public function.
28b815c7f3Sopenharmony_ci*/
29b815c7f3Sopenharmony_ci
30b815c7f3Sopenharmony_ciint
31b815c7f3Sopenharmony_ciraw_open	(SF_PRIVATE *psf)
32b815c7f3Sopenharmony_ci{	int	subformat, error = SFE_NO_ERROR ;
33b815c7f3Sopenharmony_ci
34b815c7f3Sopenharmony_ci	subformat = SF_CODEC (psf->sf.format) ;
35b815c7f3Sopenharmony_ci
36b815c7f3Sopenharmony_ci	psf->endian = SF_ENDIAN (psf->sf.format) ;
37b815c7f3Sopenharmony_ci
38b815c7f3Sopenharmony_ci	if (CPU_IS_BIG_ENDIAN && (psf->endian == 0 || psf->endian == SF_ENDIAN_CPU))
39b815c7f3Sopenharmony_ci		psf->endian = SF_ENDIAN_BIG ;
40b815c7f3Sopenharmony_ci	else if (CPU_IS_LITTLE_ENDIAN && (psf->endian == 0 || psf->endian == SF_ENDIAN_CPU))
41b815c7f3Sopenharmony_ci		psf->endian = SF_ENDIAN_LITTLE ;
42b815c7f3Sopenharmony_ci
43b815c7f3Sopenharmony_ci	psf->blockwidth = psf->bytewidth * psf->sf.channels ;
44b815c7f3Sopenharmony_ci	psf->dataoffset = 0 ;
45b815c7f3Sopenharmony_ci	psf->datalength = psf->filelength ;
46b815c7f3Sopenharmony_ci
47b815c7f3Sopenharmony_ci	switch (subformat)
48b815c7f3Sopenharmony_ci	{	case SF_FORMAT_PCM_S8 :
49b815c7f3Sopenharmony_ci				error = pcm_init (psf) ;
50b815c7f3Sopenharmony_ci				break ;
51b815c7f3Sopenharmony_ci
52b815c7f3Sopenharmony_ci		case SF_FORMAT_PCM_U8 :
53b815c7f3Sopenharmony_ci				error = pcm_init (psf) ;
54b815c7f3Sopenharmony_ci				break ;
55b815c7f3Sopenharmony_ci
56b815c7f3Sopenharmony_ci		case SF_FORMAT_PCM_16 :
57b815c7f3Sopenharmony_ci		case SF_FORMAT_PCM_24 :
58b815c7f3Sopenharmony_ci		case SF_FORMAT_PCM_32 :
59b815c7f3Sopenharmony_ci				error = pcm_init (psf) ;
60b815c7f3Sopenharmony_ci				break ;
61b815c7f3Sopenharmony_ci
62b815c7f3Sopenharmony_ci		case SF_FORMAT_ULAW :
63b815c7f3Sopenharmony_ci				error = ulaw_init (psf) ;
64b815c7f3Sopenharmony_ci				break ;
65b815c7f3Sopenharmony_ci
66b815c7f3Sopenharmony_ci		case SF_FORMAT_ALAW :
67b815c7f3Sopenharmony_ci				error = alaw_init (psf) ;
68b815c7f3Sopenharmony_ci				break ;
69b815c7f3Sopenharmony_ci
70b815c7f3Sopenharmony_ci		case SF_FORMAT_GSM610 :
71b815c7f3Sopenharmony_ci				error = gsm610_init (psf) ;
72b815c7f3Sopenharmony_ci				break ;
73b815c7f3Sopenharmony_ci
74b815c7f3Sopenharmony_ci		/* Lite remove start */
75b815c7f3Sopenharmony_ci
76b815c7f3Sopenharmony_ci		case SF_FORMAT_NMS_ADPCM_16 :
77b815c7f3Sopenharmony_ci		case SF_FORMAT_NMS_ADPCM_24 :
78b815c7f3Sopenharmony_ci		case SF_FORMAT_NMS_ADPCM_32 :
79b815c7f3Sopenharmony_ci				error = nms_adpcm_init (psf) ;
80b815c7f3Sopenharmony_ci				break ;
81b815c7f3Sopenharmony_ci
82b815c7f3Sopenharmony_ci		case SF_FORMAT_FLOAT :
83b815c7f3Sopenharmony_ci				error = float32_init (psf) ;
84b815c7f3Sopenharmony_ci				break ;
85b815c7f3Sopenharmony_ci
86b815c7f3Sopenharmony_ci		case SF_FORMAT_DOUBLE :
87b815c7f3Sopenharmony_ci				error = double64_init (psf) ;
88b815c7f3Sopenharmony_ci				break ;
89b815c7f3Sopenharmony_ci
90b815c7f3Sopenharmony_ci		case SF_FORMAT_DWVW_12 :
91b815c7f3Sopenharmony_ci				error = dwvw_init (psf, 12) ;
92b815c7f3Sopenharmony_ci				break ;
93b815c7f3Sopenharmony_ci
94b815c7f3Sopenharmony_ci		case SF_FORMAT_DWVW_16 :
95b815c7f3Sopenharmony_ci				error = dwvw_init (psf, 16) ;
96b815c7f3Sopenharmony_ci				break ;
97b815c7f3Sopenharmony_ci
98b815c7f3Sopenharmony_ci		case SF_FORMAT_DWVW_24 :
99b815c7f3Sopenharmony_ci				error = dwvw_init (psf, 24) ;
100b815c7f3Sopenharmony_ci				break ;
101b815c7f3Sopenharmony_ci
102b815c7f3Sopenharmony_ci		case SF_FORMAT_VOX_ADPCM :
103b815c7f3Sopenharmony_ci				error = vox_adpcm_init (psf) ;
104b815c7f3Sopenharmony_ci				break ;
105b815c7f3Sopenharmony_ci		/* Lite remove end */
106b815c7f3Sopenharmony_ci
107b815c7f3Sopenharmony_ci		default : return SFE_BAD_OPEN_FORMAT ;
108b815c7f3Sopenharmony_ci		} ;
109b815c7f3Sopenharmony_ci
110b815c7f3Sopenharmony_ci	return error ;
111b815c7f3Sopenharmony_ci} /* raw_open */
112