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);
}
本文介绍了一个名为AwesomeNativeWindowRenderer的类实现,该类继承自AwesomeRenderer,并用于处理视频帧数据。它通过使用GraphicBuffer对象来访问和操作内存中的视频帧数据,包括设置缓冲区时间戳、排队缓冲区以及读写操作。
3766

被折叠的 条评论
为什么被折叠?



