Download - Abc2011 yagi
![Page 1: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/1.jpg)
Android3.0
Honeycomb
・High-performance 2D and 3D graphics
・Support for multicore processor architectures
・Rich multimedia and connectivity
2011年7月12日火曜日
![Page 2: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/2.jpg)
Who am I ?
八木 俊広 TOSHIHIRO YAGI
http://visible-true.blogspot.com/
@sys1yagi
Market:
Blog:
Twitter:
2011年7月12日火曜日
![Page 3: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/3.jpg)
High-performance 2D and 3D graphics
http://www.flickr.com/photos/bistrosavage/1313589/
2011年7月12日火曜日
![Page 4: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/4.jpg)
Animation Framework
新しいアニメーションフレームワーク。
http://www.flickr.com/photos/kudumomo/2354710896/
2011年7月12日火曜日
![Page 5: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/5.jpg)
android.animation
• Animator.AnimatorListener• LayoutTransition.TransitionListener• TimeInterpolator• TypeEvalutor• ValueAnimator.AnimatorUpdateListener
interface class
• Animator• AnimatorInflator• AnimatorListenerAdapter• AnimatorSet• AnimatorSet.Builder• ArgbEvalutor• FloatEvalutor• IntEvalutor• Keyframe• LayoutTransition• ObjectAnimator• PropertyValueHolder• ValueAnimator
2011年7月12日火曜日
![Page 6: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/6.jpg)
なにができる?
• 値をアニメーションさせる。
(100,100)
(300,200)
ValueAnimator duration:1000 from:0 to:100
AnimationUpdateListener onAnimationUpdate(ValueAnimator animator){ value = (Float)animator.getAniamtionValue(); x = initialX + (value*2); y = initialY + value; invalidate(); }
2011年7月12日火曜日
![Page 7: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/7.jpg)
なにができる?
• オブジェクトのプロパティ値をアニメーションする ObjectAnimator
• ViewGroup内の状態変更時のアニメーション
• カスタムな値をアニメーションさせる
LayoutTransition
TypeEvaluator
• フレーム単位で処理する。(時間と値のペア) Keyframe
• 複数のアニメーションを管理する AnimatorSet
柔軟なアニメーション処理が可能に
2011年7月12日火曜日
![Page 8: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/8.jpg)
Hardware accelerated 2D Graphics
ハードウェアアクセラレータ。
http://www.flickr.com/photos/uriba/2228346515/
2011年7月12日火曜日
![Page 9: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/9.jpg)
なにができる?
• AndroidManifest.xmlに設定するだけで、2D処理においてハードウェアアクセラレーションを利用できる。
<application android:hardwareAccelerated=”true” />
<activity android:hardwareAccelerated=”true” />
OpenGLレンダラがいい感じにしてくれる
2011年7月12日火曜日
![Page 10: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/10.jpg)
どのくらい早くなる?
• カスタムViewのonDrawでボールを100個描画し、アニメーションさせてみる。
2011年7月12日火曜日
![Page 11: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/11.jpg)
結果
• アクセラレーション=false 約20msec
• アクセラレーション=true 約4msec
SurfaceViewだと駄目でした。なんでだろ~
約5倍
2011年7月12日火曜日
![Page 12: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/12.jpg)
ただし
• 全てが早くなる訳ではないので注意が必要
SurfaceViewではH/Wアクセラレータは効かない。etc...
2011年7月12日火曜日
![Page 13: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/13.jpg)
View support for hardware and software layers
Viewのレイヤー指定が可能に。
http://www.flickr.com/photos/zooboing/4310581954/
2011年7月12日火曜日
![Page 14: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/14.jpg)
なにができるか
• View単位での細かいレイヤ設定ができる。setLayerType(int)
LAYER_TYPE_HARDWARE
LAYER_TYPE_SOFTWARE• ソフトウェアでレンダリング。Bitmapでキャッシュ
• ハードウェアでレンダリング。OpenGLでキャッシュ
各レイヤのメリットにあわせて細かく制御
2011年7月12日火曜日
![Page 15: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/15.jpg)
Renderscript 3D graphics engine
強力なグラフィクス用スクリプト。
http://www.flickr.com/photos/arenamontanus/3359137341/
2011年7月12日火曜日
![Page 16: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/16.jpg)
Youtubeで使われている
2011年7月12日火曜日
![Page 17: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/17.jpg)
android.renderscript
• ハイパフォーマンスな3Dレンダリング• C言語に似たスクリプト言語• オブジェクトコードを生成する方式なので異なるCPU,GPUでも動作
RenderScriptファイル
RenderScriptの中間コード
A.rs
A.bc
ScriptC_A.java
RenderScriptに対するアクセサ
llvm-rs-cc.exeでビルド
A.d
RenderScriptのヘッダのようなもの
2011年7月12日火曜日
![Page 18: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/18.jpg)
こんな事ができる
• 数学系のライブラリでの高速な計算
• プリミティブやベクトルの変換、マトリックス、日付と時刻、グラフィクス計算
• ロギング
• グラフィクスレンダリング
• メモリのアロケーション
NDK,OpenGLってほどじゃない時に
2011年7月12日火曜日
![Page 19: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/19.jpg)
デメリット
• 開発が複雑に。そもそもRenderScriptを勉強しないと・・・。
• デバッグが難しい。
• OpenGLほど色々できる訳ではない。
凝りたい時はやっぱりOpenGLとか
2011年7月12日火曜日
![Page 20: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/20.jpg)
Support for multicore processor architectures
processor
http://www.flickr.com/photos/mccheek/1471251914/
2011年7月12日火曜日
![Page 21: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/21.jpg)
Support for multicore processor architectures
マルチコアのサポート。
http://www.flickr.com/photos/fancy-diamonds/5511634443/
2011年7月12日火曜日
![Page 22: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/22.jpg)
なにが変わった?
•Android3.0からマルチコアがサポート
•Dalvik VMやBionicライブラリが修正され、マルチコア環境での非同期処理が性能アップ
•シングルスレッドでもマルチコアの恩恵が受けられる。
2011年7月12日火曜日
![Page 23: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/23.jpg)
ほんとに?
2011年7月12日火曜日
![Page 24: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/24.jpg)
実験
•重いループ処理を、シングルスレッドで一回、マルチスレッドで二回やってみる。きっと処理時間があまり変わらないはず! final long start = SystemClock.uptimeMillis();
Thread[] threads = new Thread[count]; for (int i = 0; i < threads.length; i++) { threads[i] = new Thread(){ public void run() { int items = 0; for (int j = 0; j < Integer.MAX_VALUE; j++) { items = j; } }; }; threads[i].start(); } for(int i = 0; i < threads.length; i++){ try{ threads[i].join(); }catch(Exception e){ throw new RuntimeException("計測エラー:スレッドが死にました"); } } final long end = SystemClock.uptimeMillis() - start;
Integer.MAX_VALUEまで数え上げる処理をcount個のスレッドで
実行する。
2011年7月12日火曜日
![Page 25: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/25.jpg)
HTC-Desire
• CPU:1GHz Qualcomm® QSD8250 Snapdragon®
• メモリ: 576MB
2011年7月12日火曜日
![Page 26: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/26.jpg)
HTC-Desireだと、処理の量が二倍でかかる時間も倍という結果に。当たり前か・・・
2011年7月12日火曜日
![Page 27: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/27.jpg)
Optimus Pad
• CPU:NVIDIA® Tegra™2 1GHz x 2
• メモリ: 1GB
「オドロキマス。Optimus。」
2011年7月12日火曜日
![Page 28: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/28.jpg)
Optimus Padだと2回の処理はほぼ同じ時間で完了している!
2011年7月12日火曜日
![Page 29: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/29.jpg)
2011年7月12日火曜日
![Page 30: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/30.jpg)
• 同試験で処理回数を3回、4回でやった場合
追試
HTC-Desire Optimus Pad
3回 95294msec 33803msec
4回 125017msec 43280msec
2011年7月12日火曜日
![Page 31: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/31.jpg)
Rich multimedia and conectivity media
http://www.flickr.com/photos/krayker/2268587409/
2011年7月12日火曜日
![Page 32: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/32.jpg)
Time lapse video
タイムラプス撮影が可能に。
http://www.flickr.com/photos/skyseeker/312716886/2011年7月12日火曜日
![Page 33: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/33.jpg)
タイムラプス撮影って?
• 時間をかけてゆっくりとコマ撮りを行い、動画を撮影する事。
http://www.flickr.com/photos/sketch-book/41095087/
http://www.flickr.com/photos/sketch-book/35507705/
2011年7月12日火曜日
![Page 34: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/34.jpg)
タイムラプス撮影
• MediaRecoderで動画撮影をする際にsetProfile(CamcorderProfile)でタイムラスプ用のプロファイルを設定し、setCaptureRate(double fps)でレートを指定するだけ。
MediaRecorder recoder = new MediaRecorder();recoder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
recoder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_TIME_LAPSE_480P));recoder.setCaptureRate(fps);
recoder.setOutputFile(Environment.getExternalStorageDirectory().getAbsolutePath() + "/test.mp4");recoder.setPreviewDisplay(holder.getSurface());recoder.prepare();recoder.start();
2011年7月12日火曜日
![Page 35: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/35.jpg)
フレームレート
キャプチャレートとフレームレート
• キャプチャレート=1秒間に撮影するコマ数
• フレームレート=1秒間で再生するコマ数
キャプチャレート
撮影される動画の倍速
キャプチャレートが4で、フレームレートが20なら、5倍速の動画が撮影できる。
2011年7月12日火曜日
![Page 36: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/36.jpg)
getSupportedPreviewFpsRange()getSupportedPreviewFrameRates()
• レートは端末に搭載されているカメラの性能に依存します。android.hardware.Camera.Parametersの各種メソッドでそれぞれのレートのサポート範囲を取得する事ができます。
Optimus Padの場合:
キャプチャレート: 4~35
フレームレート: 5,10,15,20,24,25,30
2011年7月12日火曜日
![Page 37: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/37.jpg)
Texture support for image streams
ストリームをテクスチャに。
http://www.flickr.com/photos/romanywg/4065904913/
2011年7月12日火曜日
![Page 38: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/38.jpg)
android.graphics.SurfaceTexture
• OpenGLのテクスチャに、カメラやメディアのストリームを表示できる。
こ、こんな感じ?
カメラのプレビュー
OpenGLの世界
2011年7月12日火曜日
![Page 39: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/39.jpg)
しかし
2011年7月12日火曜日
![Page 40: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/40.jpg)
動かず・・・!
mTextureID = textures[0];GLES20.glBindTexture(0x8D65, mTextureID);
camera = Camera.open();SurfaceTexture surfaceTexture = new SurfaceTexture(mTextureID);Parameters param = camera.getParameters();Size size = param.getPreviewSize();camera.setPreviewTexture(surfaceTexture);camera.startPreview();
2011年7月12日火曜日
![Page 41: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/41.jpg)
HTTP live streaming
ストーミング再生が可能に。
http://www.flickr.com/photos/nikonvscanon/2081397439/
2011年7月12日火曜日
![Page 42: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/42.jpg)
なにができる
• HTTP live streaming draft protocolをサポート
• m3uのURLをMediaPlayerなどに与えると再生できる。
らしい。
2011年7月12日火曜日
![Page 43: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/43.jpg)
しかし
2011年7月12日火曜日
![Page 44: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/44.jpg)
動かず・・・!
path = "http://std1.ladio.net:8060/i-j-y-u-i-n--.m3u";
mMediaPlayer = new MediaPlayer();mMediaPlayer.setDataSource(path);mMediaPlayer.setDisplay(holder);mMediaPlayer.prepare();mMediaPlayer.setOnBufferingUpdateListener(this);mMediaPlayer.setOnCompletionListener(this);mMediaPlayer.setOnPreparedListener(this);mMediaPlayer.setOnVideoSizeChangedListener(this);mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
2011年7月12日火曜日
![Page 45: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/45.jpg)
EXIF data
取得できる情報の追加。
http://www.flickr.com/photos/qubodup/4094723007/
2011年7月12日火曜日
![Page 46: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/46.jpg)
EXIFって?
• Exchangeable Image File Formatの略。JPEG画像などに撮影日時やメーカ名等のメタデータを付加する為の規格。
http://www.flickr.com/photos/krasi/2462179084/
撮影日時撮影機器メーカ名画像全体の解像度撮影方向シャッタースピードetc...
2011年7月12日火曜日
![Page 47: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/47.jpg)
新たに取得可能となった情報
• レンズの口径(TAG_APERTURE)
• 露光時間(TAG_EXPOSURE_TIME)
• ISO感度(TAG_ISO)
android.media.ExifInterface
2011年7月12日火曜日
![Page 48: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/48.jpg)
Camcorder profiles
動画撮影用のプロファイル。
http://www.flickr.com/photos/picken/5283258818/
2011年7月12日火曜日
![Page 49: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/49.jpg)
android.media.CamcorderProfile
Added Fields Added Methods
boolean hasProfile(int) boolean hasProfile(int, int)
int QUALITY_1080Pint QUALITY_480Pint QUALITY_720Pint QUALITY_CIFint QUALITY_QCIFint QUALITY_TIME_LAPSE_1080Pint QUALITY_TIME_LAPSE_480Pint QUALITY_TIME_LAPSE_720Pint QUALITY_TIME_LAPSE_CIFint QUALITY_TIME_LAPSE_HIGHint QUALITY_TIME_LAPSE_LOWint QUALITY_TIME_LAPSE_QCIF
プロファイルのサポートや、各種プロファイルを取得する為の定数が追加された。
2011年7月12日火曜日
![Page 50: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/50.jpg)
Digital rights management (DRM)
コンテンツ保護。
http://www.flickr.com/photos/ideonexus/5176340670/
2011年7月12日火曜日
![Page 51: Abc2011 yagi](https://reader033.vdocument.in/reader033/viewer/2022052303/5549f1eab4c9050d488b54a9/html5/thumbnails/51.jpg)
DRMのAPIを提供
• Javaのレイヤから利用可能な統一的なAPI
• 端末に組み込まれたDRMプラグインを利用できる。
プラグインは端末メーカーが乗せます。3.0のOptimus Padには何も入ってませんでした。3.1のXOOMではWidevine DRM plug-inが入っていました。
2011年7月12日火曜日