Skip to content

Instantly share code, notes, and snippets.

@HugoGresse
Last active September 5, 2018 03:42
Show Gist options
  • Star 8 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save HugoGresse/669284a16ea25124228b to your computer and use it in GitHub Desktop.
Save HugoGresse/669284a16ea25124228b to your computer and use it in GitHub Desktop.
ExoPlayer implementation with a persisten TextureView & SurfaceTexture among context
import android.annotation.TargetApi;
import android.content.Context;
import android.graphics.Color;
import android.graphics.SurfaceTexture;
import android.os.Build;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Surface;
import android.view.TextureView;
import android.view.ViewGroup;
/**
* Extends ExoPlayer using a TextureView. The playing keep the same surface to draw onto during all
* player lifetime.
*
* Created by Hugo Gresse on 02/03/15.
*/
@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public class DynamicExoPlayer extends BasePlayer implements TextureView.SurfaceTextureListener {
protected TextureView mTextureView;
protected SurfaceTexture mSavedSurfaceTexture;
protected boolean mRequestNewAttach;
protected boolean mLastTextureDestroyed;
public DynamicExoPlayer(Context context, MediaFile mediaFile, VideoPlayerListener nativeVideoPlayerListener) {
super(context, mediaFile, nativeVideoPlayerListener);
}
public static final String LOG_TAG = "DynamicExoPlayer";
@Override
public void attach(Context context, ViewGroup viewGroup) {
if(mTextureView != null){
Log.d(LOG_TAG, "removeTextureView");
ViewGroup parent = (ViewGroup)mTextureView.getParent();
parent.getLayoutParams().width = parent.getWidth();
parent.removeView(mTextureView);
}
mContext = context;
mRootViewGroup = viewGroup;
mMuteButton = (MuteButton) mRootViewGroup.findViewById(R.id.buttonMute);
super.setButtonListener();
mRootViewGroup.setOnTouchListener(this);
// SurfaceView
TextureView textureView =
(TextureView) mRootViewGroup.findViewById(R.id.videoSurfaceLayout);
if(textureView == null){
ViewGroup videoContainer =
(ViewGroup) mRootViewGroup.findViewById(R.id.videoContainerFrameLayout);
if(mTextureView != null){
videoContainer.addView(mTextureView);
videoContainer.getLayoutParams().width = ViewGroup.LayoutParams.WRAP_CONTENT;
} else {
// When release after fullscreen finished/skip, the view is not added in normal
// layout (eg).
LayoutInflater layoutInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mTextureView = (TextureView) layoutInflater.inflate(
R.layout.nativevideolayout_textureview, mRootViewGroup, false);
videoContainer.addView(mTextureView);
}
} else {
mTextureView = textureView;
}
((ViewGroup)mTextureView.getParent()).setBackgroundColor(Color.BLACK);
mTextureView.setSurfaceTextureListener(this);
if(mTextureView.isSurfaceAvailable()){
mSavedSurfaceTexture = mTextureView.getSurfaceTexture();
attachSurfaceAndInit(mSavedSurfaceTexture);
} else if (mSavedSurfaceTexture != null && mLastTextureDestroyed) {
mTextureView.setSurfaceTexture(mSavedSurfaceTexture);
} else {
mRequestNewAttach = true;
}
mVideoWidthHeightRatio = (float) NumberUtils.round((float) 16 / 9, 3);
updateVideoRatio();
}
/**
* Update video width/height ratio
*/
@Override
public void updateVideoRatio(){
mTextureView.setVideoWidthHeightRatio(mVideoWidthHeightRatio);
}
/**
* Release the player by clearing all collection, release player. The player should not be used
* after this. To check if the player has been released, call {@link #isReleased()}
*/
@Override
public void release(){
super.release();
mRequestNewAttach = mLastTextureDestroyed = false;
}
/*----------------------------------------
* Protected Methods
*/
protected FullPlayer.RendererBuilder getRendererBuilder() {
return new DefaultRendererBuilder(mContext, mMediaFile.getMediaFileURI(), null);
}
protected void maybeStartPlayback() {
if(mTextureView.getSurfaceTexture() == null && mSavedSurfaceTexture != null){
Log.d(LOG_TAG, "mRequestNewAttach true : is attaching surface");
mAutoPlay = true;
return;
}
for(VideoPlayerListener listener : mNativeVideoPlayerListenerList){
listener.nativeVideoPlayerDidStartPlaying();
}
mPlayer.setPlayWhenReady(true);
mAutoPlay = false;
}
/**
* Attach a valid SurfaceTexture to the player
* @param surfaceTexture the surface to attach to the player
*/
protected void attachSurfaceAndInit(SurfaceTexture surfaceTexture){
// recheck mute button state
((MuteButton) mRootViewGroup.findViewById(R.id.buttonMute)).setMuted(mIsMute);
if (mPlayer != null) {
if(mSeekHandler == null){
startPlayerTimeListener();
}
mRequestNewAttach = false;
mPlayer.setSurface(new Surface(surfaceTexture));
if(mAutoPlay){
start();
}
}
}
/*----------------------------------------
* TextureView.SurfaceTextureListener
*/
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surfaceTexture, int width, int height) {
Log.d(LOG_TAG, "onSurfaceTextureAvailable size=" + width + "x" + height + ", st=" + surfaceTexture);
// If this is our first time though, we're going to use the SurfaceTexture that
// the TextureView provided. If not, we're going to replace the current one with
// the original.
if (mSavedSurfaceTexture == null) {
mSavedSurfaceTexture = surfaceTexture;
} else {
// Can't do it here in Android <= 4.4. The TextureView doesn't add a
// listener on the new SurfaceTexture, so it never sees any updates.
// Needs to happen from activity onCreate() -- see recreateView().
//Log.d(LTAG, "using saved st=" + mSavedSurfaceTexture);
//mTextureView.setSurfaceTexture(mSavedSurfaceTexture);
}
if(mNativeVideoPlayerListenerList != null){
for(VideoPlayerListener listener : mNativeVideoPlayerListenerList){
listener.nativeVideoPlayerViewAttached();
}
}
attachSurfaceAndInit(surfaceTexture);
}
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
}
@Override
public boolean onSurfaceTextureDestroyed(SurfaceTexture surface) {
Log.d(LOG_TAG, "onSurfaceTextureDestroyed");
mLastTextureDestroyed = true;
if(mSavedSurfaceTexture != null && mRequestNewAttach){
mTextureView.setSurfaceTexture(mSavedSurfaceTexture);
mRequestNewAttach = false;
if(mAutoPlay){
start();
}
}
return (mSavedSurfaceTexture == null);
}
@Override
public void onSurfaceTextureUpdated(SurfaceTexture surface) {
}
}
import android.content.Context;
import android.os.Handler;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.Toast;
import com.google.android.exoplayer.ExoPlayer;
import java.util.concurrent.CopyOnWriteArrayList;
/**
* Based on Exoplayer FullPlayerActivity
*
* When the surface is destroyed, for example when the user switch app, the video is paused by
* blocking surface.
*
*
* Created by Hugo Gresse on 17/11/2014.
*/
public abstract class BasePlayer implements VideoPlayer, FullPlayer.Listener, View.OnTouchListener{
private static final String LOG_TAG = "BasePlayer";
public static final int RENDERER_COUNT = 2;
public static final int TYPE_VIDEO = 0;
public static final int TYPE_AUDIO = 1;
protected Context mContext;
/**
* Note that only the first listener will received publishProgress event
*/
protected CopyOnWriteArrayList<VideoPlayerListener> mNativeVideoPlayerListenerList;
protected EventLogger mEventLogger;
protected MediaFile mMediaFile;
protected FullPlayer mPlayer;
protected float mVideoWidthHeightRatio;
protected Handler mSeekHandler;
protected long mLastPosition;
protected long mPlayerPosition;
protected ViewGroup mRootViewGroup;
protected MuteButton mMuteButton;
protected boolean mAutoPlay = false;
protected boolean mIsReady = false;
protected boolean mIsMute = false;
protected boolean mRatioAlreadyCalculated = false;
public BasePlayer(Context context,
MediaFile mediaFile,
VideoPlayerListener nativeVideoPlayerListener) {
mContext = context;
mMediaFile = mediaFile;
mNativeVideoPlayerListenerList = new CopyOnWriteArrayList<>();
mNativeVideoPlayerListenerList.add(nativeVideoPlayerListener);
}
/**
* Init player
*/
@Override
public void init(){
if (mPlayer == null) {
mPlayer = new FullPlayer(getRendererBuilder());
mPlayer.addListener(this);
mPlayer.seekTo(mPlayerPosition);
try {
mEventLogger = new EventLogger();
mEventLogger.startSession();
} catch (Exception e){
e.printStackTrace();
}
mPlayer.addListener(mEventLogger);
mPlayer.setInfoListener(mEventLogger);
mPlayer.setInternalErrorListener(mEventLogger);
}
}
/**
* Called when surface has changed (entering a new activity with a new layout eg). This will
* attach the surface contained inside the viewGroup to the player. Also setting additional
* listener on the given view.
* @param context current app context
* @param viewGroup viewGroup containing the surface
*/
@Override
public abstract void attach(Context context, ViewGroup viewGroup);
/**
* Update video width/height ratio
*/
@Override
public abstract void updateVideoRatio();
/**
* Internal called when video size changed
* @param width video width
* @param height video height
* @param pixelRatio (optional) pixel ratio
*/
@Override
public void onVideoSizeChanged(int width, int height, float pixelRatio){
// originaly, ratio was calculated from video. Not anymore : one received and if ratio is
// diferent, update it
// mVideoWidthHeightRatio = height == 0 ? 1 : (float) width / height;
if(!mRatioAlreadyCalculated && mVideoWidthHeightRatio != (float) width/height){
mVideoWidthHeightRatio = (float) width/height;
mRatioAlreadyCalculated = true;
}
// setVideoWidthHeightRatio();
}
/**
* Pre load the video to begin buffering while video is not started
*/
@Override
public void preLoad(){
mPlayer.prepare();
}
/**
* Start or resume.
*/
@Override
public void start(){
mAutoPlay = true;
maybeStartPlayback();
}
/**
* Pause the player
*/
@Override
public void pause(){
mAutoPlay = false;
if(!isReleased()){
mPlayer.setPlayWhenReady(false);
}
}
/**
* Mute current video
*/
@Override
public void mute(){
mMuteButton.setMuted(mIsMute = true);
mPlayer.setMute(mIsMute);
for(VideoPlayerListener listener : mNativeVideoPlayerListenerList){
listener.nativeVideoPlayerDidMute();
}
}
/**
* Unmute ucrrent video
*/
@Override
public void unMute(){
mMuteButton.setMuted(mIsMute = false);
mPlayer.setMute(mIsMute);
for(VideoPlayerListener listener : mNativeVideoPlayerListenerList){
listener.nativeVideoPlayerDidUnmute();
}
}
/**
* Release the player by clearing all collection, release player. The player should not be used
* after this. To check if the player has been released, call {@link #isReleased()}
*/
@Override
public void release(){
if (mPlayer != null) {
Log.d(LOG_TAG, "release");
mPlayerPosition = mPlayer.getCurrentPosition();
mPlayer.removeListener(this);
mPlayer.release();
mPlayer = null;
mEventLogger.endSession();
mEventLogger = null;
}
}
/**
* Check if player has been released
* @return true if released, false either
*/
@Override
public boolean isReleased(){
if(mPlayer == null){
return true;
}
return false;
}
/**
* Check if player is playing a video
* @return true if is playing, false otherweise
*/
@Override
public boolean isPlaying(){
if(null != mPlayer){
return mPlayer.getPlayWhenReady();
} else {
return false;
}
}
/**
* Check if the video is in fullscreen.
* @return true if in fullscreen, false otherweise
*/
@Override
public boolean isFullscreen(){
return false;
}
/**
* Get current video duration
* @return video duration
*/
@Override
public long getDuration(){
return mPlayer.getDuration();
}
/**
* Register a new player listener to be notified by player event.
* See {@link VideoPlayerListener}
*/
@Override
public void addPlayerListener(VideoPlayerListener listener){
if(mNativeVideoPlayerListenerList != null){
mNativeVideoPlayerListenerList.add(listener);
}
}
/**
* Unregister athe given listener.
* See {@link #addPlayerListener(VideoPlayerListener)}
* See {@link VideoPlayerListener}
*/
@Override
public void removePlayerListener(VideoPlayerListener listener){
if(mNativeVideoPlayerListenerList != null){
mNativeVideoPlayerListenerList.remove(listener);
}
}
/*----------------------------------------
* Protected Methods
*/
protected abstract FullPlayer.RendererBuilder getRendererBuilder();
protected abstract void maybeStartPlayback();
/**
* Check every second the current time of the player
*/
protected void startPlayerTimeListener(){
mSeekHandler = new Handler();
final int delay = 1000; //milliseconds
mLastPosition = 0;
mSeekHandler.postDelayed(new Runnable() {
public void run() {
if(null == mPlayer){
return;
}
if(mLastPosition == mPlayer.getCurrentPosition()){
mSeekHandler.postDelayed(this, delay);
return;
}
mLastPosition = mPlayer.getCurrentPosition();
if(mNativeVideoPlayerListenerList != null
&& mNativeVideoPlayerListenerList.get(0) != null){
mNativeVideoPlayerListenerList.get(0).nativeVideoPlayerPublishProgress(mPlayer.getCurrentPosition());
}
// rerun handler if next time to sent event is not the end
mSeekHandler.postDelayed(this, delay);
}
}, delay);
}
protected void setButtonListener(){
// Update button visibility when a new view is attached
mMuteButton.setMuted(mIsMute);
ImageButton skipButton = (ImageButton)mRootViewGroup.findViewById(R.id.buttonSkip);
mMuteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mIsMute) {
unMute();
} else {
mute();
}
}
});
skipButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mNativeVideoPlayerListenerList != null){
for(VideoPlayerListener listener : mNativeVideoPlayerListenerList){
listener.nativeVideoPlayerDidSkip();
}
}
}
});
}
/*----------------------------------------
* FullPlayer.Listener
*/
@Override
public void onStateChanged(boolean playWhenReady, int playbackState) {
switch (playbackState){
case ExoPlayer.STATE_READY:
// prevent multiple isReady event sending by sending only the first one
if(!mIsReady){
mIsReady = true;
for(VideoPlayerListener listener : mNativeVideoPlayerListenerList){
listener.nativeVideoPlayerIsLoaded();
}
}
break;
case ExoPlayer.STATE_ENDED:
if(mNativeVideoPlayerListenerList != null){
for(VideoPlayerListener listener : mNativeVideoPlayerListenerList){
listener.nativeVideoPlayerFinishPlaying();
}
mNativeVideoPlayerListenerList = null;
}
// prevent Player for sending more than one finish playing event
break;
}
}
@Override
public void onError(Exception e) {
Log.e(LOG_TAG, "Playback failed", e);
Toast.makeText(mContext, "Playback failed", Toast.LENGTH_SHORT).show();
if(mNativeVideoPlayerListenerList != null){
for(VideoPlayerListener listener : mNativeVideoPlayerListenerList){
listener.nativeVideoPlayerOnError(e);
}
}
}
/*----------------------------------------
* Touch event
*/
private boolean mIsNativeClick = false;
private float mStartNativeX;
private float mStartNativeY;
private final float SCROLL_THRESHOLD = 10;
@Override
public boolean onTouch(View v, MotionEvent event) {
switch (event.getAction() & MotionEvent.ACTION_MASK) {
case MotionEvent.ACTION_DOWN:
mStartNativeX = event.getX();
mStartNativeY = event.getY();
mIsNativeClick = true;
return true;
case MotionEvent.ACTION_MOVE:
if (mIsNativeClick && (Math.abs(mStartNativeX - event.getX()) > SCROLL_THRESHOLD
|| Math.abs(mStartNativeY - event.getY()) > SCROLL_THRESHOLD)) {
mIsNativeClick = false;
}
break;
case MotionEvent.ACTION_UP:
if (mIsNativeClick && !isReleased() && mNativeVideoPlayerListenerList != null) {
for(VideoPlayerListener listener : mNativeVideoPlayerListenerList){
listener.nativeVideoPlayerDidTouch();
}
return true;
}
}
return false;
}
}
@qqli007
Copy link

