ちょっと脇道にそれますがChromecastを買ってみました。
私の持っている、TVチューナーと組み合わせると、
凄く良い感じです。
録画サーバーにしてあるUbuntu上では、TV番組を mp4(H.264)に
変換しつつ録画。それを apache + h264 streaming mod で配信。
Chromecast SDKのサンプルをちょっと改造しアプリを用意。
無事、Chromecastを接続したテレビで録画データが再生できました。
ビエラジャンプリンクとか目じゃない位、いい感じです。
というか、私はビエラジャンプリンク対応前のビエラなので、
そんな機能は使ったことありませんが...^^;
ただ、このソフトを真っ当な手段で公開するためには、
DRMの仕組みを勉強しないといけません。
widevineとか言う奴が使えるとか使えないとか...
まだ全然分かってません。
よって、お蔵入りというか私の趣味の範囲で
使用する事になるのだと思います...
2014年6月3日火曜日
2014年5月7日水曜日
avcodec_open2でエラー(-1)
ある日、こんな不思議なエラーが発生するようになって、なんでかなぁ~って
avcodecのソースを眺めてみました。
すると...以下のようなソースが
/* If there is a user-supplied mutex locking routine, call it. */
if (lockmgr_cb) {
if ((*lockmgr_cb)(&codec_mutex, AV_LOCK_OBTAIN))
return -1;
}
entangled_thread_counter++;
if (entangled_thread_counter != 1) {
av_log(avctx, AV_LOG_ERROR, "insufficient thread locking around avcodec_open/close()\n");
ret = -1;
goto end;
}
えっ、排他制御を勝手にやってくれないの?
av_lockmgr_registerで排他制御用の関数を登録したら解決しました。
pthread使って勝手にやってくれれば良いのに、何か拘りがあるのかなぁ?
不思議です。
avcodecのソースを眺めてみました。
すると...以下のようなソースが
/* If there is a user-supplied mutex locking routine, call it. */
if (lockmgr_cb) {
if ((*lockmgr_cb)(&codec_mutex, AV_LOCK_OBTAIN))
return -1;
}
entangled_thread_counter++;
if (entangled_thread_counter != 1) {
av_log(avctx, AV_LOG_ERROR, "insufficient thread locking around avcodec_open/close()\n");
ret = -1;
goto end;
}
えっ、排他制御を勝手にやってくれないの?
av_lockmgr_registerで排他制御用の関数を登録したら解決しました。
pthread使って勝手にやってくれれば良いのに、何か拘りがあるのかなぁ?
不思議です。
2014年4月19日土曜日
sys_config.fex の ir_para で ir_addr_code を指定出来るようになった。
新しいCubieのSDKでは、今まで使えていたリモコンが使えなくなりました。
今更ビルドミスも無いだろうと思い、ドライバの違いを確認していたら、やっぱりありました。
if(SCIRPT_ITEM_VALUE_TYPE_INT != script_get_item("ir_para", "ir_addr_code", &ir_addr_code)){
pr_err("%s: ir_addr_code script_get_item error. \n",__func__ );
ir_addr_code = 0x9f00;
}
ふーん。今までの #define で値を指定する方式では無くなって、
sys_config.fex で変更できるようになったんだね。
折角、今更こんな機能をご丁寧に作りこんだと言うのなら、sys_config.fex には...
「オプション増えたぜー!、ひゃっほー!、俺最高ー!」
ってコメント書いといてよ。
一番新しいと思われるSDK
本職でテンパっていて、音楽再生アプリ開発はとん挫してますが...
cubieboard2は、地道に使ってます。
Cubieの公式サイトには、一番新しいSDKでビルドしたと思われるCubietruckの
イメージがアップされているようなのですが、ソースがアップされてません。
http://cubieboard.org/2014/01/13/upgrade-new-android-for-cubietruckv1-01
Allwinnerからの正規のルートで、これと同じと思われるSDKのソースは入手してはいるのですが、
やっぱりCubieboard用の正規の物も比較用に配布して欲しいなぁと思ってました。
とは言っても、無い物は無いので、諦めていたのですが、全然関係無い調べ物をしているときに見つけました。
Cubietechの中の人のブログっぽいとこにSDKがアップされてる。
https://plus.google.com/+HuangBenn/posts/h2Q1KhWyPdo
なんでこんな所???
ちゃんとリソースのサイトで公開すれば良いのに...
ただし、注意点として、これビルドしてもCubieboard2では起動しませんでした。
多分、カーネルのconfigがcubietruck用になっているようです。
とりあえず、cubietruckで追加されたようなH/W絡みの設定(BTとBroadcomのWIFIとGMAC)
を削除したら起動しました。
本当の所、何が原因だったかは、まだ追及してません。
2013年9月29日日曜日
Cubie Juke Box
とりあえず適当に色々触っていましたが...
この記事を見て「2倍の楽しさ秘めた、高音質ネットワーク機 CD-N500」、なんとなく目標が決まりました。
Cubie Juke Box
[機能]
1) CDのリッピング
cdparanoia を使用する。CDDBからデータを取得する部分をどう実現するか悩み中。
2) AAC or AC3 (DollyDigital?) へのエンコード
libav を使用する
3) SATA接続のHDD搭載
NTFSは、NTFS-3gを使っているので性能がイマイチです。
FATは4Gの制限があるから後々の事を考えるとダメ。
なので、Androidをちょっと改造して、ext4形式でHDDをマウントした。
4) S/PDIF でのパススルー出力
実験中。AC3で圧縮したデータをデコードせずに、そのままアンプに送りたいなぁ...
5) DLNA サーバー & クライアント
サーバーは minidlna を移植して実現できた。
クライアントは、FireAir Receiverというアプリが標準でインストールされていて動作するけど、ソースが公開されているものを探してます。
とりあえず現状で、Skiftaと言うアプリを使って、ソースとレンダラをCubieboard2にすると、スマホで再生操作ができた。
この話題は、また今度。
6) LCDにステータス表示
将来的には漢字が表示できるLCDが欲しいけど、そう言うのがまだ見つからない。
7) 再生・設定アプリ
一応操作できるように自前アプリを作る。Cubieboard2は、IRリモコンも使える。
操作するために、HDMIで画面を出すのもイマイチなので、Skiftaみたいにスマホからも操作できるようにしたい。
こんな感じです。
2013年9月27日金曜日
cubieboard2 + SPDIF + Passthrough
実はこれが一番の目的でした。
パススルー!!です。
折角SPDIFで外部のオーディオ機器と接続しているのですから、PCMに変換せず、そのままのDTS形式でデータを投げたいのです。
でも方法が分からず色々悩みましたが、やっとその答えが見えつつあります。
1.ドライバのソースをひたすら眺める。
A20 の SPDIF のドライバを以下のディレクトリに見つけました。
lichee/linux-3.3/sound/soc/sun7i/spdif/
この中のソースを眺めていると、気になるソースを発見!!
/*add the pcm and raw data select interface*/
switch(params_channels(params)) {
case 1:/*pcm mode*/
case 2:
fmt = 0;
break;
case 4:/*raw data mode*/
fmt = 1;
break;
default:
return -EINVAL;
}
う~ん。そんな物なのでしょうか?
チャンネル数が4ならRAWモード??
なんか微妙ですが、たぶんこれです。
2.再生する術を考える。
externalの下を眺めていると、使えそうなツールがありました。
その名も tinyalsa です。
そこで、先ほど得た知識を元に、tinyplay.c にパッチを...
チャンネル数を無理やり 4 に変えます。
// config.channels = channels;
config.channels = 4; // RAWモード
最後に、どっかのWEBサイトで拾ってきた DTS の WAV ファイルをこのツールで再生してみます。
# tinyplay test.wav -D 2
すると...わたくしの所有する SONY MDR-DS5100 (古っ!!)の DTS のインジケータが光輝きました。
なんとなく、音質が良くなった気がしますが、それ以上に、この方法で音楽を再生すると、Androidの操作音とMixされることが無くなるので、とても良い感じです。
操作音とMixされると、雑音っぽいのが混ざるのが気になったので...
とりあえず、パススルーっぽいものは動いています。
ですが、実用に至るまでには、もう少し調べることが残ってます。
何故ならDTSのデータの作り方が分かってません。
2013年9月21日土曜日
cubieboard2にI2C液晶をつける
トスリンクを買うときに、一緒にStrawberry LinuxのLCD液晶を買ってましたので、今日はそれを接続してみました。
接続方法は...
[LCD] 1 - [Cubieboard2] U14 44 (VCC 3.3V)
[LCD] 2 - [Cubieboard2] U15 6 (TWI1-SCK ※1)
[LCD] 3 - [Cubieboard2] U15 7 (TWI1-SDA ※1)
[LCD] 4 - [Cubieboard2] U14 42 (GND)
[LCD] 5 - [Cubieboard2] U14 44 (VCC 3.3V)
※1 I2Cの2つは3.3KΩの抵抗を使って、VCCにプルアップ接続してます。
毎度のことながら、これで正解かは、一切自信ありません。
動作確認...
テスト用に i2c-tools をビルドしてインストールします。
これも、いつもの事ながら、externalにコピーしてAndroid.mkを用意してビルドします。
特に、エラーもなくすんなりとビルドできました。
無事にLCDをcubieboard2から認識できているか確認します。
# i2cdetect -y 1
結果は...
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
第一関門突破です。
無事に認識しているようです!!
次にOkiraku Programmingさんのスクリプトを参考にして、以下のコマンドを入力しました。
# i2cset -y 1 0x3e 0 0x38 0x39 0x14 0x78 0x5e 0x6c i
# i2cset -y 1 0x3e 0 0x0c 0x01 0x06 i
# i2cset -y 1 0x3e 0x40 0x31 0x32 i
すると、LCDに "01" と表示されました!!
これで動作確認できたので、今度は自分でプログラムを組んでみたいと思います。
登録:
投稿 (Atom)