Openmax в Android, как получить данные yuv из OMX_BUFFERHEADERTYPE
Всем известно, что структура "OMX_BUFFERHEADERTYPE" содержит буфер данных. Поле "pBuffer" указывает на буфер данных, а "nFilledLen" означает количество байтов, находящихся в данный момент в буфере. Я пытаюсь выгрузить yuvdata из "OnFillBufferDone()" в "OMX.cpp", но сброшенные данные были повреждены и неполны. код как следующий:
OMX_ERRORTYPE OMX::OnFillBufferDone(
node_id node, buffer_id buffer, OMX_IN OMX_BUFFERHEADERTYPE *pBuffer) {
ALOGV("OnFillBufferDone buffer=%p", pBuffer);
omx_message msg;
msg.type = omx_message::FILL_BUFFER_DONE;
msg.node = node;
msg.u.extended_buffer_data.buffer = buffer;
msg.u.extended_buffer_data.range_offset = pBuffer->nOffset;
msg.u.extended_buffer_data.range_length = pBuffer->nFilledLen;
msg.u.extended_buffer_data.flags = pBuffer->nFlags;
msg.u.extended_buffer_data.timestamp = pBuffer->nTimeStamp;
//dump date code
if(pBuffer->nFilledLen>0) {
FILE *fp=NULL;
fp=fopen("/data/video.yuv","a+");
if(fp) {
fwrite((unsigned char *)pBuffer->pBuffer,1,pBuffer->nFilledLen,fp);
fclose(fp);
}else {
ALOGE(" catch data is failure");
}/*...*/}}}
Это неправильно, что метод сброса данных yuv?
Можете ли вы сказать мне, как сбросить yuv? Спасибо!!!!