File: VideoAudioInput.cc

package info (click to toggle)
camstream 0.27%2Bdfsg-4
  • links: PTS
  • area: main
  • in suites: squeeze
  • size: 12,368 kB
  • ctags: 5,393
  • sloc: cpp: 17,031; sh: 8,154; asm: 455; ansic: 440; makefile: 343
file content (142 lines) | stat: -rw-r--r-- 2,599 bytes parent folder | download | duplicates (2)
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
/**
  \brief Audio inputs of a video device
  
  This class describes an audio input on the card... Hopefully there are as 
  many audio input as video inputs (and listed in the same order, but well,
  you never know :))
  
*/

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include <sys/ioctl.h>

#include "VideoAudioInput.h"
#include "VideoDeviceLinux.h"

CVideoAudioInput::CVideoAudioInput(CVideoDeviceLinux *video, int channel)
{
   struct video_audio va;
   char buf[33];
   
   pVideo = video;
   Channel = channel;
   
   Flags = 0;

   // Query data 
   va.audio = Channel;
   if (ioctl(pVideo->m_CamFD, VIDIOCGAUDIO, &va) == 0) {
     strncpy(buf, va.name, 32);
     buf[32] = '\0';
     Name = buf;
     
     Flags = va.flags;
   }
   else
     qWarning("CVideoAudioInput: Warning: no channel info available.");
}

// public

int CVideoAudioInput::GetNumber() const
{
   return Channel;
}

QString CVideoAudioInput::GetName() const
{
   return Name;
}

/** Returns true if this audio input can be muted */
bool CVideoAudioInput::IsMutable()
{
   return (Flags & VIDEO_AUDIO_MUTABLE);
}

bool CVideoAudioInput::IsMuted()
{
   struct video_audio va;

   if (Flags & VIDEO_AUDIO_MUTABLE) {
     if (ioctl(pVideo->m_CamFD, VIDIOCGAUDIO, &va) == 0) {
       return (va.flags & VIDEO_AUDIO_MUTE);
     }
   }
   return FALSE;
}

/** 
  \brief Return volume setting (if supported)
  \return An integer in the range 0..65535, or -1 if not supported or on error
*/  
int CVideoAudioInput::GetVolume() const
{
   struct video_audio va;

  if (Flags & VIDEO_AUDIO_VOLUME) {
    if (ioctl(pVideo->m_CamFD, VIDIOCGAUDIO, &va) == 0)
      return va.volume;
   }
   return -1;
}

int CVideoAudioInput::GetBass() const
{
   struct video_audio va;

  if (Flags & VIDEO_AUDIO_BASS) {
    if (ioctl(pVideo->m_CamFD, VIDIOCGAUDIO, &va) == 0)
      return va.bass;
   }
   return -1;
}

int CVideoAudioInput::GetTreble() const
{
   struct video_audio va;

  if (Flags & VIDEO_AUDIO_TREBLE) {
    if (ioctl(pVideo->m_CamFD, VIDIOCGAUDIO, &va) == 0)
      return va.treble;
   }
   return -1;
}



// public slots

void CVideoAudioInput::Mute(bool mute_on)
{
   struct video_audio va;

   if (Flags & VIDEO_AUDIO_MUTABLE) {
     if (ioctl(pVideo->m_CamFD, VIDIOCGAUDIO, &va) == 0) {
       if (mute_on)
         va.flags |= VIDEO_AUDIO_MUTE;
       else
         va.flags &= ~VIDEO_AUDIO_MUTE;
       ioctl(pVideo->m_CamFD, VIDIOCSAUDIO, &va);
     }
   }
}


void CVideoAudioInput::SetVolume(int volume)
{
}


void CVideoAudioInput::SetBass(int bass)
{
}


void CVideoAudioInput::SetTreble(int treble)
{
}