abc2011 yagi
DESCRIPTION
ABC2011 Summerの直前だか何かに破棄したやつ。TRANSCRIPT
Android3.0
Honeycomb
・High-performance 2D and 3D graphics
・Support for multicore processor architectures
・Rich multimedia and connectivity
2011年7月12日火曜日
Who am I ?
八木 俊広 TOSHIHIRO YAGI
http://visible-true.blogspot.com/
@sys1yagi
Market:
Blog:
Twitter:
2011年7月12日火曜日
High-performance 2D and 3D graphics
http://www.flickr.com/photos/bistrosavage/1313589/
2011年7月12日火曜日
Animation Framework
新しいアニメーションフレームワーク。
http://www.flickr.com/photos/kudumomo/2354710896/
2011年7月12日火曜日
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日火曜日
なにができる?
• 値をアニメーションさせる。
(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日火曜日
なにができる?
• オブジェクトのプロパティ値をアニメーションする ObjectAnimator
• ViewGroup内の状態変更時のアニメーション
• カスタムな値をアニメーションさせる
LayoutTransition
TypeEvaluator
• フレーム単位で処理する。(時間と値のペア) Keyframe
• 複数のアニメーションを管理する AnimatorSet
柔軟なアニメーション処理が可能に
2011年7月12日火曜日
Hardware accelerated 2D Graphics
ハードウェアアクセラレータ。
http://www.flickr.com/photos/uriba/2228346515/
2011年7月12日火曜日
なにができる?
• AndroidManifest.xmlに設定するだけで、2D処理においてハードウェアアクセラレーションを利用できる。
<application android:hardwareAccelerated=”true” />
<activity android:hardwareAccelerated=”true” />
OpenGLレンダラがいい感じにしてくれる
2011年7月12日火曜日
どのくらい早くなる?
• カスタムViewのonDrawでボールを100個描画し、アニメーションさせてみる。
2011年7月12日火曜日
結果
• アクセラレーション=false 約20msec
• アクセラレーション=true 約4msec
SurfaceViewだと駄目でした。なんでだろ~
約5倍
2011年7月12日火曜日
ただし
• 全てが早くなる訳ではないので注意が必要
SurfaceViewではH/Wアクセラレータは効かない。etc...
2011年7月12日火曜日
View support for hardware and software layers
Viewのレイヤー指定が可能に。
http://www.flickr.com/photos/zooboing/4310581954/
2011年7月12日火曜日
なにができるか
• View単位での細かいレイヤ設定ができる。setLayerType(int)
LAYER_TYPE_HARDWARE
LAYER_TYPE_SOFTWARE• ソフトウェアでレンダリング。Bitmapでキャッシュ
• ハードウェアでレンダリング。OpenGLでキャッシュ
各レイヤのメリットにあわせて細かく制御
2011年7月12日火曜日
Renderscript 3D graphics engine
強力なグラフィクス用スクリプト。
http://www.flickr.com/photos/arenamontanus/3359137341/
2011年7月12日火曜日
Youtubeで使われている
2011年7月12日火曜日
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日火曜日
こんな事ができる
• 数学系のライブラリでの高速な計算
• プリミティブやベクトルの変換、マトリックス、日付と時刻、グラフィクス計算
• ロギング
• グラフィクスレンダリング
• メモリのアロケーション
NDK,OpenGLってほどじゃない時に
2011年7月12日火曜日
デメリット
• 開発が複雑に。そもそもRenderScriptを勉強しないと・・・。
• デバッグが難しい。
• OpenGLほど色々できる訳ではない。
凝りたい時はやっぱりOpenGLとか
2011年7月12日火曜日
Support for multicore processor architectures
processor
http://www.flickr.com/photos/mccheek/1471251914/
2011年7月12日火曜日
Support for multicore processor architectures
マルチコアのサポート。
http://www.flickr.com/photos/fancy-diamonds/5511634443/
2011年7月12日火曜日
なにが変わった?
•Android3.0からマルチコアがサポート
•Dalvik VMやBionicライブラリが修正され、マルチコア環境での非同期処理が性能アップ
•シングルスレッドでもマルチコアの恩恵が受けられる。
2011年7月12日火曜日
ほんとに?
2011年7月12日火曜日
実験
•重いループ処理を、シングルスレッドで一回、マルチスレッドで二回やってみる。きっと処理時間があまり変わらないはず! 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日火曜日
HTC-Desire
• CPU:1GHz Qualcomm® QSD8250 Snapdragon®
• メモリ: 576MB
2011年7月12日火曜日
HTC-Desireだと、処理の量が二倍でかかる時間も倍という結果に。当たり前か・・・
2011年7月12日火曜日
Optimus Pad
• CPU:NVIDIA® Tegra™2 1GHz x 2
• メモリ: 1GB
「オドロキマス。Optimus。」
2011年7月12日火曜日
Optimus Padだと2回の処理はほぼ同じ時間で完了している!
2011年7月12日火曜日
2011年7月12日火曜日
• 同試験で処理回数を3回、4回でやった場合
追試
HTC-Desire Optimus Pad
3回 95294msec 33803msec
4回 125017msec 43280msec
2011年7月12日火曜日
Rich multimedia and conectivity media
http://www.flickr.com/photos/krayker/2268587409/
2011年7月12日火曜日
Time lapse video
タイムラプス撮影が可能に。
http://www.flickr.com/photos/skyseeker/312716886/2011年7月12日火曜日
タイムラプス撮影って?
• 時間をかけてゆっくりとコマ撮りを行い、動画を撮影する事。
http://www.flickr.com/photos/sketch-book/41095087/
http://www.flickr.com/photos/sketch-book/35507705/
2011年7月12日火曜日
タイムラプス撮影
• 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日火曜日
フレームレート
キャプチャレートとフレームレート
• キャプチャレート=1秒間に撮影するコマ数
• フレームレート=1秒間で再生するコマ数
キャプチャレート
撮影される動画の倍速
キャプチャレートが4で、フレームレートが20なら、5倍速の動画が撮影できる。
2011年7月12日火曜日
getSupportedPreviewFpsRange()getSupportedPreviewFrameRates()
• レートは端末に搭載されているカメラの性能に依存します。android.hardware.Camera.Parametersの各種メソッドでそれぞれのレートのサポート範囲を取得する事ができます。
Optimus Padの場合:
キャプチャレート: 4~35
フレームレート: 5,10,15,20,24,25,30
2011年7月12日火曜日
Texture support for image streams
ストリームをテクスチャに。
http://www.flickr.com/photos/romanywg/4065904913/
2011年7月12日火曜日
android.graphics.SurfaceTexture
• OpenGLのテクスチャに、カメラやメディアのストリームを表示できる。
こ、こんな感じ?
カメラのプレビュー
OpenGLの世界
2011年7月12日火曜日
しかし
2011年7月12日火曜日
動かず・・・!
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日火曜日
HTTP live streaming
ストーミング再生が可能に。
http://www.flickr.com/photos/nikonvscanon/2081397439/
2011年7月12日火曜日
なにができる
• HTTP live streaming draft protocolをサポート
• m3uのURLをMediaPlayerなどに与えると再生できる。
らしい。
2011年7月12日火曜日
しかし
2011年7月12日火曜日
動かず・・・!
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日火曜日
EXIF data
取得できる情報の追加。
http://www.flickr.com/photos/qubodup/4094723007/
2011年7月12日火曜日
EXIFって?
• Exchangeable Image File Formatの略。JPEG画像などに撮影日時やメーカ名等のメタデータを付加する為の規格。
http://www.flickr.com/photos/krasi/2462179084/
撮影日時撮影機器メーカ名画像全体の解像度撮影方向シャッタースピードetc...
2011年7月12日火曜日
新たに取得可能となった情報
• レンズの口径(TAG_APERTURE)
• 露光時間(TAG_EXPOSURE_TIME)
• ISO感度(TAG_ISO)
android.media.ExifInterface
2011年7月12日火曜日
Camcorder profiles
動画撮影用のプロファイル。
http://www.flickr.com/photos/picken/5283258818/
2011年7月12日火曜日
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日火曜日
Digital rights management (DRM)
コンテンツ保護。
http://www.flickr.com/photos/ideonexus/5176340670/
2011年7月12日火曜日
DRMのAPIを提供
• Javaのレイヤから利用可能な統一的なAPI
• 端末に組み込まれたDRMプラグインを利用できる。
プラグインは端末メーカーが乗せます。3.0のOptimus Padには何も入ってませんでした。3.1のXOOMではWidevine DRM plug-inが入っていました。
2011年7月12日火曜日