qqli007 commented Apr 15, 2015

when I use the same SurfaceTexture when switch Activity,I have a error, lite this:

A/libc﹕ Fatal signal 11 (SIGSEGV) at 0x7dc35000 (code=1), thread 14119 (Thread-1108)

04-15 11:33:04.314      323-323/? I/DEBUG﹕ *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
04-15 11:33:04.314      323-323/? I/DEBUG﹕ UUID: c16ebdbd-1c06-4fcc-af95-e32b9c7fc021
04-15 11:33:04.314      323-323/? I/DEBUG﹕ Build fingerprint: 'Sony/C6833/C6833:4.4.4/14.4.A.0.108/k___jQ:user/release-keys'
04-15 11:33:04.314      323-323/? I/DEBUG﹕ Revision: '0'
04-15 11:33:04.314      323-323/? I/DEBUG﹕ pid: 13365, tid: 14119, name: Thread-1108  >>> com.test.myexample <<<
04-15 11:33:04.314      323-323/? I/DEBUG﹕ signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 7dc35000
04-15 11:33:04.384      323-323/? I/DEBUG﹕ r0 0000001b  r1 7a99cb5c  r2 ff21221e  r3 7dc34dd0
04-15 11:33:04.384      323-323/? I/DEBUG﹕ r4 7dc35000  r5 446110e0  r6 7a99cc7c  r7 000000fe
04-15 11:33:04.384      323-323/? I/DEBUG﹕ r8 ff21221e  r9 ff21221e  sl ff21221e  fp 0000003f
04-15 11:33:04.384      323-323/? I/DEBUG﹕ ip 02460246  sp 7a99cb20  lr 4048732d  pc 4054f67e  cpsr 200f0030
04-15 11:33:04.384      323-323/? I/DEBUG﹕ d0  000165b8000165b8  d1  000165b8000165b8
04-15 11:33:04.384      323-323/? I/DEBUG﹕ d2  4480400044e51000  d3  0000040244805000
04-15 11:33:04.384      323-323/? I/DEBUG﹕ d4  44e4fffe3f000000  d5  4480400044e50ffe
04-15 11:33:04.384      323-323/? I/DEBUG﹕ d6  0002cb700002cb70  d7  0002cb700002cb70
04-15 11:33:04.384      323-323/? I/DEBUG﹕ d8  000007283f000000  d9  0000000000000000
04-15 11:33:04.384      323-323/? I/DEBUG﹕ d10 0000000000000000  d11 0000000000000000
04-15 11:33:04.384      323-323/? I/DEBUG﹕ d12 0000000000000000  d13 0000000000000000
04-15 11:33:04.384      323-323/? I/DEBUG﹕ d14 0000000000000000  d15 0000000000000000
04-15 11:33:04.384      323-323/? I/DEBUG﹕ d16 4140000000000000  d17 000000003f800000
04-15 11:33:04.384      323-323/? I/DEBUG﹕ d18 0000000000000000  d19 0000000000000000
04-15 11:33:04.384      323-323/? I/DEBUG﹕ d20 76fe1d90c4226ab4  d21 dcb6834829dad06c
04-15 11:33:04.384      323-323/? I/DEBUG﹕ d22 ff00000000000000  d23 4080000000000000
04-15 11:33:04.384      323-323/? I/DEBUG﹕ d24 026cf54a026c9bdc  d25 026da826026d4eb8
04-15 11:33:04.384      323-323/? I/DEBUG﹕ d26 026b8f92026b3624  d27 026c426e026be900
04-15 11:33:04.384      323-323/? I/DEBUG﹕ d28 0269026902680268  d29 026a026a026a0269
04-15 11:33:04.384      323-323/? I/DEBUG﹕ d30 0000000000000000  d31 0000000000000000
04-15 11:33:04.384      323-323/? I/DEBUG﹕ scr 28000013
04-15 11:33:04.394      323-323/? I/DEBUG﹕ backtrace:
04-15 11:33:04.394      323-323/? I/DEBUG﹕ #00  pc 0016767e  /system/lib/libskia.so (S32_opaque_D32_nofilter_DX_neon(SkBitmapProcState const&, unsigned int const*, int, unsigned int*)+101)
04-15 11:33:04.394      323-323/? I/DEBUG﹕ #01  pc 0009f32b  /system/lib/libskia.so (SkBitmapProcShader::shadeSpan(int, int, unsigned int*, int)+84)
04-15 11:33:04.394      323-323/? I/DEBUG﹕ #02  pc 000a6d5f  /system/lib/libskia.so (SkARGB32_Shader_Blitter::blitRect(int, int, int, int)+238)
04-15 11:33:04.394      323-323/? I/DEBUG﹕ #03  pc 000d03a1  /system/lib/libskia.so
04-15 11:33:04.394      323-323/? I/DEBUG﹕ #04  pc 000d0483  /system/lib/libskia.so (SkScan::FillIRect(SkIRect const&, SkRegion const*, SkBlitter*)+222)
04-15 11:33:04.394      323-323/? I/DEBUG﹕ #05  pc 000d0549  /system/lib/libskia.so (SkScan::FillRect(SkRect const&, SkRegion const*, SkBlitter*)+136)
04-15 11:33:04.394      323-323/? I/DEBUG﹕ #06  pc 000d0635  /system/lib/libskia.so (SkScan::FillRect(SkRect const&, SkRasterClip const&, SkBlitter*)+52)
04-15 11:33:04.394      323-323/? I/DEBUG﹕ #07  pc 000b10df  /system/lib/libskia.so (SkDraw::drawRect(SkRect const&, SkPaint const&) const+256)
04-15 11:33:04.394      323-323/? I/DEBUG﹕ #08  pc 000b2571  /system/lib/libskia.so (SkDraw::drawBitmap(SkBitmap const&, SkMatrix const&, SkPaint const&) const+360)
04-15 11:33:04.394      323-323/? I/DEBUG﹕ #09  pc 0009dbb5  /system/lib/libskia.so (SkBitmapDevice::drawBitmapRect(SkDraw const&, SkBitmap const&, SkRect const*, SkRect const&, SkPaint const&, SkCanvas::DrawBitmapRectFlags)+504)
04-15 11:33:04.394      323-323/? I/DEBUG﹕ #10  pc 000ab5f7  /system/lib/libskia.so (SkCanvas::internalDrawBitmapRect(SkBitmap const&, SkRect const*, SkRect const&, SkPaint const*, SkCanvas::DrawBitmapRectFlags)+182)
04-15 11:33:04.394      323-323/? I/DEBUG﹕ #11  pc 00077e27  /system/lib/libandroid_runtime.so
04-15 11:33:04.394      323-323/? I/DEBUG﹕ #12  pc 00077f8b  /system/lib/libandroid_runtime.so
04-15 11:33:04.394      323-323/? I/DEBUG﹕ #13  pc 00077fbf  /system/lib/libandroid_runtime.so
04-15 11:33:04.394      323-323/? I/DEBUG﹕ #14  pc 0002034c  /system/lib/libdvm.so (dvmPlatformInvoke+112)
04-15 11:33:04.394      323-323/? I/DEBUG﹕ #15  pc 00050fcf  /system/lib/libdvm.so (dvmCallJNIMethod(unsigned int const*, JValue*, Method const*, Thread*)+398)
04-15 11:33:04.394      323-323/? I/DEBUG﹕ #16  pc 000297e0  /system/lib/libdvm.so
04-15 11:33:04.394      323-323/? I/DEBUG﹕ #17  pc 00030c6c  /system/lib/libdvm.so (dvmMterpStd(Thread*)+76)
04-15 11:33:04.394      323-323/? I/DEBUG﹕ #18  pc 0002e304  /system/lib/libdvm.so (dvmInterpret(Thread*, Method const*, JValue*)+184)
04-15 11:33:04.394      323-323/? I/DEBUG﹕ #19  pc 00063431  /system/lib/libdvm.so (dvmCallMethodV(Thread*, Method const*, Object*, bool, JValue*, std::__va_list)+336)
04-15 11:33:04.394      323-323/? I/DEBUG﹕ #20  pc 00063455  /system/lib/libdvm.so (dvmCallMethod(Thread*, Method const*, Object*, JValue*, ...)+20)
04-15 11:33:04.394      323-323/? I/DEBUG﹕ #21  pc 00058133  /system/lib/libdvm.so
04-15 11:33:04.394      323-323/? I/DEBUG﹕ #22  pc 0000d258  /system/lib/libc.so (__thread_entry+72)
04-15 11:33:04.394      323-323/? I/DEBUG﹕ #23  pc 0000d3f0  /system/lib/libc.so (pthread_create+240)
04-15 11:33:04.394      323-323/? I/DEBUG﹕ stack:
04-15 11:33:04.394      323-323/? I/DEBUG﹕ 7a99cae0  000000f9
04-15 11:33:04.394      323-323/? I/DEBUG﹕ 7a99cae4  000001f4
04-15 11:33:04.394      323-323/? I/DEBUG﹕ 7a99cae8  000001f5
04-15 11:33:04.394      323-323/? I/DEBUG﹕ 7a99caec  000001f6
04-15 11:33:04.394      323-323/? I/DEBUG﹕ 7a99caf0  000001f7
04-15 11:33:04.394      323-323/? I/DEBUG﹕ 7a99caf4  000001f8
04-15 11:33:04.394      323-323/? I/DEBUG﹕ 7a99caf8  000001f9
04-15 11:33:04.394      323-323/? I/DEBUG﹕ 7a99cafc  000001fa
04-15 11:33:04.394      323-323/? I/DEBUG﹕ 7a99cb00  000003f6
04-15 11:33:04.394      323-323/? I/DEBUG﹕ 7a99cb04  000003f7
04-15 11:33:04.394      323-323/? I/DEBUG﹕ 7a99cb08  000003f8
04-15 11:33:04.394      323-323/? I/DEBUG﹕ 7a99cb0c  000003f9
04-15 11:33:04.394      323-323/? I/DEBUG﹕ 7a99cb10  440524e5  /dev/ashmem/dalvik-heap (deleted)
04-15 11:33:04.394      323-323/? I/DEBUG﹕ 7a99cb14  439186bd  /dev/ashmem/dalvik-heap (deleted)
04-15 11:33:04.394      323-323/? I/DEBUG﹕ 7a99cb18  000007f7
04-15 11:33:04.394      323-323/? I/DEBUG﹕ 7a99cb1c  000007f8
04-15 11:33:04.394      323-323/? I/DEBUG﹕ #00  7a99cb20  7dc34dd0
04-15 11:33:04.394      323-323/? I/DEBUG﹕ 7a99cb24  000000fe
04-15 11:33:04.394      323-323/? I/DEBUG﹕ 7a99cb28  00000134
04-15 11:33:04.394      323-323/? I/DEBUG﹕ 7a99cb2c  7a99d6d8  [stack:14119]
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cb30  7dc34dd0
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cb34  000005f4
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cb38  000000fe
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cb3c  40552aef  /system/lib/libskia.so
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cb40  4054f619  /system/lib/libskia.so (S32_opaque_D32_nofilter_DX_neon(SkBitmapProcState const&, unsigned int const*, int, unsigned int*))
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cb44  4048732d  /system/lib/libskia.so (SkBitmapProcShader::shadeSpan(int, int, unsigned int*, int)+86)
04-15 11:33:04.404      323-323/? I/DEBUG﹕ #01  7a99cb48  0000033d
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cb4c  0000ff8b
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cb50  0000ff8c
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cb54  0000033d
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cb58  00000123
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cb5c  02140214
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cb60  02150215
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cb64  02160215
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cb68  02170216
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cb6c  02170217
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cb70  02180218
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cb74  02190218
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cb78  02190219
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cb7c  021a021a
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cb80  021b021a
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cb84  021b021b
04-15 11:33:04.404      323-323/? I/DEBUG﹕ ........  ........
04-15 11:33:04.404      323-323/? I/DEBUG﹕ #02  7a99cd80  00000728
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cd84  75d74cae  /data/dalvik-cache/data@app@com.test.myexample-1.apk@classes.dex
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cd88  76aa6eb8
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cd8c  6d5327d0  /dev/ashmem/dalvik-LinearAlloc (deleted)
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cd90  00000000
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cd94  00000000
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cd98  00000001
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cd9c  7a99dc40  [stack:14119]
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cda0  00000000
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cda4  4048ec71  /system/lib/libskia.so (SkARGB32_Shader_Blitter::blitRect(int, int, int, int))
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cda8  00000000
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cdac  76a8da80
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cdb0  7a99d3c0  [stack:14119]
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cdb4  7a99d338  [stack:14119]
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cdb8  7a99d934  [stack:14119]
04-15 11:33:04.404      323-323/? I/DEBUG﹕ 7a99cdbc  7a99dad0  [stack:14119]
04-15 11:33:04.404      323-323/? I/DEBUG﹕ ........  ........
04-15 11:33:04.414      323-323/? I/DEBUG﹕ memory near r1:
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99cb3c 40552aef 4054f619 4048732d 0000033d
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99cb4c 0000ff8b 0000ff8c 0000033d 00000123
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99cb5c 02140214 02150215 02160215 02170216
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99cb6c 02170217 02180218 02190218 02190219
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99cb7c 021a021a 021b021a 021b021b 021c021c
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99cb8c 021d021c 021e021d 021e021e 021f021f
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99cb9c 0220021f 02200220 02210221 02220221
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99cbac 02220222 02230223 02240223 02240224
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99cbbc 02250225 02260226 02270226 02270227
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99cbcc 02280228 02290228 02290229 022a022a
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99cbdc 022b022a 022b022b 022c022c 022d022d
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99cbec 022e022d 022e022e 022f022f 0230022f
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99cbfc 02300230 02310231 02320231 02320232
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99cc0c 02330233 02340234 02350234 02350235
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99cc1c 02360236 02370236 02370237 02380238
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99cc2c 02390238 02390239 023a023a 023b023b
04-15 11:33:04.414      323-323/? I/DEBUG﹕ memory near r3:
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc34db0 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc34dc0 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc34dd0 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc34de0 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc34df0 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc34e00 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc34e10 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc34e20 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc34e30 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc34e40 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc34e50 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc34e60 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc34e70 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc34e80 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc34e90 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc34ea0 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ memory near r4:
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc34fe0 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc34ff0 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc35000 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc35010 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc35020 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc35030 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc35040 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc35050 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc35060 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc35070 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc35080 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc35090 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc350a0 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc350b0 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc350c0 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7dc350d0 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.414      323-323/? I/DEBUG﹕ memory near r5:
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 446110c0 ff272a21 ff272a21 ff272a21 ff272a21
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 446110d0 ff272a21 ff272a21 ff272a21 ff272a21
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 446110e0 ff141511 ff141511 ff141511 ff141511
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 446110f0 ff141511 ff141511 ff141511 ff141511
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 44611100 ff141511 ff141511 ff141511 ff141511
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 44611110 ff141511 ff141511 ff141511 ff141511
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 44611120 ff141414 ff141414 ff141414 ff141414
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 44611130 ff141414 ff141414 ff141414 ff141414
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 44611140 ff141414 ff141414 ff141414 ff141414
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 44611150 ff141414 ff141414 ff141414 ff141414
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 44611160 ff141414 ff141414 ff141414 ff141414
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 44611170 ff141414 ff141414 ff141414 ff141414
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 44611180 ff141414 ff141414 ff141414 ff141414
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 44611190 ff141414 ff141414 ff141414 ff141414
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 446111a0 ff131313 ff131313 ff131313 ff131313
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 446111b0 ff131313 ff131313 ff131313 ff131313
04-15 11:33:04.414      323-323/? I/DEBUG﹕ memory near r6:
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99cc5c 02410241 02420241 02430242 02430243
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99cc6c 02440244 02450244 02450245 02460246
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99cc7c 02470246 02470247 02480248 02490248
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99cc8c 024a0249 024a024a 024b024b 024c024b
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99cc9c 024c024c 024d024d 024e024d 024e024e
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99ccac 024f024f 0250024f 02510250 02510251
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99ccbc 02520252 02530252 02530253 02540254
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99cccc 02550254 02550255 02560256 02570256
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99ccdc 02570257 02580258 02590259 025a0259
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99ccec 025a025a 025b025b 025c025b 025c025c
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99ccfc 025d025d 025e025d 025e025e 025f025f
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99cd0c 02600260 02610260 02610261 02620262
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99cd1c 02630262 02630263 02640264 02650264
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99cd2c 02650265 02660266 02670267 02680267
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99cd3c 02680268 02690269 026a0269 026a026a
04-15 11:33:04.414      323-323/? I/DEBUG﹕ 7a99cd4c 026b026b 026c026b 026c026c 00000000
04-15 11:33:04.414      323-323/? I/DEBUG﹕ memory near ip:
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 02460224 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 02460234 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 02460244 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 02460254 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 02460264 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 02460274 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 02460284 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 02460294 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 024602a4 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 024602b4 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 024602c4 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 024602d4 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 024602e4 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 024602f4 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 02460304 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 02460314 ffffffff ffffffff ffffffff ffffffff
04-15 11:33:04.424      323-323/? I/DEBUG﹕ memory near sp:
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 7a99cb00 000003f6 000003f7 000003f8 000003f9
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 7a99cb10 440524e5 439186bd 000007f7 000007f8
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 7a99cb20 7dc34dd0 000000fe 00000134 7a99d6d8
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 7a99cb30 7dc34dd0 000005f4 000000fe 40552aef
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 7a99cb40 4054f619 4048732d 0000033d 0000ff8b
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 7a99cb50 0000ff8c 0000033d 00000123 02140214
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 7a99cb60 02150215 02160215 02170216 02170217
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 7a99cb70 02180218 02190218 02190219 021a021a
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 7a99cb80 021b021a 021b021b 021c021c 021d021c
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 7a99cb90 021e021d 021e021e 021f021f 0220021f
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 7a99cba0 02200220 02210221 02220221 02220222
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 7a99cbb0 02230223 02240223 02240224 02250225
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 7a99cbc0 02260226 02270226 02270227 02280228
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 7a99cbd0 02290228 02290229 022a022a 022b022a
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 7a99cbe0 022b022b 022c022c 022d022d 022e022d
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 7a99cbf0 022e022e 022f022f 0230022f 02300230
04-15 11:33:04.424      323-323/? I/DEBUG﹕ code around pc:
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 4054f65c fa1f3801 f855f288 ea4f9022 f8554218
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 4054f66c fa1fa022 f855f28c ea4f8022 f855421c
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 4054f67c e8842022 f8c40600 60e28008 36083410
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 4054f68c dce32800 72ebea2b 0703f007 eb012400
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 4054f69c eb0301c2 e0061302 0014f831 2020f855
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 4054f6ac 2024f843 42bc3401 e8bdd1f6 bf008ff8
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 4054f6bc 0006d586 ffffeff0 4ff7e92d 6803469a
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 4054f6cc f8b0468b 460d8068 691e4654 1053699f
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 4054f6dc e0204699 1c08f855 39fff109 0c09b288
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 4054f6ec fb070080 46410c01 000cf856 000ce88d
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 4054f6fc f904f738 2c04f855 0c11b293 0c08f844
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 4054f70c fb070098 46410201 f73858b0 f844f8f7
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 4054f71c e89d0c04 3508000c f1b93408 dcd90f00
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 4054f72c ea2307d1 d50c74e3 0034f85b 0c01b282
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 4054f73c fb070093 46413701 f73859f0 f84af8df
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 4054f74c e8bd0034 00008ffe 4ff0e92d 6803469a
04-15 11:33:04.424      323-323/? I/DEBUG﹕ code around lr:
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 4048730c 454d9b03 462cbfb4 4630464c 4622a904
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 4048731c 46439300 463047d0 4622a904 47d8463b
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 4048732c d0031b2d eb0744a0 e7e90784 7d05f50d
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 4048733c 8ff0e8bd 4ff0e92d 7d05f5ad 40fcf8d0
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 4048734c 92034688 9d8e461f 0688f100 9500b11c
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 4048735c 47a04630 f8d0e01f f44fa100 f8d07100
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 4048736c 4630b108 fa38f003 9b034681 bfb4454d
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 4048737c 464c462c a9044630 93004622 47d04643
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 4048738c a9044630 463b4622 1b2d47d8 44a0d003
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 4048739c 0744eb07 f50de7e9 e8bd7d05 b5108ff0
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 404873ac f1004604 f0020088 4620ff7c 4010e8bd
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 404873bc b99cf7fe 4604b570 461d4616 4608b121
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 404873cc 015cf104 f902f7fd 4630b116 fd62f01b
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 404873dc f894b12d 602b30f3 00f4f894 20016068
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 404873ec b538bd70 4605460c f965f034 46206823
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 404873fc 015cf105 47906f1a f8956820 6ac310f3
04-15 11:33:04.424      323-323/? I/DEBUG﹕ memory map around fault addr 7dc35000:
04-15 11:33:04.424      323-323/? I/DEBUG﹕ 7d610000-7d621000 rw- /dev/kgsl-3d0
04-15 11:33:04.424      323-323/? I/DEBUG﹕ (no map for address)
04-15 11:33:04.424      323-323/? I/DEBUG﹕ bea72000-bea93000 rw- [stack]

I use lockCanvas() and unlockCanvasAndPost() for rendering.
Do you have any idea about this error?

@HugoGresse
Copy link
Author

If you are using canvas I guess I can't help you @qqli007

@lipangit
Copy link

lipangit commented Nov 1, 2016

@HugoGresse Can you help me, In this project there are two TextureView, I want to switch TextureView when click the TextureView without delay, I make many try these days but faild, Can you help me ?

If succeed the project will use exoplayer instead of ijkplayer, It will much better.

@lipangit
Copy link

lipangit commented Nov 2, 2016

@HugoGresse hello

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment