1.获取graphicBuffer中的内存;
struct AwesomeNativeWindowRenderer : public AwesomeRenderer {
AwesomeNativeWindowRenderer(
const sp<ANativeWindow> &nativeWindow,
int32_t rotationDegrees,int32_t width,int32_t height,int32_t is_hevc)
: mNativeWindow(nativeWindow),
power_fd(-1),
mWidth(width),
mHeight(height),
mIshevc(is_hevc){
applyRotation(rotationDegrees);
openVideoPowerControl();
}
virtual void render(MediaBuffer *buffer) {
ATRACE_CALL();
int64_t timeUs;
CHECK(buffer->meta_data()->findInt64(kKeyTime, &timeUs));
native_window_set_buffers_timestamp(mNativeWindow.get(), timeUs * 1000);
status_t err = mNativeWindow->queueBuffer(
mNativeWindow.get(), buffer->graphicBuffer().get(), -1);
if (err != 0) {
ALOGE("queueBuffer failed with error %s (%d)", strerror(-err),
-err);
return;
}
// ALOGW("render hex: %d",buffer->range_length());
sp<GraphicBuffer> gb = buffer->graphicBuffer().get();
char *buff ;
gb->lock(GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_SW_WRITE_OFTEN,(void **)&buff);
//ALOGE("buff %p",buff);
//hexdump(buff,180);
gb->unlock();
// hexdump((const uint8_t *)buffer->data(),buffer->size());
sp<MetaData> metaData = buffer->meta_data();
metaData->setInt32(kKeyRendered, 1);
}