projects
/
dcpomatic.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Mostly-merge master.
[dcpomatic.git]
/
src
/
lib
/
sndfile_decoder.cc
diff --git
a/src/lib/sndfile_decoder.cc
b/src/lib/sndfile_decoder.cc
index 432f73f0d66f5b30e6c8068a13266719cf9c197b..67bb25e0dc71e56fe5678c8bef2b25bd0f17c655 100644
(file)
--- a/
src/lib/sndfile_decoder.cc
+++ b/
src/lib/sndfile_decoder.cc
@@
-18,10
+18,13
@@
*/
#include <iostream>
*/
#include <iostream>
+#ifdef DCPOMATIC_WINDOWS
+#include <windows.h>
+#define ENABLE_SNDFILE_WINDOWS_PROTOTYPES 1
+#endif
#include <sndfile.h>
#include "sndfile_content.h"
#include "sndfile_decoder.h"
#include <sndfile.h>
#include "sndfile_content.h"
#include "sndfile_decoder.h"
-#include "film.h"
#include "exceptions.h"
#include "audio_buffers.h"
#include "exceptions.h"
#include "audio_buffers.h"
@@
-33,14
+36,20
@@
using std::min;
using std::cout;
using boost::shared_ptr;
using std::cout;
using boost::shared_ptr;
-SndfileDecoder::SndfileDecoder (shared_ptr<const Film> f, shared_ptr<const SndfileContent> c)
- : Decoder (f)
- , AudioDecoder (f, c)
+SndfileDecoder::SndfileDecoder (shared_ptr<const SndfileContent> c)
+ : AudioDecoder (c)
, _sndfile_content (c)
, _deinterleave_buffer (0)
{
_info.format = 0;
, _sndfile_content (c)
, _deinterleave_buffer (0)
{
_info.format = 0;
+
+ /* Here be monsters. See fopen_boost for similar shenanigans */
+#ifdef DCPOMATIC_WINDOWS
+ _sndfile = sf_wchar_open (_sndfile_content->path(0).c_str(), SFM_READ, &_info);
+#else
_sndfile = sf_open (_sndfile_content->path(0).string().c_str(), SFM_READ, &_info);
_sndfile = sf_open (_sndfile_content->path(0).string().c_str(), SFM_READ, &_info);
+#endif
+
if (!_sndfile) {
throw DecodeError (_("could not open audio file for reading"));
}
if (!_sndfile) {
throw DecodeError (_("could not open audio file for reading"));
}
@@
-94,11
+103,11
@@
SndfileDecoder::pass ()
}
data->set_frames (this_time);
}
data->set_frames (this_time);
- audio (data,
_done * TIME_HZ / audio_frame_rate (
));
+ audio (data,
ContentTime::from_frames (_done, audio_frame_rate ()
));
_done += this_time;
_remaining -= this_time;
_done += this_time;
_remaining -= this_time;
- return
true
;
+ return
_remaining == 0
;
}
int
}
int
@@
-107,10
+116,10
@@
SndfileDecoder::audio_channels () const
return _info.channels;
}
return _info.channels;
}
-
AudioContent::Fra
me
+
ContentTi
me
SndfileDecoder::audio_length () const
{
SndfileDecoder::audio_length () const
{
- return
_info.frames
;
+ return
ContentTime::from_frames (_info.frames, audio_frame_rate ())
;
}
int
}
int
@@
-123,7
+132,8
@@
void
SndfileDecoder::seek (ContentTime t, bool accurate)
{
Decoder::seek (t, accurate);
SndfileDecoder::seek (ContentTime t, bool accurate)
{
Decoder::seek (t, accurate);
+ AudioDecoder::seek (t, accurate);
- _done = t
* audio_frame_rate() / TIME_HZ
;
+ _done = t
.frames (audio_frame_rate ())
;
_remaining = _info.frames - _done;
}
_remaining = _info.frames - _done;
}