alsa-lib-1.0.27.2/_snd_pcm_hw_open()
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*参照元 [#tb5607fa]
#backlinks
*説明 [#p79b0c7e]
-パス: [[alsa-lib-1.0.27.2/src/pcm/pcm_hw.c]]
-FIXME: これは何?
--説明
**引数 [#f0d2a886]
-snd_pcm_t **pcmp
--
--[[alsa-lib-1.0.27.2/snd_pcm_t]]
-const char *name
--
-snd_config_t *root ATTRIBUTE_UNUSED
--
--[[alsa-lib-1.0.27.2/snd_config_t]]
--
--[[alsa-lib-1.0.27.2/ATTRIBUTE_UNUSED]]
-snd_config_t *conf
--
-snd_pcm_stream_t stream
--
--[[alsa-lib-1.0.27.2/snd_pcm_stream_t]]
-int mode
--
**返り値 [#yaa8e4ce]
-int
--
**参考 [#k1514eaa]
*実装 [#y798613a]
/**
* \brief Creates a new hw PCM
* \param pcmp Returns created PCM handle
* \param name Name of PCM
* \param root Root configuration node
* \param conf Configuration node with hw PCM description
* \param stream PCM Stream
* \param mode PCM Mode
* \warning Using of this function might be dangerous in...
* of compatibility reasons. The prototype migh...
* changed in future.
*/
int _snd_pcm_hw_open(snd_pcm_t **pcmp, const char *name,
snd_config_t *root ATTRIBUTE_UNUSED, snd_config_t...
snd_pcm_stream_t stream, int mode)
{
snd_config_iterator_t i, next;
long card = -1, device = 0, subdevice = -1;
const char *str;
int err, sync_ptr_ioctl = 0;
int rate = 0, channels = 0;
snd_pcm_format_t format = SND_PCM_FORMAT_UNKNOWN;
snd_config_t *n;
int nonblock = 1; /* non-block per default */
snd_pcm_chmap_query_t **chmap = NULL;
snd_pcm_hw_t *hw;
-
--[[alsa-lib-1.0.27.2/snd_config_iterator_t]]
-
--[[alsa-lib-1.0.27.2/snd_pcm_format_t]]
-
--[[alsa-lib-1.0.27.2/snd_pcm_chmap_query_t]]
-
--[[alsa-lib-1.0.27.2/snd_pcm_hw_t]]
/* look for defaults.pcm.nonblock definition */
if (snd_config_search(root, "defaults.pcm.nonblock", &n...
err = snd_config_get_bool(n);
if (err >= 0)
nonblock = err;
}
-
--[[alsa-lib-1.0.27.2/snd_config_search()]]
-
--[[alsa-lib-1.0.27.2/snd_config_get_bool()]]
snd_config_for_each(i, next, conf) {
const char *id;
n = snd_config_iterator_entry(i);
if (snd_config_get_id(n, &id) < 0)
continue;
if (snd_pcm_conf_generic_id(id))
continue;
-
--[[alsa-lib-1.0.27.2/snd_config_for_each()]]
-
--[[alsa-lib-1.0.27.2/snd_config_iterator_entry()]]
-
--[[alsa-lib-1.0.27.2/snd_config_get_id()]]
-
--[[alsa-lib-1.0.27.2/snd_pcm_conf_generic_id()]]
if (strcmp(id, "card") == 0) {
err = snd_config_get_integer(n, &card);
if (err < 0) {
err = snd_config_get_string(n, &str);
if (err < 0) {
SNDERR("Invalid type for %s", id);
return -EINVAL;
}
card = snd_card_get_index(str);
if (card < 0) {
SNDERR("Invalid value for %s", id);
return card;
}
}
continue;
}
-
--[[alsa-lib-1.0.27.2/snd_config_get_integer()]]
-
--[[alsa-lib-1.0.27.2/snd_config_get_string()]]
-
--[[alsa-lib-1.0.27.2/snd_card_get_index()]]
-
--[[alsa-lib-1.0.27.2/SNDERR()]]
if (strcmp(id, "device") == 0) {
err = snd_config_get_integer(n, &device);
if (err < 0) {
SNDERR("Invalid type for %s", id);
return err;
}
continue;
}
-
--[[alsa-lib-1.0.27.2/snd_config_get_integer()]]
if (strcmp(id, "subdevice") == 0) {
err = snd_config_get_integer(n, &subdevice);
if (err < 0) {
SNDERR("Invalid type for %s", id);
return err;
}
continue;
}
-
--[[alsa-lib-1.0.27.2/snd_config_get_integer()]]
if (strcmp(id, "sync_ptr_ioctl") == 0) {
err = snd_config_get_bool(n);
if (err < 0)
continue;
sync_ptr_ioctl = err;
continue;
}
-
--[[alsa-lib-1.0.27.2/snd_config_get_bol()]]
if (strcmp(id, "nonblock") == 0) {
err = snd_config_get_bool(n);
if (err < 0)
continue;
nonblock = err;
continue;
}
-
--[[alsa-lib-1.0.27.2/snd_config_get_bool()]]
if (strcmp(id, "rate") == 0) {
long val;
err = snd_config_get_integer(n, &val);
if (err < 0) {
SNDERR("Invalid type for %s", id);
return err;
}
rate = val;
continue;
}
-
--[[alsa-lib-1.0.27.2/snd_config_get_integer()]]
if (strcmp(id, "format") == 0) {
err = snd_config_get_string(n, &str);
if (err < 0) {
SNDERR("invalid type for %s", id);
return err;
}
format = snd_pcm_format_value(str);
continue;
}
-
--[[alsa-lib-1.0.27.2/snd_config_get_string()]]
-
--[[alsa-lib-1.0.27.2/snd_pcm_format_value()]]
if (strcmp(id, "channels") == 0) {
long val;
err = snd_config_get_integer(n, &val);
if (err < 0) {
SNDERR("Invalid type for %s", id);
return err;
}
channels = val;
continue;
}
-
--[[alsa-lib-1.0.27.2/snd_config_get_integer()]]
if (strcmp(id, "chmap") == 0) {
snd_pcm_free_chmaps(chmap);
chmap = _snd_pcm_parse_config_chmaps(n);
if (!chmap) {
SNDERR("Invalid channel map for %s", id);
return -EINVAL;
}
continue;
}
-
--[[alsa-lib-1.0.27.2/snd_pcm_free_chmaps()]]
-
--[[alsa-lib-1.0.27.2/_snd_pcm_parse_config_chmaps()]]
SNDERR("Unknown field %s", id);
snd_pcm_free_chmaps(chmap);
return -EINVAL;
-
--[[alsa-lib-1.0.27.2/snd_pcm_free_chmaps()]]
}
if (card < 0) {
SNDERR("card is not defined");
snd_pcm_free_chmaps(chmap);
return -EINVAL;
}
err = snd_pcm_hw_open(pcmp, name, card, device, subdevi...
mode | (nonblock ? SND_PCM_NONBLOCK : 0),
0, sync_ptr_ioctl);
-
--[[alsa-lib-1.0.27.2/snd_pcm_hw_open()]]
-
--[[alsa-lib-1.0.27.2/SND_PCM_NONBLOCK]]
if (err < 0) {
snd_pcm_free_chmaps(chmap);
return err;
}
if (nonblock && ! (mode & SND_PCM_NONBLOCK)) {
/* revert to blocking mode for read/write access */
snd_pcm_hw_nonblock(*pcmp, 0);
(*pcmp)->mode = mode;
-
--[[alsa-lib-1.0.27.2/snd_pcm_hw_nonblock()]]
} else
/* make sure the SND_PCM_NO_xxx flags don't get lost o...
* way */
(*pcmp)->mode |= mode & (SND_PCM_NO_AUTO_RESAMPLE|
SND_PCM_NO_AUTO_CHANNELS|
SND_PCM_NO_AUTO_FORMAT|
SND_PCM_NO_SOFTVOL);
-
--[[alsa-lib-1.0.27.2/SND_PCM_NO_AUTO_RESAMPLE]]
-
--[[alsa-lib-1.0.27.2/SND_PCM_NO_AUTO_CHANNELS]]
-
--[[alsa-lib-1.0.27.2/SND_PCM_NO_AUTO_FORMAT]]
-
--[[alsa-lib-1.0.27.2/SND_PCM_NO_SOFTVOL]]
hw = (*pcmp)->private_data;
if (format != SND_PCM_FORMAT_UNKNOWN)
hw->format = format;
if (channels > 0)
hw->channels = channels;
if (rate > 0)
hw->rate = rate;
if (chmap)
hw->chmap_override = chmap;
-
--[[alsa-lib-1.0.27.2/SND_PCM_FORMAT_UNKNOWN]]
return 0;
}
*コメント [#m52b5c4d]
終了行:
*参照元 [#tb5607fa]
#backlinks
*説明 [#p79b0c7e]
-パス: [[alsa-lib-1.0.27.2/src/pcm/pcm_hw.c]]
-FIXME: これは何?
--説明
**引数 [#f0d2a886]
-snd_pcm_t **pcmp
--
--[[alsa-lib-1.0.27.2/snd_pcm_t]]
-const char *name
--
-snd_config_t *root ATTRIBUTE_UNUSED
--
--[[alsa-lib-1.0.27.2/snd_config_t]]
--
--[[alsa-lib-1.0.27.2/ATTRIBUTE_UNUSED]]
-snd_config_t *conf
--
-snd_pcm_stream_t stream
--
--[[alsa-lib-1.0.27.2/snd_pcm_stream_t]]
-int mode
--
**返り値 [#yaa8e4ce]
-int
--
**参考 [#k1514eaa]
*実装 [#y798613a]
/**
* \brief Creates a new hw PCM
* \param pcmp Returns created PCM handle
* \param name Name of PCM
* \param root Root configuration node
* \param conf Configuration node with hw PCM description
* \param stream PCM Stream
* \param mode PCM Mode
* \warning Using of this function might be dangerous in...
* of compatibility reasons. The prototype migh...
* changed in future.
*/
int _snd_pcm_hw_open(snd_pcm_t **pcmp, const char *name,
snd_config_t *root ATTRIBUTE_UNUSED, snd_config_t...
snd_pcm_stream_t stream, int mode)
{
snd_config_iterator_t i, next;
long card = -1, device = 0, subdevice = -1;
const char *str;
int err, sync_ptr_ioctl = 0;
int rate = 0, channels = 0;
snd_pcm_format_t format = SND_PCM_FORMAT_UNKNOWN;
snd_config_t *n;
int nonblock = 1; /* non-block per default */
snd_pcm_chmap_query_t **chmap = NULL;
snd_pcm_hw_t *hw;
-
--[[alsa-lib-1.0.27.2/snd_config_iterator_t]]
-
--[[alsa-lib-1.0.27.2/snd_pcm_format_t]]
-
--[[alsa-lib-1.0.27.2/snd_pcm_chmap_query_t]]
-
--[[alsa-lib-1.0.27.2/snd_pcm_hw_t]]
/* look for defaults.pcm.nonblock definition */
if (snd_config_search(root, "defaults.pcm.nonblock", &n...
err = snd_config_get_bool(n);
if (err >= 0)
nonblock = err;
}
-
--[[alsa-lib-1.0.27.2/snd_config_search()]]
-
--[[alsa-lib-1.0.27.2/snd_config_get_bool()]]
snd_config_for_each(i, next, conf) {
const char *id;
n = snd_config_iterator_entry(i);
if (snd_config_get_id(n, &id) < 0)
continue;
if (snd_pcm_conf_generic_id(id))
continue;
-
--[[alsa-lib-1.0.27.2/snd_config_for_each()]]
-
--[[alsa-lib-1.0.27.2/snd_config_iterator_entry()]]
-
--[[alsa-lib-1.0.27.2/snd_config_get_id()]]
-
--[[alsa-lib-1.0.27.2/snd_pcm_conf_generic_id()]]
if (strcmp(id, "card") == 0) {
err = snd_config_get_integer(n, &card);
if (err < 0) {
err = snd_config_get_string(n, &str);
if (err < 0) {
SNDERR("Invalid type for %s", id);
return -EINVAL;
}
card = snd_card_get_index(str);
if (card < 0) {
SNDERR("Invalid value for %s", id);
return card;
}
}
continue;
}
-
--[[alsa-lib-1.0.27.2/snd_config_get_integer()]]
-
--[[alsa-lib-1.0.27.2/snd_config_get_string()]]
-
--[[alsa-lib-1.0.27.2/snd_card_get_index()]]
-
--[[alsa-lib-1.0.27.2/SNDERR()]]
if (strcmp(id, "device") == 0) {
err = snd_config_get_integer(n, &device);
if (err < 0) {
SNDERR("Invalid type for %s", id);
return err;
}
continue;
}
-
--[[alsa-lib-1.0.27.2/snd_config_get_integer()]]
if (strcmp(id, "subdevice") == 0) {
err = snd_config_get_integer(n, &subdevice);
if (err < 0) {
SNDERR("Invalid type for %s", id);
return err;
}
continue;
}
-
--[[alsa-lib-1.0.27.2/snd_config_get_integer()]]
if (strcmp(id, "sync_ptr_ioctl") == 0) {
err = snd_config_get_bool(n);
if (err < 0)
continue;
sync_ptr_ioctl = err;
continue;
}
-
--[[alsa-lib-1.0.27.2/snd_config_get_bol()]]
if (strcmp(id, "nonblock") == 0) {
err = snd_config_get_bool(n);
if (err < 0)
continue;
nonblock = err;
continue;
}
-
--[[alsa-lib-1.0.27.2/snd_config_get_bool()]]
if (strcmp(id, "rate") == 0) {
long val;
err = snd_config_get_integer(n, &val);
if (err < 0) {
SNDERR("Invalid type for %s", id);
return err;
}
rate = val;
continue;
}
-
--[[alsa-lib-1.0.27.2/snd_config_get_integer()]]
if (strcmp(id, "format") == 0) {
err = snd_config_get_string(n, &str);
if (err < 0) {
SNDERR("invalid type for %s", id);
return err;
}
format = snd_pcm_format_value(str);
continue;
}
-
--[[alsa-lib-1.0.27.2/snd_config_get_string()]]
-
--[[alsa-lib-1.0.27.2/snd_pcm_format_value()]]
if (strcmp(id, "channels") == 0) {
long val;
err = snd_config_get_integer(n, &val);
if (err < 0) {
SNDERR("Invalid type for %s", id);
return err;
}
channels = val;
continue;
}
-
--[[alsa-lib-1.0.27.2/snd_config_get_integer()]]
if (strcmp(id, "chmap") == 0) {
snd_pcm_free_chmaps(chmap);
chmap = _snd_pcm_parse_config_chmaps(n);
if (!chmap) {
SNDERR("Invalid channel map for %s", id);
return -EINVAL;
}
continue;
}
-
--[[alsa-lib-1.0.27.2/snd_pcm_free_chmaps()]]
-
--[[alsa-lib-1.0.27.2/_snd_pcm_parse_config_chmaps()]]
SNDERR("Unknown field %s", id);
snd_pcm_free_chmaps(chmap);
return -EINVAL;
-
--[[alsa-lib-1.0.27.2/snd_pcm_free_chmaps()]]
}
if (card < 0) {
SNDERR("card is not defined");
snd_pcm_free_chmaps(chmap);
return -EINVAL;
}
err = snd_pcm_hw_open(pcmp, name, card, device, subdevi...
mode | (nonblock ? SND_PCM_NONBLOCK : 0),
0, sync_ptr_ioctl);
-
--[[alsa-lib-1.0.27.2/snd_pcm_hw_open()]]
-
--[[alsa-lib-1.0.27.2/SND_PCM_NONBLOCK]]
if (err < 0) {
snd_pcm_free_chmaps(chmap);
return err;
}
if (nonblock && ! (mode & SND_PCM_NONBLOCK)) {
/* revert to blocking mode for read/write access */
snd_pcm_hw_nonblock(*pcmp, 0);
(*pcmp)->mode = mode;
-
--[[alsa-lib-1.0.27.2/snd_pcm_hw_nonblock()]]
} else
/* make sure the SND_PCM_NO_xxx flags don't get lost o...
* way */
(*pcmp)->mode |= mode & (SND_PCM_NO_AUTO_RESAMPLE|
SND_PCM_NO_AUTO_CHANNELS|
SND_PCM_NO_AUTO_FORMAT|
SND_PCM_NO_SOFTVOL);
-
--[[alsa-lib-1.0.27.2/SND_PCM_NO_AUTO_RESAMPLE]]
-
--[[alsa-lib-1.0.27.2/SND_PCM_NO_AUTO_CHANNELS]]
-
--[[alsa-lib-1.0.27.2/SND_PCM_NO_AUTO_FORMAT]]
-
--[[alsa-lib-1.0.27.2/SND_PCM_NO_SOFTVOL]]
hw = (*pcmp)->private_data;
if (format != SND_PCM_FORMAT_UNKNOWN)
hw->format = format;
if (channels > 0)
hw->channels = channels;
if (rate > 0)
hw->rate = rate;
if (chmap)
hw->chmap_override = chmap;
-
--[[alsa-lib-1.0.27.2/SND_PCM_FORMAT_UNKNOWN]]
return 0;
}
*コメント [#m52b5c4d]
ページ名: