L4T Multimedia API Reference

32.3.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];
54 } NvDrmFB;
55 
56 
68 {
69 public:
86  static NvDrmRenderer *createDrmRenderer(const char *name, uint32_t width,
87  uint32_t height, uint32_t w_x, uint32_t w_y,
88  uint32_t connector, uint32_t crtc,
89  struct drm_tegra_hdr_metadata_smpte_2086 metadata,
90  bool streamHDR);
92 
104  int enqueBuffer(int fd);
105 
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 
160  int removeFB(uint32_t fb_id);
161 
162 
171  int drmUtilCloseGemBo(int fd, uint32_t bo_handle);
172 
201  int setPlane(uint32_t pl_index,
202  uint32_t fb_id,
203  uint32_t crtc_x,
204  uint32_t crtc_y,
205  uint32_t crtc_w,
206  uint32_t crtc_h,
207  uint32_t src_x,
208  uint32_t src_y,
209  uint32_t src_w,
210  uint32_t src_h);
211 
223  int getPlaneCount();
224 
230  int getCrtcCount();
231 
237  int getEncoderCount();
238 
244  bool hdrSupported();
245 
251  int setHDRMetadataSmpte2086(struct drm_tegra_hdr_metadata_smpte_2086);
252 
253 private:
254 
255  struct timespec last_render_time;
257  int drm_fd;
258  int conn, crtc;
259  uint32_t width, height;
260  uint32_t drm_conn_id;
261  uint32_t drm_enc_id;
262  uint32_t drm_crtc_id;
263  uint32_t last_fb;
264  int activeFd;
265  int flippedFd;
266  bool flipPending;
267  bool renderingStarted;
268 
269  uint32_t hdrBlobId;
270  bool hdrBlobCreated;
271 
272  std::queue<int> freeBuffers;
273  std::queue<int> pendingBuffers;
274  std::unordered_map <int, int> map_list;
275 
276  bool stop_thread;
278  pthread_t render_thread;
280  pthread_mutex_t render_lock;
281  pthread_cond_t render_cond;
282  pthread_mutex_t enqueue_lock;
283  pthread_cond_t enqueue_cond;
284  pthread_mutex_t dequeue_lock;
285  pthread_cond_t dequeue_cond;
287  float fps;
288  uint64_t render_time_sec;
290  uint64_t render_time_nsec;
309  NvDrmRenderer(const char *name, uint32_t width, uint32_t height,
310  uint32_t w_x, uint32_t w_y, uint32_t connector, uint32_t crtc,
311  struct drm_tegra_hdr_metadata_smpte_2086 metadata, bool streamHDR);
312 
322  static void * renderThread(void *arg);
323 
328  static void page_flip_handler(int fd, unsigned int frame,
329  unsigned int sec, unsigned int usec, void *data);
330 
337  int renderInternal(int fd);
338 
339  /*
340  * Returns a DRM buffer_object handle.
341  *
342  * \param[in] w Width of the window in pixels.
343  * \param[in] h Height of the window in pixels.
344  * \param[in] bpp Bits per pixel in the window.
345  * \param[in] bo A pointer to a buffer object handle.
346  * \return A DRM buffer_object handle allocated of size (w,h).
347  */
348  int createDumbBO(int w, int h, int bpp, NvDrmBO *bo);
349 
350  static const NvElementProfiler::ProfilerField valid_fields =
354 };
355 
357 #endif
Helper class for rendering using LibDRM.
Definition: NvDrmRenderer.h:67
int setFPS(float fps)
Sets the rendering rate.
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
Holds 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
Holds DRM buffer index.
Definition: NvDrmRenderer.h:36
static const ProfilerField PROFILER_FIELD_TOTAL_UNITS
int getPlaneCount()
Gets total number of planes available.
int drmUtilCloseGemBo(int fd, uint32_t bo_handle)
Close GEM (Graphics Execution Manager) handles.
uint32_t fb_id
Holds the 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 (frees) a framebuffer previously allocated by createDumbFB().
bool enableUniversalPlanes(int enable)
Enables/disables DRM universal planes client caps, such as DRM_CLIENT_CAP_UNIVERSAL_PLANES.
int pitch
Holds stride/pitch of the DRM buffer.
Definition: NvDrmRenderer.h:39
int enqueBuffer(int fd)
Enqueues a buffer file descriptor for rendering.
int width
Holds 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
Holds 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
Holds the number of DRM buffers, which depends on the buffer format.
Definition: NvDrmRenderer.h:52
bool hdrSupported()
Checks whether HDR mode is supported on the DRM renderer.
uint8_t * data
Holds mapped CPU accessible address.
Definition: NvDrmRenderer.h:40
int width
Holds width of the frame in pixels.
Definition: NvDrmRenderer.h:46
NvDrmBO bo[4]
Holds DRM buffer handles.
Definition: NvDrmRenderer.h:51
int height
Holds height of the DRM buffer in pixels.
Definition: NvDrmRenderer.h:38
int dequeBuffer()
Dequeues a previously rendered buffer.