L4T Multimedia API Reference

31.1 Release

 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
NvDrmRenderer.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2016-2017, NVIDIA CORPORATION. All rights reserved.
3  * NVIDIA CORPORATION and its licensors retain all intellectual property
4  * and proprietary rights in and to this software, related documentation
5  * and any modifications thereto. Any use, reproduction, disclosure or
6  * distribution of this software and related documentation without an express
7  * license agreement from NVIDIA CORPORATION is strictly prohibited.
8  */
9 
17 #ifndef __NV_DRM_RENDERER_H__
18 #define __NV_DRM_RENDERER_H__
19 
20 #include "NvElement.h"
21 #include <stdint.h>
22 #include <pthread.h>
23 #include <queue>
24 #include <unordered_map>
25 
35 typedef struct _NvDrmBO {
36  uint32_t bo_handle;
37  int width;
38  int height;
39  int pitch;
40  uint8_t* data;
41 } NvDrmBO;
42 
44 typedef struct _NvDrmFB {
45  uint32_t fb_id;
46  int width;
47  int height;
48  int format;
51  NvDrmBO bo[4];
53 } NvDrmFB;
54 
55 
67 {
68 public:
85  static NvDrmRenderer *createDrmRenderer(const char *name, uint32_t width,
86  uint32_t height, uint32_t w_x, uint32_t w_y,
87  uint32_t connector, uint32_t crtc,
88  struct drm_tegra_hdr_metadata_smpte_2086 metadata,
89  bool streamHDR);
91 
103  int enqueBuffer(int fd);
104 
116  int dequeBuffer();
117 
126  int setFPS(float fps);
127 
135  bool enableUniversalPlanes(int enable);
136 
151  uint32_t createDumbFB(uint32_t width, uint32_t height, uint32_t drm_format, NvDrmFB *fb);
152 
162  int removeFB(uint32_t fb_id);
163 
190  int setPlane(uint32_t pl_index,
191  uint32_t fb_id,
192  uint32_t crtc_x,
193  uint32_t crtc_y,
194  uint32_t crtc_w,
195  uint32_t crtc_h,
196  uint32_t src_x,
197  uint32_t src_y,
198  uint32_t src_w,
199  uint32_t src_h);
200 
211  int getPlaneCount();
212 
218  int getCrtcCount();
219 
225  int getEncoderCount();
226 
232  bool hdrSupported();
233 
239  int setHDRMetadataSmpte2086(struct drm_tegra_hdr_metadata_smpte_2086);
240 
241 private:
242 
243  struct timespec last_render_time;
245  int drm_fd;
246  int conn, crtc;
247  uint32_t width, height;
248  uint32_t drm_conn_id;
249  uint32_t drm_enc_id;
250  uint32_t drm_crtc_id;
251  uint32_t last_fb;
252  int activeFd;
253  int flippedFd;
254  bool flipPending;
255  bool renderingStarted;
256 
257  uint32_t hdrBlobId;
258  bool hdrBlobCreated;
259 
260  std::queue<int> freeBuffers;
261  std::queue<int> pendingBuffers;
262  std::unordered_map <int, int> map_list;
263 
264  bool stop_thread;
266  pthread_t render_thread;
268  pthread_mutex_t render_lock;
269  pthread_cond_t render_cond;
270  pthread_mutex_t enqueue_lock;
271  pthread_cond_t enqueue_cond;
272  pthread_mutex_t dequeue_lock;
273  pthread_cond_t dequeue_cond;
275  float fps;
276  uint64_t render_time_sec;
278  uint64_t render_time_nsec;
283  NvDrmRenderer(const char *name, uint32_t width, uint32_t height,
284  uint32_t w_x, uint32_t w_y, uint32_t connector, uint32_t crtc,
285  struct drm_tegra_hdr_metadata_smpte_2086 metadata, bool streamHDR);
286 
294  static void * renderThread(void *arg);
295 
300  static void page_flip_handler(int fd, unsigned int frame,
301  unsigned int sec, unsigned int usec, void *data);
302 
307  int renderInternal(int fd);
308 
309  /*
310  * Returns a DRM buffer_object handle allocated of size (w,h)
311  */
312  int createDumbBO(int w, int h, int bpp, NvDrmBO *bo);
313 
314  static const NvElementProfiler::ProfilerField valid_fields =
318 };
319 
321 #endif
Helper class for rendering using LibDRM.
Definition: NvDrmRenderer.h:66
int setFPS(float fps)
Sets the rendering rate in terms of frames per second.
uint32_t createDumbFB(uint32_t width, uint32_t height, uint32_t drm_format, NvDrmFB *fb)
Allocates a framebuffer of size (w, h).
Holds information about the frame.
Definition: NvDrmRenderer.h:44
Holds a buffer object handle.
Definition: NvDrmRenderer.h:35
int format
Frame format, such as DRM_FORMAT_RGB332.
Definition: NvDrmRenderer.h:48
int getCrtcCount()
Gets count of available crtcs.
int getEncoderCount()
Gets count of available encoders.
static const ProfilerField PROFILER_FIELD_FPS
int setPlane(uint32_t pl_index, uint32_t fb_id, uint32_t crtc_x, uint32_t crtc_y, uint32_t crtc_w, uint32_t crtc_h, uint32_t src_x, uint32_t src_y, uint32_t src_w, uint32_t src_h)
Changes a plane's framebuffer and position.
int setHDRMetadataSmpte2086(struct drm_tegra_hdr_metadata_smpte_2086)
Sets the HDR metadata retrieved from the decoder.
NVIDIA Multimedia API: NvElement Base Class
uint32_t bo_handle
DRM buffer index.
Definition: NvDrmRenderer.h:36
static const ProfilerField PROFILER_FIELD_TOTAL_UNITS
int getPlaneCount()
Gets total number of planes available.
uint32_t fb_id
Frame ID.
Definition: NvDrmRenderer.h:45
Every element has a unique name that can be used for identifying the element in debug logs...
Definition: NvElement.h:63
struct _NvDrmFB NvDrmFB
Holds information about the frame.
int removeFB(uint32_t fb_id)
Destroys a framebuffer.
bool enableUniversalPlanes(int enable)
Enables/disables DRM universal planes client caps, such as DRM_CLIENT_CAP_UNIVERSAL_PLANES.
int pitch
Memory layout of the DRM buffer.
Definition: NvDrmRenderer.h:39
int enqueBuffer(int fd)
Enqueues a buffer fd for rendering.
int width
Width of the DRM buffer, in pixels.
Definition: NvDrmRenderer.h:37
struct _NvDrmBO NvDrmBO
Holds a buffer object handle.
static const ProfilerField PROFILER_FIELD_LATE_UNITS
int height
Height of the frame, in pixels.
Definition: NvDrmRenderer.h:47
static NvDrmRenderer * createDrmRenderer(const char *name, uint32_t width, uint32_t height, uint32_t w_x, uint32_t w_y, uint32_t connector, uint32_t crtc, struct drm_tegra_hdr_metadata_smpte_2086 metadata, bool streamHDR)
Creates a new DRM based renderer named name.
int num_buffers
Number of DRM buffers, which depends on the buffer format.
Definition: NvDrmRenderer.h:52
bool hdrSupported()
Checks if HDR mode is supported on the DRM renderer.
uint8_t * data
Mapped CPU accessible address.
Definition: NvDrmRenderer.h:40
int width
Width of the frame, in pixels.
Definition: NvDrmRenderer.h:46
NvDrmBO bo[4]
DRM buffer handles.
Definition: NvDrmRenderer.h:51
int height
Heigth of the DRM buffer, in pixels.
Definition: NvDrmRenderer.h:38
int dequeBuffer()
Dequeues a previously rendered buffer.