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

남은그루터기님이 올리신 ffmpeg 플레이어 구현 관련 질문입니다.

0 추천
if (frameFinished) {
gImgConvertCtx = sws_getCachedContext(gImgConvertCtx,
gVideoCodecCtx->width, gVideoCodecCtx->height, gVideoCodecCtx->pix_fmt,
1280, 720, PIX_FMT_RGB565LE, SWS_BICUBIC, NULL, NULL, NULL);
sws_scale(gImgConvertCtx, gFrame->data, gFrame->linesize, 0, gVideoCodecCtx->height, gFrameRGB->data, gFrameRGB->linesize);
av_free_packet(&packet);
		
return 0;
}

 

gImgConvertCtx  이 부분이 크기 조정 하는 부분 같아서 저렇게 노트2 크기로 1280,720 하고 

자바쪽은 

mBitmap = Bitmap.createBitmap(1280, 720, Bitmap.Config.RGB_565);

이렇게 크기를 조정했는데 에러가 뜨네요.. 혹시 짐작가는 부분있으시면 조언 부탁드립니다.

봉가봉가 (260 포인트) 님이 2014년 9월 2일 질문

1개의 답변

+1 추천
 
채택된 답변

크기 조절하는 부분이 맞기는한데..  

void copyPixels(uint8_t *pixels) 에서 gPictureSize 로 디코딩된 데이터를 복사해가는데.

gPictureSize 가 원본 가로 x 세로로 설정하셨고,  

또한 변환시 사용하는 gFrameRGB 의 사이즈도, 원본 사이즈로 mallioc 해 두었기 때문에, 오류가 난 것으로 추정됩니다.

 

아래 부분도 변환할 사이즈로 변경해 보세요..
 
gPictureSize = avpicture_get_size(PIX_FMT_RGB565LE, gVideoCodecCtx->width, gVideoCodecCtx->height);
gVideoBuffer = (uint8_t*)(malloc(sizeof(uint8_t) * gPictureSize));
 
avpicture_fill((AVPicture*)gFrameRGB, gVideoBuffer, PIX_FMT_RGB565LE, gVideoCodecCtx->width, gVideoCodecCtx->height);

 

사악미소 (65,330 포인트) 님이 2014년 9월 2일 답변
봉가봉가님이 2014년 9월 2일 채택됨
아 이렇게 간단한 것을 ... 죄송하기까지 하네요 ..
염치 불구하고 하나만 더 여쭤보겠습니다
MX 플레이어보면 화면에 맞추기,가운데 , 100% 등등 여러 크기로 조정이 가능한데 그런것들은 자바단에서 구현한건지 아니면 c로 값을넘겨줘서 구현한건지 추측되는 부분좀 알려주시면 감사하겠습니다.
아 가로 x 세로 로 한것은 디바이스가 가로보기로 되있을때  경우를 설정한겁니다
MX개발자가 아니다보니 . 정확한 로직은 제가 알 수 없습니다..
단지 자바 메소드 중
http://developer.android.com/reference/android/view/View.html#setMeasuredDimension(int, int) 를 사용해서 뷰 사이즈 비율을 조정할 순 있습니다./
답변 감사드립니다!
뷰만 조정하면 영상자체는 안짤리고 그 뷰에 맞게 꽉차나요 ?
남은그루터기님 소스로도 가능한지는 모르겠습니다만..
일반적으로는 레이아웃 구성에 따라 다릅니다.
답변해주셔서 진심으로 감사드립니다.
...