*参照元 [#b2bd0c8d]
#backlinks

*説明 [#hd84564d]
-パス: [[linux-2.6.33/sound/core/pcm_lib.c]]

-FIXME: これは何?
-FIXME: 現在の再生位置、録音位置を取得する。
--説明


**引数 [#u7ae7246]
-struct snd_pcm_substream *substream
--
--[[linux-2.6.33/snd_pcm_substream]]
-struct snd_pcm_runtime *runtime
--
--[[linux-2.6.33/snd_pcm_runtime]]


**返り値 [#r0becd3c]
-snd_pcm_uframes_t
--
--現在の再生、録音位置を返す。
オーバーランあるいはアンダーランの場合は SNDRV_PCM_POS_XRUN を返す。


**参考 [#l59fed48]


*実装 [#td469302]
 static snd_pcm_uframes_t
 snd_pcm_update_hw_ptr_pos(struct snd_pcm_substream *substream,
 			  struct snd_pcm_runtime *runtime)
 {
 	snd_pcm_uframes_t pos;
 
-現在の再生、録音位置(オーディオフレーム単位)
--[[linux-2.6.33/snd_pcm_uframes_t]]

 	pos = substream->ops->pointer(substream);
-ドライバから現在の再生、録音位置を取得する。
-substream->ops は snd_pcm_ops 型
--[[linux-2.6.33/snd_pcm_ops]]

 	if (pos == SNDRV_PCM_POS_XRUN)
 		return pos; /* XRUN */
-オーバーラン or アンダーランの場合は、呼び出し元にもオーバーラン or アンダーランを知らせる。
--[[linux-2.6.33/SNDRV_PCM_POS_XRUN]]

 	if (pos >= runtime->buffer_size) {
-バッファサイズを超えた位置が返ってきた場合は、
エラーメッセージを出し、位置を 0 に修正する。

 		if (printk_ratelimit()) {
-
--[[linux-2.6.33/printk_ratelimit()]]

 			char name[16];
 			pcm_debug_name(substream, name, sizeof(name));
 			snd_printd(KERN_ERR  "BUG: %s, pos = 0x%lx, "
 				   "buffer size = 0x%lx, period size = 0x%lx\n",
 				   name, pos, runtime->buffer_size,
 				   runtime->period_size);
-
--[[linux-2.6.33/pcm_debug_name()]]
-
--[[linux-2.6.33/snd_printd()]]

 		}
 		pos = 0;

 	}
 	pos -= pos % runtime->min_align;
 	return pos;
 }


*コメント [#yfdd9dbe]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS