abc2011 yagi

51
Android3.0 Honeycomb High-performance 2D and 3D graphics Support for multicore processor architectures Rich multimedia and connectivity 2011712日火曜日

Upload: toshihiro-yagi

Post on 06-May-2015

2.135 views

Category:

Technology


1 download

DESCRIPTION

ABC2011 Summerの直前だか何かに破棄したやつ。

TRANSCRIPT

Page 1: Abc2011 yagi

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

Who am I ?

八木 俊広 TOSHIHIRO YAGI

http://visible-true.blogspot.com/

@sys1yagi

Market:

Blog:

Twitter:

2011年7月12日火曜日

Page 3: Abc2011 yagi

High-performance 2D and 3D graphics

http://www.flickr.com/photos/bistrosavage/1313589/

2011年7月12日火曜日

Page 4: Abc2011 yagi

Animation Framework

新しいアニメーションフレームワーク。

http://www.flickr.com/photos/kudumomo/2354710896/

2011年7月12日火曜日

Page 5: Abc2011 yagi

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

なにができる?

• 値をアニメーションさせる。

(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

なにができる?

• オブジェクトのプロパティ値をアニメーションする ObjectAnimator

• ViewGroup内の状態変更時のアニメーション

• カスタムな値をアニメーションさせる

LayoutTransition

TypeEvaluator

• フレーム単位で処理する。(時間と値のペア) Keyframe

• 複数のアニメーションを管理する AnimatorSet

柔軟なアニメーション処理が可能に

2011年7月12日火曜日

Page 8: Abc2011 yagi

Hardware accelerated 2D Graphics

ハードウェアアクセラレータ。

http://www.flickr.com/photos/uriba/2228346515/

2011年7月12日火曜日

Page 9: Abc2011 yagi

なにができる?

• AndroidManifest.xmlに設定するだけで、2D処理においてハードウェアアクセラレーションを利用できる。

<application android:hardwareAccelerated=”true” />

<activity android:hardwareAccelerated=”true” />

OpenGLレンダラがいい感じにしてくれる

2011年7月12日火曜日

Page 10: Abc2011 yagi

どのくらい早くなる?

• カスタムViewのonDrawでボールを100個描画し、アニメーションさせてみる。

2011年7月12日火曜日

Page 11: Abc2011 yagi

結果

• アクセラレーション=false 約20msec

• アクセラレーション=true 約4msec

SurfaceViewだと駄目でした。なんでだろ~

約5倍

2011年7月12日火曜日

Page 12: Abc2011 yagi

ただし

• 全てが早くなる訳ではないので注意が必要

SurfaceViewではH/Wアクセラレータは効かない。etc...

2011年7月12日火曜日

Page 13: Abc2011 yagi

View support for hardware and software layers

Viewのレイヤー指定が可能に。

http://www.flickr.com/photos/zooboing/4310581954/

2011年7月12日火曜日

Page 14: Abc2011 yagi

なにができるか

• View単位での細かいレイヤ設定ができる。setLayerType(int)

LAYER_TYPE_HARDWARE

LAYER_TYPE_SOFTWARE• ソフトウェアでレンダリング。Bitmapでキャッシュ

• ハードウェアでレンダリング。OpenGLでキャッシュ

各レイヤのメリットにあわせて細かく制御

2011年7月12日火曜日

Page 15: Abc2011 yagi

Renderscript 3D graphics engine

強力なグラフィクス用スクリプト。

http://www.flickr.com/photos/arenamontanus/3359137341/

2011年7月12日火曜日

Page 16: Abc2011 yagi

Youtubeで使われている

2011年7月12日火曜日

Page 17: Abc2011 yagi

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

こんな事ができる

• 数学系のライブラリでの高速な計算

• プリミティブやベクトルの変換、マトリックス、日付と時刻、グラフィクス計算

• ロギング

• グラフィクスレンダリング

• メモリのアロケーション

NDK,OpenGLってほどじゃない時に

2011年7月12日火曜日

Page 19: Abc2011 yagi

デメリット

• 開発が複雑に。そもそもRenderScriptを勉強しないと・・・。

• デバッグが難しい。

• OpenGLほど色々できる訳ではない。

凝りたい時はやっぱりOpenGLとか

2011年7月12日火曜日

Page 20: Abc2011 yagi

Support for multicore processor architectures

processor

http://www.flickr.com/photos/mccheek/1471251914/

2011年7月12日火曜日

Page 21: Abc2011 yagi

Support for multicore processor architectures

マルチコアのサポート。

http://www.flickr.com/photos/fancy-diamonds/5511634443/

2011年7月12日火曜日

Page 22: Abc2011 yagi

なにが変わった?

•Android3.0からマルチコアがサポート

•Dalvik VMやBionicライブラリが修正され、マルチコア環境での非同期処理が性能アップ

•シングルスレッドでもマルチコアの恩恵が受けられる。

2011年7月12日火曜日

Page 23: Abc2011 yagi

ほんとに?

2011年7月12日火曜日

Page 24: Abc2011 yagi

実験

•重いループ処理を、シングルスレッドで一回、マルチスレッドで二回やってみる。きっと処理時間があまり変わらないはず! 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

HTC-Desire

• CPU:1GHz Qualcomm® QSD8250 Snapdragon®

• メモリ: 576MB

2011年7月12日火曜日

Page 26: Abc2011 yagi

HTC-Desireだと、処理の量が二倍でかかる時間も倍という結果に。当たり前か・・・

2011年7月12日火曜日

Page 27: Abc2011 yagi

Optimus Pad

• CPU:NVIDIA® Tegra™2 1GHz x 2

• メモリ: 1GB

「オドロキマス。Optimus。」

2011年7月12日火曜日

Page 28: Abc2011 yagi

Optimus Padだと2回の処理はほぼ同じ時間で完了している!

2011年7月12日火曜日

Page 29: Abc2011 yagi

2011年7月12日火曜日

Page 30: Abc2011 yagi

• 同試験で処理回数を3回、4回でやった場合

追試

HTC-Desire Optimus Pad

3回 95294msec 33803msec

4回 125017msec 43280msec

2011年7月12日火曜日

Page 31: Abc2011 yagi

Rich multimedia and conectivity media

http://www.flickr.com/photos/krayker/2268587409/

2011年7月12日火曜日

Page 32: Abc2011 yagi

Time lapse video

タイムラプス撮影が可能に。

http://www.flickr.com/photos/skyseeker/312716886/2011年7月12日火曜日

Page 33: Abc2011 yagi

タイムラプス撮影って?

• 時間をかけてゆっくりとコマ撮りを行い、動画を撮影する事。

http://www.flickr.com/photos/sketch-book/41095087/

http://www.flickr.com/photos/sketch-book/35507705/

2011年7月12日火曜日

Page 34: Abc2011 yagi

タイムラプス撮影

• 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

フレームレート

キャプチャレートとフレームレート

• キャプチャレート=1秒間に撮影するコマ数

• フレームレート=1秒間で再生するコマ数

キャプチャレート

撮影される動画の倍速

キャプチャレートが4で、フレームレートが20なら、5倍速の動画が撮影できる。

2011年7月12日火曜日

Page 36: Abc2011 yagi

getSupportedPreviewFpsRange()getSupportedPreviewFrameRates()

• レートは端末に搭載されているカメラの性能に依存します。android.hardware.Camera.Parametersの各種メソッドでそれぞれのレートのサポート範囲を取得する事ができます。

Optimus Padの場合:

キャプチャレート: 4~35

フレームレート: 5,10,15,20,24,25,30

2011年7月12日火曜日

Page 37: Abc2011 yagi

Texture support for image streams

ストリームをテクスチャに。

http://www.flickr.com/photos/romanywg/4065904913/

2011年7月12日火曜日

Page 38: Abc2011 yagi

android.graphics.SurfaceTexture

• OpenGLのテクスチャに、カメラやメディアのストリームを表示できる。

こ、こんな感じ?

カメラのプレビュー

OpenGLの世界

2011年7月12日火曜日

Page 39: Abc2011 yagi

しかし

2011年7月12日火曜日

Page 40: Abc2011 yagi

動かず・・・!

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

HTTP live streaming

ストーミング再生が可能に。

http://www.flickr.com/photos/nikonvscanon/2081397439/

2011年7月12日火曜日

Page 42: Abc2011 yagi

なにができる

• HTTP live streaming draft protocolをサポート

• m3uのURLをMediaPlayerなどに与えると再生できる。

らしい。

2011年7月12日火曜日

Page 43: Abc2011 yagi

しかし

2011年7月12日火曜日

Page 44: Abc2011 yagi

動かず・・・!

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

EXIF data

取得できる情報の追加。

http://www.flickr.com/photos/qubodup/4094723007/

2011年7月12日火曜日

Page 46: Abc2011 yagi

EXIFって?

• Exchangeable Image File Formatの略。JPEG画像などに撮影日時やメーカ名等のメタデータを付加する為の規格。

http://www.flickr.com/photos/krasi/2462179084/

撮影日時撮影機器メーカ名画像全体の解像度撮影方向シャッタースピードetc...

2011年7月12日火曜日

Page 47: Abc2011 yagi

新たに取得可能となった情報

• レンズの口径(TAG_APERTURE)

• 露光時間(TAG_EXPOSURE_TIME)

• ISO感度(TAG_ISO)

android.media.ExifInterface

2011年7月12日火曜日

Page 48: Abc2011 yagi

Camcorder profiles

動画撮影用のプロファイル。

http://www.flickr.com/photos/picken/5283258818/

2011年7月12日火曜日

Page 49: Abc2011 yagi

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

Digital rights management (DRM)

コンテンツ保護。

http://www.flickr.com/photos/ideonexus/5176340670/

2011年7月12日火曜日

Page 51: Abc2011 yagi

DRMのAPIを提供

• Javaのレイヤから利用可能な統一的なAPI

• 端末に組み込まれたDRMプラグインを利用できる。

プラグインは端末メーカーが乗せます。3.0のOptimus Padには何も入ってませんでした。3.1のXOOMではWidevine DRM plug-inが入っていました。

2011年7月12日火曜日