현재 MediaCodec을 사용해서 영상을 렌더링하고 있는데요.
처음에 holder에 대한 초기화 및 사용엔 문제가 되질 않고, 중지했을 때 bitmap에 이미지를 그렸다가 다시 시작했을 경우,
holder.getSurface() 가 실패하고 mediaCodec configure 및 start에서 fail이 납니다.
말로설명드리기가 어려워 코드를 첨부하자면..
public threadclass extends Thread {
boolean bStart;
SurfaceHolder sfHolder;
Canvas canvas;
Bitmap stopImg = BitmapFactory.decodeResource(m_Context.getResources(), R.drawable.logo); //삽입한 png 파일
threadclass (SurfaceHolder Holder) {
bStart = false;
sfHolder = Holder;
canvas = null;
}
public void run() {
if ( bStart == true )
{
MediaCodec codec = MediaCodec.createDecoderByType(strMime); //H264
MediaFormat format = MediaFormat.createVideoformat(strMime, width, height);
try {
codec.configure( format, sfHolder.getSurface(), null, 0);
} catch (illegalStateException ie) {
ie.printStackTrace();
}
codec.start();
//디코딩 & 렌더링 작업.
} else {
codec.stop();
codec.release();
try {
canvas = sfHolder.lockCanvas();
//여기다가 정지 시 bitmap이미지 그리는 작업을 합니다.
canvas.drawBitmap(stopImg, nMarginLeft, nMarginTop, null);
} catch ( Exception e ) {
e.printfStackTrace();
} finally {
if ( canvas != null )
sfHolder.unlockCanvasAndPost(canvas);
}
}
처음에 미디어코덱으로 디코딩 및 렌더링 성공 - 중지됐을 시 png 이미지 그리기 성공 - 다시 시작해서 미디어코덱 사용하려고 하는 부분 >> codec.start()에서 실패하고 app 비정상 종료
이런 상황인데 아무리봐도 그 전에 configure() 해주는 부분에서 실패하는것 같아요. surfaceholder에 대한 권한이 캔버스로 넘어간거 같은데..어떻게 해결을 해줘야할지 답변 부탁드립니다. 감사합니다!