마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

MediaCodec을 사용한 H/W디코딩을 하려고 하는데요..사용방법 질문입니다.

0 추천

기존에는 RTSP데이터를 끌어와서 FFMPEG S/W 디코딩한 데이터를 단말에 그려줬었는데요.

 

Full HD 성능이 나오질 않아서 MediaCodec을 사용하려고 보니 이해가 잘 안가서 질문드립니다.

 

Canvas canvas = null;
Bitmap bmp = Bitmap.createBitmap(640, 480, Bitmap.Config.RGB_565);
ByteBuffer buf = null;

while (true)
{
   int nRet = xxxLib.GetVideoData(m_videoData);         //m_videoData는 byte[] 형태고 라이브러리로부터 디코딩된 데이터를 받는 버퍼
   if ( nRet == 0 )
   {
       buf = ByteBuffer.wrap(m_videoData);
       canvas = Holder.lockCanvas();
       try 
       {
            canvas.drawBitmap(bmp, null, m_rect, null); 
       }
       catch ( Excecption e ) {}
       finally 
       {
            if ( canvas != null )
                 Holder.unlockCanvasAndPost(canvas);
       }
}
            

바꾸게 된다면 라이브러리에서 디코딩된 데이터를 주지 않고 인코딩된 데이터를 줄 예정이구요.

 

https://plus.google.com/117190652378947175005/posts/RyM9zDQxX9G

여기저기서 샘플코드를 봐도..파일에서 읽어들이고 사용하는 버퍼가 3개, 4개씩 사용되던데 저같은경우 인코딩된 데이터를 바로 큐에 집어넣기 위한 과정이 어떤식으로 작성되야 하는지 감이 오질 않습니다.

 

답변 부탁드려요...감사합니다

 

 

emerald (760 포인트) 님이 2014년 12월 29일 질문

1개의 답변

0 추천
디코딩한 내용을 캔버스로 그리는게 아니라 surface에 바로 출력하는 방식으로 사용해야 합니다.

구글에서 예제로 주는 아래 URL을 참조해보세요

http://developer.android.com/guide/topics/media/exoplayer.html
사악미소 (65,330 포인트) 님이 2014년 12월 29일 답변
...