Xperiaのオープンソース開発におけるカメラ問題

19:05

Xperia向けのCM13で一番難航しているのがカメラ機能であることは前の記事で触れましたが、Cyanogenmodのnightly公式配信が中々始まらないのもこのためです。

そのうち改善されていくのでしょうが、実はXperiaのカスタムROMにおけるカメラ問題は根が深く、これをまとめている記事も見かけないので一度整理しておこうと思います。


自社技術保護に熱心なSoMC

SonyがXperiaのカメラ性能に自信を持っていることはプロモーションを見てもよく分かりますが、Sonyは技術保護のためにカメラ機能に端末固有のDRMキーを要求するようにしています。スマートフォンメーカーの中では一眼レフやミラーレス機も真面目に作っているだけあって、(実際に現像された写真の見栄えが良いかは別として、)暗所性能や色のりは評価できると思いますが、そういう画像処理(BIONZ for mobile)を担当するバイナリやライブラリを他端末に移植して外部から呼び出されないようにするための処置ですね。




この動きはZ1世代のRhineプラットフォームから起こっていて、当時はカスタムROMを焼くためにブートローダーをアンロックしたらカメラが使えなくなったと散々ユーザーからSoMCの公式フォーラムに文句が出ました。
具体的な症状は、プレビューまではできるがフォーカスしようとするとカメラが落ちるというもので、Z1のグローバルモデルの4.2.2でこの問題が起こっていました。さすがに不評だったためかZ1が4.3にアップグレードされたときに、カメラにDRMキーを要求しないようにSoMCが仕様を変更したのですが、4.4以降ではこの仕様が元に戻されています。

この部分の処理はエラーログを追うとよく分かります。

DRMキーをTAパーティションから取得するCredentialManagerが(ここではソケットの作成で)エラーを起こす
E/CredMgrDinLib(1676): SendAndReceive socket failed
E/CredMgrDinLib(1676): SendAndReceive() ended. result 1 - CREDMGR_RESULT_GENERIC_ERROR

CredentialManagerとカメラをつなぐcacaoプロセスが、DRMキーを受け取れないためにchokoballの作成に失敗する
E/cacao(1676): 1137370710 cacao_chokoball.cpp               (3704) 12370 E [CKB] ckb preCompile fail. keymgr credmgr generic error.
W/cacao(1676): 1137370745 cacao_chokoball.cpp               (3713) 12370 W [CKB] Post process preLoad(0xffffff91)
E/cacao(1676): 1134871177 cacao_chokoball.cpp                (852) 12373 E [CKB] ckb create fail.
E/cacao(1676): 1134871243 cacao_chokoball.cpp                (893) 12373 E [CKB] ckb is not ready.

cacaoプロセスが開始できないので、カメラ機能を司るcaladbolgがフォーカス時にエラーを吐く
E/caladbolg(1676): 1134871299 excal_focus_detector.cpp           (177) 12372 E [EXC] [FocusDetector  ] Cacao start Fail <ffffff90>
E/caladbolg(1676): 1134953273 excal_idt_ctrl.cpp                 (688) 12371 E [EXC] [IdtCtrl        ] Received error event from FocusDetector
E/caladbolg(1676): 1134953307 excal_idt_ctrl.cpp                 (692) 12371 E [EXC] [IdtCtrl        ] Call returnBuffer for HwFocusStats 0xb7b54c98
カカオやらチョコボールやらカラドボルグやらSoMCの開発者はプロセスのネーミングがかわいいですね。


オープンソース開発における問題

SoMCが技術保護に熱心なのは分かりましたが、こうなると困るのはカスタムROMを作成する一般開発者です。
カスタムROMを焼くためにブートローダーをアンロックする以上、DRMキーは失われて使い物にならないカメラが残ります。この仕様はZ2、Z3のShinanoプラットフォームにも引き継がれたので、長らくCMのメンテナの間で問題になっていました。

CM12.1までは、その場しのぎの処置として、DRMキーが要求されないZ1のプロプライエタリバイナリとそれに合うようにカーネルを変更してカメラが使えるように工夫されていましたが、CM13でカメラ起動に求められる関数が大きく変更されると、4.3のバイナリでは対応できなくなり、問題が表面化したというわけです。

