~ubuntu-branches/ubuntu/wily/aegisub/wily-proposed

« back to all changes in this revision

Viewing changes to src/audio_player_openal.h

  • Committer: Package Import Robot
  • Author(s): Sebastian Reichel, Pascal De Vuyst, Juan Picca, Sebastian Reichel
  • Date: 2015-08-04 21:40:50 UTC
  • mfrom: (5.1.1 sid)
  • Revision ID: package-import@ubuntu.com-20150804214050-y2aghm9vdksoc8t7
Tags: 3.2.2+dfsg-1
[ Pascal De Vuyst ]
* Fix Typo in package description (Closes: #739219)

[ Juan Picca ]
* Add patch to fix reproducible build (Closes: #789728)

[ Sebastian Reichel ]
* New upstream release
 - remove vendor directory from orig tarball
* Update Debian Standards Version to 3.9.6

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
// Copyright (c) 2007, Niels Martin Hansen
2
 
// All rights reserved.
3
 
//
4
 
// Redistribution and use in source and binary forms, with or without
5
 
// modification, are permitted provided that the following conditions are met:
6
 
//
7
 
//   * Redistributions of source code must retain the above copyright notice,
8
 
//     this list of conditions and the following disclaimer.
9
 
//   * Redistributions in binary form must reproduce the above copyright notice,
10
 
//     this list of conditions and the following disclaimer in the documentation
11
 
//     and/or other materials provided with the distribution.
12
 
//   * Neither the name of the Aegisub Group nor the names of its contributors
13
 
//     may be used to endorse or promote products derived from this software
14
 
//     without specific prior written permission.
15
 
//
16
 
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17
 
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18
 
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19
 
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
20
 
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21
 
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22
 
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23
 
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24
 
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25
 
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26
 
// POSSIBILITY OF SUCH DAMAGE.
27
 
//
28
 
// Aegisub Project http://www.aegisub.org/
29
 
 
30
 
/// @file audio_player_openal.h
31
 
/// @see audio_player_openal.cpp
32
 
/// @ingroup audio_output
33
 
///
34
 
 
35
 
#ifdef WITH_OPENAL
36
 
#include "include/aegisub/audio_player.h"
37
 
#include "include/aegisub/audio_provider.h"
38
 
 
39
 
#ifdef __WINDOWS__
40
 
#include <al.h>
41
 
#include <alc.h>
42
 
#elif defined(__APPLE__)
43
 
#include <OpenAL/al.h>
44
 
#include <OpenAL/alc.h>
45
 
#else
46
 
#include <AL/al.h>
47
 
#include <AL/alc.h>
48
 
#endif
49
 
 
50
 
#include <vector>
51
 
 
52
 
#include <wx/timer.h>
53
 
 
54
 
class OpenALPlayer : public AudioPlayer, wxTimer {
55
 
        /// Number of OpenAL buffers to use
56
 
        static const ALsizei num_buffers = 8;
57
 
 
58
 
        bool playing = false; ///< Is audio currently playing?
59
 
 
60
 
        float volume = 1.f; ///< Current audio volume
61
 
        ALsizei samplerate; ///< Sample rate of the audio
62
 
        int bpf; ///< Bytes per frame
63
 
 
64
 
        int64_t start_frame = 0; ///< First frame of playbacka
65
 
        int64_t cur_frame = 0; ///< Next frame to write to playback buffers
66
 
        int64_t end_frame = 0; ///< Last frame to play
67
 
 
68
 
        ALCdevice *device = nullptr; ///< OpenAL device handle
69
 
        ALCcontext *context = nullptr; ///< OpenAL sound context
70
 
        ALuint buffers[num_buffers]; ///< OpenAL sound buffers
71
 
        ALuint source = 0; ///< OpenAL playback source
72
 
 
73
 
        /// Index into buffers, first free (unqueued) buffer to be filled
74
 
        ALsizei buf_first_free = 0;
75
 
 
76
 
        /// Index into buffers, first queued (non-free) buffer
77
 
        ALsizei buf_first_queued = 0;
78
 
 
79
 
        /// Number of free buffers
80
 
        ALsizei buffers_free = 0;
81
 
 
82
 
        /// Number of buffers which have been fully played since playback was last started
83
 
        ALsizei buffers_played = 0;
84
 
 
85
 
        wxStopWatch playback_segment_timer;
86
 
 
87
 
        /// Buffer to decode audio into
88
 
        std::vector<char> decode_buffer;
89
 
 
90
 
        /// Fill count OpenAL buffers
91
 
        void FillBuffers(ALsizei count);
92
 
 
93
 
protected:
94
 
        /// wxTimer override to periodically fill available buffers
95
 
        void Notify() override;
96
 
 
97
 
public:
98
 
        OpenALPlayer(AudioProvider *provider);
99
 
        ~OpenALPlayer();
100
 
 
101
 
        void Play(int64_t start,int64_t count) override;
102
 
        void Stop() override;
103
 
        bool IsPlaying() override { return playing; }
104
 
 
105
 
        int64_t GetEndPosition() override { return end_frame; }
106
 
        int64_t GetCurrentPosition() override;
107
 
        void SetEndPosition(int64_t pos) override;
108
 
 
109
 
        void SetVolume(double vol) override { volume = vol; }
110
 
};
111
 
#endif