dvr_buffer_queue_internal.h revision 656f406fcb0c45fd3c729a513bdd3f353cc6ec1f
1656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai#ifndef ANDROID_DVR_BUFFER_QUEUE_INTERNAL_H_
2656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai#define ANDROID_DVR_BUFFER_QUEUE_INTERNAL_H_
3656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai
4656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai#include <gui/Surface.h>
5656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai#include <private/dvr/buffer_hub_queue_client.h>
6656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai#include <sys/cdefs.h>
7656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai
8656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai#include <memory>
9656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai
10656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Caistruct ANativeWindow;
11656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai
12656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Caistruct DvrWriteBufferQueue {
13656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai  using ProducerQueue = android::dvr::ProducerQueue;
14656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai
15656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai  // Create a concrete object for DvrWriteBufferQueue.
16656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai  //
17656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai  // @param producer_queue The BufferHub's ProducerQueue that is used to back
18656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai  //     this DvrWriteBufferQueue, must not be NULL.
19656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai  explicit DvrWriteBufferQueue(
20656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai      const std::shared_ptr<ProducerQueue>& producer_queue);
21656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai
22656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai  int id() const { return producer_queue_->id(); }
23656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai  uint32_t width() const { return width_; };
24656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai  uint32_t height() const { return height_; };
25656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai  uint32_t format() const { return format_; };
26656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai  size_t capacity() const { return producer_queue_->capacity(); }
27656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai  const std::shared_ptr<ProducerQueue>& producer_queue() const {
28656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai    return producer_queue_;
29656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai  }
30656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai
31656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai  int GetNativeWindow(ANativeWindow** out_window);
32656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai  int CreateReadQueue(DvrReadBufferQueue** out_read_queue);
33656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai  int Dequeue(int timeout, DvrWriteBuffer* write_buffer, int* out_fence_fd);
34656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai  int ResizeBuffer(uint32_t width, uint32_t height);
35656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai
36656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai private:
37656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai  std::shared_ptr<ProducerQueue> producer_queue_;
38656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai
39656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai  uint32_t width_;
40656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai  uint32_t height_;
41656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai  uint32_t format_;
42656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai  android::sp<android::Surface> native_window_;
43656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai};
44656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai
45656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Caistruct DvrReadBufferQueue {
46656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai  using ConsumerQueue = android::dvr::ConsumerQueue;
47656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai
48656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai  explicit DvrReadBufferQueue(
49656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai      const std::shared_ptr<ConsumerQueue>& consumer_queue);
50656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai
51656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai  int id() const { return consumer_queue_->id(); }
52656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai  size_t capacity() const { return consumer_queue_->capacity(); }
53656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai
54656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai  int CreateReadQueue(DvrReadBufferQueue** out_read_queue);
55656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai  int Dequeue(int timeout, DvrReadBuffer* read_buffer, int* out_fence_fd,
56656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai              void* out_meta, size_t meta_size_bytes);
57656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai
58656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai private:
59656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai  std::shared_ptr<ConsumerQueue> consumer_queue_;
60656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai};
61656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai
62656f406fcb0c45fd3c729a513bdd3f353cc6ec1fJiwen 'Steve' Cai#endif  // ANDROID_DVR_BUFFER_QUEUE_INTERNAL_H_
63