今のところ、CMのメンテナとしては、どのみちカーネルバージョンを3.10に上げれば、3.4カーネル向けのバイナリとカーネルの変更は使えなくなるので、いっそのこと小手先のハックはやめて、SoMCが開発中の3.10向けのAOSP用カメラバイナリが提供されるのを待とうという結論に達したようです。

CMのメンテナが3.10カーネルありきの方向で納得してしまうと困るのは、カーネルを変更できないLB用ROMを作っている私やZ以前のROMを作っている開発者です。私が1年半前にZ1f用のCMをビルドしたときはTAパーティションからDRMキーを読み出すDRMサービスの修正で躓いたのですが、今ならこちらは解決できるとして、カメラ起動に足りない関数を自前で用意してエラーを追い切るほどの技量はないのでどうしたものかと考えています。

XperiaはSony Ericsson時代からのオープンソース開発への積極性とSonyによる買収後の自社技術保護のクローズ性が両立しているので、なんとも煮え切らずに歯がゆい思いです。もっとも、FreeXperiaのJerpeleaが入社して以降は、先述のSonyの技術を除いたAOSP向けカメラフレームワークの開発や3.10カーネルの作成などオープンソース開発へのやる気も見せています。惜しむらくはそういった活動の恩恵を受けられるのがブートローダーをアンロックしたモデルだけということです。なかなか思うようにはいかないものです。


白黒付けがたいスマートフォンのオープンソース開発

余談ですが、XDAでは上記の技術保護の仕組みを破るmodが公開されています。しかし、Cyanogenmodの公式配信に真っ黒なクラックを載せるわけにはいかないので、アンオフィシャルビルドで使えれば良い程度の認識です。もっとも、LGの署名脆弱性を突いてカーネルに任意の有効な署名をできるようにしたOpen BumpがCM公式で採用されているところを見ると、線引きなど曖昧なものです。メーカーとしてはこういったユーザーの趣味的な開発を不正な改造行為と切って捨てることは容易いですが、コアなファンのいないビジネスは面白みに欠けるのではないかとも思いますし、白黒付けがたい問題ではあります。

<参考>
Xperia Z1、現時点ではブートローダーをアンロックするカメラが機能しなくなる、Sony Mobileが公式サイトで注意を呼びかけ | juggly.cn

BUG!Camera broken after bootloader unlock! - Support forum

[dev][cam][improvements & auto-focus dev… | Sony Xperia Z1

Change I8a63f407: msm: camera: Use Sony Rhine camera stack from 4.3 | review.cyanogenmod Code Review

Change Ic1b2696d: Use rhine 4.3 camera stack | review.cyanogenmod Code Review

Change Ie15c02cc: Remove stock camera stuff | review.cyanogenmod Code Review

Experimental AOSP camera available for experienced developers – Developer World

GitHub - sonyxperiadev/camera at aosp/LA.BF64.1.2.2_rb4.7

Official CM11/CM12 builds now possible thanks to Open Bump : LGG3

Sony credentials restore after unlocking the… | Sony Xperia Z5

関連する記事

次の記事
« 前の投稿
前の記事
次の投稿 »

6 コメント

Write コメント
2016年2月5日 23:39 delete

そうなんですか。 どうりでCyanogenmod のオープンソースから UB XperiaZ2 をビルドしたのですがカメラが終わっています。

待つしかないですかね。やっぱり

Reply
avatar
Gergo B
AUTHOR
2016年2月6日 20:40 delete

Can you build CM11 locked bootloader for xperia Z?

Reply
avatar
Gergo B
AUTHOR
2016年2月22日 0:14 delete

Got update experimental Build! Can you build this now ?

Reply
avatar
Unknown
AUTHOR
2016年2月28日 12:31 delete

参考になるかは分かりませんがこのromのカメラの仕組みが使えるかもです。
http://forum.xda-developers.com/xperia-arc/development/dev-2011-unofficial-cyanogenmod-13-0-t3323975

Reply
avatar
Gergo B
AUTHOR
2016年4月24日 6:43 delete

Camera FiXed cm13. PLS build it :)

Reply
avatar
匿名
AUTHOR
2017年10月12日 20:17 delete

初めまして。いつもお世話になっております。
カスタムROMでカメラが有効なものが少ない理由がよく分かりました。
SoMCは最低限カメラを起動できるぐらいのソースを準備してほしいですね。

Reply
avatar