17 #ifndef __NV_DRM_RENDERER_H__
18 #define __NV_DRM_RENDERER_H__
24 #include <unordered_map>
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,
255 struct timespec last_render_time;
259 uint32_t width, height;
260 uint32_t drm_conn_id;
262 uint32_t drm_crtc_id;
267 bool renderingStarted;
272 std::queue<int> freeBuffers;
273 std::queue<int> pendingBuffers;
274 std::unordered_map <int, int> map_list;
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;
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);
322 static void * renderThread(
void *arg);
328 static void page_flip_handler(
int fd,
unsigned int frame,
329 unsigned int sec,
unsigned int usec,
void *data);
337 int renderInternal(
int fd);
348 int createDumbBO(
int w,
int h,
int bpp,
NvDrmBO *bo);
Helper class for rendering using LibDRM.
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.
Holds a buffer object handle.
int format
Holds frame format, such as DRM_FORMAT_RGB332.
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.
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.
Every element has a unique name that can be used for identifying the element in debug logs...
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.
int enqueBuffer(int fd)
Enqueues a buffer file descriptor for rendering.
int width
Holds width of the DRM buffer in pixels.
struct _NvDrmBO NvDrmBO
Holds a buffer object handle.
static const ProfilerField PROFILER_FIELD_LATE_UNITS
int height
Holds height of the frame in pixels.
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.
bool hdrSupported()
Checks whether HDR mode is supported on the DRM renderer.
uint8_t * data
Holds mapped CPU accessible address.
int width
Holds width of the frame in pixels.
NvDrmBO bo[4]
Holds DRM buffer handles.
int height
Holds height of the DRM buffer in pixels.
int dequeBuffer()
Dequeues a previously rendered buffer.