VideoViewの連続使用でSurface$OutOfResourcesExceptionが発生する

1,564 views
Skip to first unread message

totoro85kg

unread,
Jan 18, 2012, 11:09:14 PM1/18/12
to 日本Androidの会
初めまして、山本と申します。

プレイリストに登録した動画を連続再生させているとSurfaceでOutOfResourcesException発生して再生が出来なくなります。
原因や対処方法などお心当たりのあるお方の助言をお願いします。

・VideoViewはメインのViewにAddviewしたままremoveせず動画ファイルのみ更新
・動画の再生時間もプレイリストに登録してあり、時間経過後、Stop-コンテンツ再登録-Startを繰り返しています
・ツール(名称は失念)を入れてForeGroundアプリへのメモリ割り当てを拡張したところExceptionまでの間隔は延びましたが現象は解消
しません

同載対象機はSharp A01SH OSは3.2です。

ログには以下のような出力があります。
ERROR/MemoryHeapBase(91): mmap(fd=464, size=15667200) failed (Out of
memory)
DEBUG/HierarchicalStateMachine(138): handleMessage: X
ERROR/OMXNodeInstance(91): OMX_UseBuffer failed with error -2147479547
(0x80001005)
ERROR/OMXCodec(91): allocate_buffer_with_backup failed
WARN/MemoryDealer(91): madvise(0xffffffff, 1564672, MADV_REMOVE)
returned Invalid argument
VERBOSE/OMXNodeInstance(91): calling destroyComponentInstance
VERBOSE/OMXNodeInstance(91): destroyComponentInstance returned err 0
VERBOSE/OMXNodeInstance(91): OMXNodeInstance going away.
ERROR/MediaPlayer(9959): error (1, -2147483648)
DEBUG/OpenGLRenderer(9959): GL error from OpenGLRenderer: 0x506
WARN/HardwareRenderer(9959): Mountain View, we've had a problem here.
Switching back to software rendering.
WARN/HardwareRenderer(9959): EGL error: EGL_BAD_CURRENT_SURFACE
ERROR/MediaPlayer(9959): Error (1,-2147483648)
DEBUG/VideoView(9959): Error: 1,-2147483648
WARN/GraphicBufferAllocator(88): alloc(600, 976, 1, 00000133, ...)
failed -12 (Out of memory)
ERROR/SurfaceFlinger(88): Layer::requestBuffer(this=0x79b48), index=0,
w=600, h=976 failed (Out of memory)
ERROR/Surface(9959): Surface (identity=2756) requestBuffer(0, 0, 0, 0,
00000033) returned a buffer with a null handle
ERROR/Surface(9959): getBufferLocked(0, 0, 0, 0, 00000033) failed (Out
of memory)
ERROR/Surface(9959): dequeueBuffer failed (Out of memory)
ERROR/ViewRoot(9959): OutOfResourcesException locking surface
ERROR/ViewRoot(9959): android.view.Surface$OutOfResourcesException

よろしくお願いします。

l.b.

unread,
Jan 19, 2012, 8:11:03 PM1/19/12
to android-g...@googlegroups.com

 村上です。

 ログの1行目から、エンコードした映像フレームをグラフィック向けのワークメモリに渡すために
mmapで領域をマッピングしようとするも、グラフィックシステム側のワークメモリが枯渇していて
マッピングできなかったためにエラー発生していると思われます。

 ちょっと調べると、OutOfResourcesExceptionはどうやらVideoViewやGLSurfaceViewで
大量のデータを扱うと発生しやすいようです。

 VideoView自体は使ったことが無いので対策方法は分かりませんが、一般論としては
使用しなくなったリソースをこまめにリリースすること、になるかと思います。

 では。

totoro85kg

unread,
Jan 23, 2012, 10:59:49 PM1/23/12
to 日本Androidの会
村上様

コメントありがとうございます。
リソースの解放はマメにやったつもりなのですが、そのあたりの見直しと
再生するコンテンツのサイズを出来る限り小さくしてみて状況を観察してみようと思います。

ありがとうございました。
Reply all
Reply to author
Forward
0 new messages