mixer/oss: use class FileDescriptor
This commit is contained in:
parent
c00b6ff999
commit
56cb92fdaf
@ -20,7 +20,7 @@
|
|||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "mixer/MixerInternal.hxx"
|
#include "mixer/MixerInternal.hxx"
|
||||||
#include "config/Block.hxx"
|
#include "config/Block.hxx"
|
||||||
#include "system/fd_util.h"
|
#include "system/FileDescriptor.hxx"
|
||||||
#include "system/Error.hxx"
|
#include "system/Error.hxx"
|
||||||
#include "util/ASCII.hxx"
|
#include "util/ASCII.hxx"
|
||||||
#include "util/Domain.hxx"
|
#include "util/Domain.hxx"
|
||||||
@ -46,7 +46,7 @@ class OssMixer final : public Mixer {
|
|||||||
const char *device;
|
const char *device;
|
||||||
const char *control;
|
const char *control;
|
||||||
|
|
||||||
int device_fd;
|
FileDescriptor device_fd;
|
||||||
int volume_control;
|
int volume_control;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -108,23 +108,23 @@ oss_mixer_init(gcc_unused EventLoop &event_loop,
|
|||||||
void
|
void
|
||||||
OssMixer::Close() noexcept
|
OssMixer::Close() noexcept
|
||||||
{
|
{
|
||||||
assert(device_fd >= 0);
|
assert(device_fd.IsDefined());
|
||||||
|
|
||||||
close(device_fd);
|
device_fd.Close();
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
OssMixer::Open()
|
OssMixer::Open()
|
||||||
{
|
{
|
||||||
device_fd = open_cloexec(device, O_RDONLY, 0);
|
device_fd.OpenReadOnly(device);
|
||||||
if (device_fd < 0)
|
if (!device_fd.IsDefined())
|
||||||
throw FormatErrno("failed to open %s", device);
|
throw FormatErrno("failed to open %s", device);
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (control) {
|
if (control) {
|
||||||
int devmask = 0;
|
int devmask = 0;
|
||||||
|
|
||||||
if (ioctl(device_fd, SOUND_MIXER_READ_DEVMASK, &devmask) < 0)
|
if (ioctl(device_fd.Get(), SOUND_MIXER_READ_DEVMASK, &devmask) < 0)
|
||||||
throw MakeErrno("READ_DEVMASK failed");
|
throw MakeErrno("READ_DEVMASK failed");
|
||||||
|
|
||||||
if (((1 << volume_control) & devmask) == 0)
|
if (((1 << volume_control) & devmask) == 0)
|
||||||
@ -143,9 +143,9 @@ OssMixer::GetVolume()
|
|||||||
int left, right, level;
|
int left, right, level;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
assert(device_fd >= 0);
|
assert(device_fd.IsDefined());
|
||||||
|
|
||||||
ret = ioctl(device_fd, MIXER_READ(volume_control), &level);
|
ret = ioctl(device_fd.Get(), MIXER_READ(volume_control), &level);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
throw MakeErrno("failed to read OSS volume");
|
throw MakeErrno("failed to read OSS volume");
|
||||||
|
|
||||||
@ -166,12 +166,12 @@ OssMixer::SetVolume(unsigned volume)
|
|||||||
{
|
{
|
||||||
int level;
|
int level;
|
||||||
|
|
||||||
assert(device_fd >= 0);
|
assert(device_fd.IsDefined());
|
||||||
assert(volume <= 100);
|
assert(volume <= 100);
|
||||||
|
|
||||||
level = (volume << 8) + volume;
|
level = (volume << 8) + volume;
|
||||||
|
|
||||||
if (ioctl(device_fd, MIXER_WRITE(volume_control), &level) < 0)
|
if (ioctl(device_fd.Get(), MIXER_WRITE(volume_control), &level) < 0)
|
||||||
throw MakeErrno("failed to set OSS volume");
|
throw MakeErrno("failed to set OSS volume");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user