android omxcodec jni,android - OMXCodec die when start decoding - Stack Overflow

I'd like to retrieve frames from video file.

My code followed the article Use Android Hardware Decoder with OMXCodec in NDK, and also referred the code of AwesomePlayer.cpp(AOSP) and libstagefright.cpp(ffmpeg). But it still hangs whenever OMXCodec start decoding. I have no idea what the problem is.

I'd grateful for any help.

the code:

int main(int argc, char *argv[])

{

OMXClient mClient;

status_t ret = mClient.connect();

LOGD("connect status is %d\n", ret);

sp mDs = DataSource::CreateFromURI("file:///sdcard/display/lwtwjod.mp4");

off64_t size = 0;

ret = mDs->getSize(&size);

LOGD("getSize[ret=%d]: %lld\n", ret, size);

sp mMe = MediaExtractor::Create(mDs);

size_t tracksNum = mMe->countTracks();

LOGD("%u tracks\n", tracksNum);

sp mMs;

bool hasVideo = false;

for(size_t i = 0; i != mMe->countTracks(); i++){

sp mMd_track = mMe->getTrackMetaData(i);

const char *_mime;

mMd_track->findCString(kKeyMIMEType, &_mime);

LOGD("the mime is %s\n", _mime);

String8 mime = String8(_mime);

if (!strncasecmp(mime.string(), "video/", 6)) {

LOGD("find video track!\n");

hasVideo = true;

mMs = mMe->getTrack(i);

int wid, hei;

mMd_track->findInt32(kKeyWidth, &wid);

mMd_track->findInt32(kKeyHeight, &hei);

LOGD("width: %d, height: %d\n", wid, hei);

break;

}

}

if(hasVideo){

sp decoder =

OMXCodec::Create(mClient.interface(), mMs->getFormat(),

false, mMs,

NULL, OMXCodec::kClientNeedsFramebuffer);

LOGD("start decoding..\n");

ret = decoder->start(); // hangs here

LOGD("decoding return: %d\n", ret);

for(;;){

MediaBuffer *buffer;

buffer = NULL;

ret = decoder->read(&buffer);

LOGD("read decoded buffer result: %d\n", ret);

break;

}

}

}

The logcat output:

I/OMXClient( 5470): Using client-side OMX mux.

D/NativeCodec( 5470): connect status is 0

D/NativeCodec( 5470): getSize[ret=0]: 165748860

D/NativeCodec( 5470): 2 tracks

D/NativeCodec( 5470): the mime is video/avc

D/NativeCodec( 5470): find video track!

D/OMXCodec( 5470): Successfully allocated OMX node 'OMX.qcom.video.decoder.avc'

I/OMXCodec( 5470): [OMX.qcom.video.decoder.avc] AVC profile = 100 (High), level = 31

E/OMX-VDEC-1080P( 197):

E/OMX-VDEC-1080P( 197): No color conversion required

E/OMX-VDEC-1080P( 197):

E/OMX-VDEC-1080P( 197): No color conversion required

E/OMX-VDEC-1080P( 197):

E/OMX-VDEC-1080P( 197): No color conversion required

E/OMX-VDEC-1080P( 197):

E/OMX-VDEC-1080P( 197): No color conversion required

E/OMX-VDEC-1080P( 197):

E/OMX-VDEC-1080P( 197): No color conversion required

E/OMX-VDEC-1080P( 197):

E/OMX-VDEC-1080P( 197): No color conversion required

I/OMXCodec( 5470): [OMX.qcom.video.decoder.avc] video dimensions are 1280 x 720

I/OMXCodec( 5470): [OMX.qcom.video.decoder.avc] Crop rect is 1280 x 720 @ (0, 0)

D/NativeCodec( 5470): start decoding..

I/OMXCodec( 5470): [OMX.qcom.video.decoder.avc] allocating 2 buffers of size 2097152 on input port

I/OMXCodec( 5470): [OMX.qcom.video.decoder.avc] allocated buffer 0xb8e39390 on input port

I/OMXCodec( 5470): [OMX.qcom.video.decoder.avc] allocated buffer 0xb8e393e0 on input port

E/OMX-VDEC-1080P( 197):

E/OMX-VDEC-1080P( 197): No color conversion required

I/OMXCodec( 5470): [OMX.qcom.video.decoder.avc] allocating 15 buffers of size 1433600 on output port

