blob: c20cb85f0b3350efb183042a34f7e4c596b88d13 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
#include "main.h"
#include "RawReader.h"
#include <shlwapi.h>
/*
bool IsMyExtension(const wchar_t *filename)
{
const wchar_t *ext = PathFindExtension(filename);
if (ext && *ext)
{
ext++;
return fileTypes.GetAVType(ext) != -1;
}
return false;
}*/
int RawMediaReaderService::CreateRawMediaReader(const wchar_t *filename, ifc_raw_media_reader **out_reader)
{
// TODO:if (IsMyExtension(filename))
if (!_wcsicmp(L".WAV", PathFindExtensionW(filename)))
{
RawMediaReader *raw_reader = new RawMediaReader();
if (!raw_reader)
{
return NErr_OutOfMemory;
}
int ret = raw_reader->Initialize(filename);
if (ret != NErr_Success)
{
delete raw_reader;
return ret;
}
*out_reader = raw_reader;
return NErr_Success;
}
else
{
return NErr_False;
}
}
#define CBCLASS RawMediaReaderService
START_DISPATCH;
CB( CREATERAWMEDIAREADER, CreateRawMediaReader )
END_DISPATCH;
#undef CBCLASS
RawMediaReader::~RawMediaReader()
{
if (soundFile)
sf_close(soundFile);
}
int RawMediaReader::Initialize(const wchar_t *filename)
{
info.format = 0;
soundFile = sf_wchar_open(filename, SFM_READ, &info);
if (!soundFile)
return NErr_FileNotFound;
return NErr_Success;
}
int RawMediaReader::Read(void *out_buffer, size_t buffer_size, size_t *bytes_read)
{
sf_count_t sf_read = sf_read_raw(soundFile, out_buffer, buffer_size);
if (sf_read == 0)
return NErr_EndOfFile;
*bytes_read = (size_t)sf_read;
return NErr_Success;
}
size_t RawMediaReader::Release()
{
delete this;
return 0;
}
#define CBCLASS RawMediaReader
START_DISPATCH;
CB(RELEASE, Release);
CB(RAW_READ, Read);
END_DISPATCH;
#undef CBCLASS
|