Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 26b7bd48 authored by Corey Tabaka's avatar Corey Tabaka
Browse files

libbufferhub: Fix native buffer.

This class was broken during a clean up. Fix the code in preparation
for adding tools that will use it again.

Bug: None
Test: build; flash
Change-Id: I8e60c7ba316080a24ff8914807972886e21ebce9
parent 69a5973c
Loading
Loading
Loading
Loading
+12 −9
Original line number Original line Diff line number Diff line
@@ -52,8 +52,6 @@ class NativeBuffer
  void operator=(NativeBuffer&) = delete;
  void operator=(NativeBuffer&) = delete;
};
};


// NativeBufferProducer is an implementation of ANativeWindowBuffer backed by a
// BufferProducer.
class NativeBufferProducer : public android::ANativeObjectBase<
class NativeBufferProducer : public android::ANativeObjectBase<
                                 ANativeWindowBuffer, NativeBufferProducer,
                                 ANativeWindowBuffer, NativeBufferProducer,
                                 android::LightRefBase<NativeBufferProducer>> {
                                 android::LightRefBase<NativeBufferProducer>> {
@@ -71,20 +69,25 @@ class NativeBufferProducer : public android::ANativeObjectBase<
    ANativeWindowBuffer::stride = buffer_->stride();
    ANativeWindowBuffer::stride = buffer_->stride();
    ANativeWindowBuffer::format = buffer_->format();
    ANativeWindowBuffer::format = buffer_->format();
    ANativeWindowBuffer::usage = buffer_->usage();
    ANativeWindowBuffer::usage = buffer_->usage();
    handle = buffer_->native_handle();
    ANativeWindowBuffer::handle = buffer_->native_handle();
    if (display_) {
      image_khr_ =
          eglCreateImageKHR(display_, EGL_NO_CONTEXT, EGL_NATIVE_BUFFER_ANDROID,
                            static_cast<ANativeWindowBuffer*>(this), nullptr);
    } else {
      image_khr_ = EGL_NO_IMAGE_KHR;
    }
  }
  }


  explicit NativeBufferProducer(const std::shared_ptr<BufferProducer>& buffer)
  explicit NativeBufferProducer(const std::shared_ptr<BufferProducer>& buffer)
      : NativeBufferProducer(buffer, nullptr, 0) {}
      : NativeBufferProducer(buffer, nullptr, 0) {}


  virtual ~NativeBufferProducer() {
  virtual ~NativeBufferProducer() {
    for (EGLImageKHR egl_image : egl_images_) {
    if (image_khr_ != EGL_NO_IMAGE_KHR)
      if (egl_image != EGL_NO_IMAGE_KHR)
      eglDestroyImageKHR(display_, image_khr_);
        eglDestroyImageKHR(display_, egl_image);
    }
  }
  }


  EGLImageKHR image_khr(int index) const { return egl_images_[index]; }
  EGLImageKHR image_khr() const { return image_khr_; }
  std::shared_ptr<BufferProducer> buffer() const { return buffer_; }
  std::shared_ptr<BufferProducer> buffer() const { return buffer_; }
  int release_fence() const { return release_fence_.Get(); }
  int release_fence() const { return release_fence_.Get(); }
  uint32_t surface_buffer_index() const { return surface_buffer_index_; }
  uint32_t surface_buffer_index() const { return surface_buffer_index_; }
@@ -112,7 +115,7 @@ class NativeBufferProducer : public android::ANativeObjectBase<


  std::shared_ptr<BufferProducer> buffer_;
  std::shared_ptr<BufferProducer> buffer_;
  pdx::LocalHandle release_fence_;
  pdx::LocalHandle release_fence_;
  std::vector<EGLImageKHR> egl_images_;
  EGLImageKHR image_khr_;
  uint32_t surface_buffer_index_;
  uint32_t surface_buffer_index_;
  EGLDisplay display_;
  EGLDisplay display_;