HarmonyOS FFmpeg解码后的rgba数据绘制到Xcomponent有demo提供吗?

FFmpeg解码后的rgba数据怎么绘制到Xcomponent上面有没有参考的demo?

使用了NativeImage:

void OhosSWDisplay::CopyToNativeImage(int width, int height, uint8_t *ragaBuffer) {
  if (nativeImage_ == nullptr) {
    return;
  }
  // 获取生产者NativeWindow
  OHNativeWindow *nativeWindow = OH_NativeImage_AcquireNativeWindow(nativeImage_);
  if (!nativeWindow) {
    ALOGE("OH_NativeImage_AcquireNativeWindow failed");
    return;
  }
  // 设置NativeWindow的宽高。
  int code = SET_BUFFER_GEOMETRY;
  int32_t ret = OH_NativeWindow_NativeWindowHandleOpt(nativeWindow, code, width, height);
  if (ret != 0) {
    ALOGE("OH_NativeWindow_NativeWindowHandleOpt failed");
    return;
  }

  // 从NativeWindow中获取NativeWindowBuffer。
  OHNativeWindowBuffer *buffer = nullptr;
  int fenceFd;
  // 通过 OH_NativeWindow_NativeWindowRequestBuffer 获取 OHNativeWindowBuffer 实例
  ret = OH_NativeWindow_NativeWindowRequestBuffer(nativeWindow, &buffer, &fenceFd);
  if (ret != 0) {
    ALOGE("OH_NativeWindow_NativeWindowRequestBuffer failed");
    return;
  }
  BufferHandle *handle = OH_NativeWindow_GetBufferHandleFromNative(buffer);
  if (!handle) {
    ALOGE("OH_NativeWindow_GetBufferHandleFromNative failed");
    return;
  }

  // 将生产的内容写入NativeWindowBuffer。
  // 使用系统mmap接口拿到bufferHandle的内存虚拟地址
  void *mappedAddr = mmap(handle->virAddr, handle->size, PROT_READ | PROT_WRITE, MAP_SHARED, handle->fd, 0);
  if (mappedAddr == MAP_FAILED) {
    ALOGE("mmap failed");
    return;
  }
  uint32_t *pixel = static_cast<uint32_t *>(mappedAddr);
  for (uint32_t x = 0; x < width; x++) {
    for (uint32_t y = 0; y < height; y++) {
      *pixel++ = *ragaBuffer++;
    }
  }
  // 内存使用完记得去掉内存映射
  int result = munmap(mappedAddr, handle->size);
  if (result == -1) {
    ALOGE("munmap failed");
  }

  // 将NativeWindowBuffer提交到NativeWindow。
  // 设置刷新区域,如果Region中的Rect为nullptr,或者rectNumber为0,则认为NativeWindowBuffer全部有内容更改。
  Region region{nullptr, 0};
  // 通过OH_NativeWindow_NativeWindowFlushBuffer 提交给消费者使用,例如:显示在屏幕上。
  OH_NativeWindow_NativeWindowFlushBuffer(nativeWindow, buffer, fenceFd, region);
  // 用完需要销毁NativeWindow。
  OH_NativeWindow_DestroyNativeWindow(nativeWindow);
}

但是在调用几次后OH_NativeWindow_NativeWindowRequestBuffer就是崩溃。

Reason:Signal:SIGSEGV(SEGV_MAPERR)@0x006b6b6b6b6b6b6b 
HarmonyOS
1天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
FengTianYa
分享
微博
QQ
微信
回复
1天前
相关问题
HarmonyOS XComponent绘制
17浏览 • 1回复 待解决
提供Webview demo哪些?
228浏览 • 1回复 待解决
需要提供c++js通信demo
627浏览 • 1回复 待解决
XComponent、NativeDrawing实现2D图形绘制
1166浏览 • 1回复 待解决
解码数据帧送显三种方式
373浏览 • 1回复 待解决
HarmonyOS 类似骨架屏实现demo
59浏览 • 1回复 待解决
HarmonyOS怎么反射调用,demo
28浏览 • 1回复 待解决
求鸿蒙视频编码解码具体demo
6583浏览 • 1回复 待解决
【播放器】硬解码支持Demo
1921浏览 • 1回复 待解决
提问
该提问已有0人参与 ,帮助了0人