E/OMX-VDEC-1080P( 197): GET_MV_BUFFER_SIZE returned: Size: 245760 and alignment: 8192

I/OMXCodec( 5470): [OMX.qcom.video.decoder.avc] allocated buffer 0xb8eb9b08 on output port

I/OMXCodec( 5470): [OMX.qcom.video.decoder.avc] allocated buffer 0xb8eb9b58 on output port

I/OMXCodec( 5470): [OMX.qcom.video.decoder.avc] allocated buffer 0xb8eb9ba8 on output port

I/OMXCodec( 5470): [OMX.qcom.video.decoder.avc] allocated buffer 0xb8eb9bf8 on output port

I/OMXCodec( 5470): [OMX.qcom.video.decoder.avc] allocated buffer 0xb8eb9c48 on output port

I/OMXCodec( 5470): [OMX.qcom.video.decoder.avc] allocated buffer 0xb8eb9c98 on output port

I/OMXCodec( 5470): [OMX.qcom.video.decoder.avc] allocated buffer 0xb8eb9ce8 on output port

I/OMXCodec( 5470): [OMX.qcom.video.decoder.avc] allocated buffer 0xb8eb9d38 on output port

I/OMXCodec( 5470): [OMX.qcom.video.decoder.avc] allocated buffer 0xb8eb9d88 on output port

I/OMXCodec( 5470): [OMX.qcom.video.decoder.avc] allocated buffer 0xb8eb9dd8 on output port

I/OMXCodec( 5470): [OMX.qcom.video.decoder.avc] allocated buffer 0xb8eb9e28 on output port

I/OMXCodec( 5470): [OMX.qcom.video.decoder.avc] allocated buffer 0xb8eb9e78 on output port

I/OMXCodec( 5470): [OMX.qcom.video.decoder.avc] allocated buffer 0xb8eb9ec8 on output port

I/OMXCodec( 5470): [OMX.qcom.video.decoder.avc] allocated buffer 0xb8eb9f18 on output port

I/OMXCodec( 5470): [OMX.qcom.video.decoder.avc] allocated buffer 0xb8eb9f68 on output port

E/OMXNodeInstance( 197): !!! Observer died. Quickly, do something, ... anything...

I/OMXNodeInstance( 197): OMX_FreeBuffer for buffer header 0xb8eb9f68 successful

I/OMXNodeInstance( 197): OMX_FreeBuffer for buffer header 0xb8eb9f18 successful

I/OMXNodeInstance( 197): OMX_FreeBuffer for buffer header 0xb8eb9ec8 successful

I/OMXNodeInstance( 197): OMX_FreeBuffer for buffer header 0xb8eb9e78 successful

I/OMXNodeInstance( 197): OMX_FreeBuffer for buffer header 0xb8eb9e28 successful

I/OMXNodeInstance( 197): OMX_FreeBuffer for buffer header 0xb8eb9dd8 successful

I/OMXNodeInstance( 197): OMX_FreeBuffer for buffer header 0xb8eb9d88 successful

I/OMXNodeInstance( 197): OMX_FreeBuffer for buffer header 0xb8eb9d38 successful

I/OMXNodeInstance( 197): OMX_FreeBuffer for buffer header 0xb8eb9ce8 successful

I/OMXNodeInstance( 197): OMX_FreeBuffer for buffer header 0xb8eb9c98 successful

I/OMXNodeInstance( 197): OMX_FreeBuffer for buffer header 0xb8eb9c48 successful

I/OMXNodeInstance( 197): OMX_FreeBuffer for buffer header 0xb8eb9bf8 successful

I/OMXNodeInstance( 197): OMX_FreeBuffer for buffer header 0xb8eb9ba8 successful

I/OMXNodeInstance( 197): OMX_FreeBuffer for buffer header 0xb8eb9b58 successful

I/OMXNodeInstance( 197): OMX_FreeBuffer for buffer header 0xb8eb9b08 successful

I/OMXNodeInstance( 197): OMX_FreeBuffer for buffer header 0xb8e393e0 successful

I/OMXNodeInstance( 197): OMX_FreeBuffer for buffer header 0xb8e39390 successful

E/OMX-VDEC-1080P( 197):

E/OMX-VDEC-1080P( 197): Error in ioctl read next msg

E/ ( 197):

E/ ( 197): Destroy C2D instance

E/ ( 197):

E/ ( 197): Destroy C2D instance

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值