6 Commits
V3.19 ... V3.22

Author SHA1 Message Date
jojo61
20f1bd45e6 Update Version 2024-03-12 09:11:40 +01:00
jojo61
7a7e09ff7a For drm try card1 if card0 fails. 2024-03-12 09:09:51 +01:00
jojo61
c4a660ede2 Update Version 2024-02-15 09:24:30 +01:00
jojo61
8e495266e2 Changes for egl exit 2024-02-15 09:23:09 +01:00
jojo61
f27e4fb35f Set Deinterlace Table for vaapi
Clean up exit on softhddrm
2024-02-05 10:50:19 +01:00
jojo61
e14ea73a00 Fix typo 2024-02-04 17:45:54 +01:00
4 changed files with 58 additions and 31 deletions

View File

@@ -1160,7 +1160,7 @@ static void CodecAudioUpdateFormat(AudioDecoder *audio_decoder) {
#if LIBSWRESAMPLE_VERSION_INT < AV_VERSION_INT(4,5,100)
audio_decoder->Resample = swr_alloc_set_opts(audio_decoder->Resample,
CodecDownMix ? AV_CH_LAYOUT_STEREO : audio_ctx->channel_layout,
CodecDownmix ? AV_CH_LAYOUT_STEREO : audio_ctx->channel_layout,
AV_SAMPLE_FMT_S16, audio_decoder->HwSampleRate,
audio_ctx->channel_layout, audio_ctx->sample_fmt,audio_ctx->sample_rate,
0, NULL);

38
drm.c
View File

@@ -209,8 +209,11 @@ static int FindDevice(VideoRender *render) {
int found = 0;
render->fd_drm = open("/dev/dri/card0", O_RDWR);
if (render->fd_drm < 0) {
fprintf(stderr, "FindDevice: cannot open /dev/dri/card0: %m\n");
return -errno;
render->fd_drm = open("/dev/dri/card1", O_RDWR);
if (render->fd_drm < 0) {
fprintf(stderr, "FindDevice: cannot open /dev/dri/card0 or card1: %m\n");
return -errno;
}
}
int ret = drmSetMaster(render->fd_drm);
@@ -545,6 +548,7 @@ static void drm_swap_buffers() {
m_need_modeset = 0;
has_modeset = 1;
}
drmModeSetCrtc(render->fd_drm, render->crtc_id, fb, 0, 0, &render->connector_id, 1, &render->mode);
if (previous_bo) {
@@ -562,15 +566,16 @@ static void drm_clean_up() {
return;
Debug(3, "drm clean up\n");
if (previous_bo) {
drmModeRmFB(render->fd_drm, previous_fb);
gbm_surface_release_buffer(gbm.surface, previous_bo);
}
drmModeSetCrtc(render->fd_drm, render->saved_crtc->crtc_id, render->saved_crtc->buffer_id, render->saved_crtc->x,
render->saved_crtc->y, &render->connector_id, 1, &render->saved_crtc->mode);
drmModeFreeCrtc(render->saved_crtc);
if (previous_bo) {
drmModeRmFB(render->fd_drm, previous_fb);
gbm_surface_release_buffer(gbm.surface, previous_bo);
}
if (has_modeset) {
drmModeAtomicReqPtr ModeReq;
const uint32_t flags = DRM_MODE_ATOMIC_ALLOW_MODESET;
@@ -613,22 +618,29 @@ static void drm_clean_up() {
if (render->hdr_blob_id)
drmModeDestroyPropertyBlob(render->fd_drm, render->hdr_blob_id);
render->hdr_blob_id = 0;
#if 0
eglMakeCurrent(eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
eglDestroySurface(eglDisplay, eglSurface);
EglCheck();
gbm_surface_destroy(gbm.surface);
eglDestroyContext(eglDisplay, eglContext);
EglCheck();
eglDestroyContext(eglDisplay, eglSharedContext);
EglCheck();
eglDestroyContext(eglDisplay, eglContext);
EglCheck();
eglSharedContext = NULL;
eglContext = NULL;
eglTerminate(eglDisplay);
EglCheck();
eglDisplay = NULL;
#endif
eglMakeCurrent(eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
eglDestroySurface(eglDisplay, eglSurface);
EglCheck();
eglSurface = NULL;
gbm_surface_destroy(gbm.surface);
gbm_device_destroy(gbm.dev);
drmDropMaster(render->fd_drm);
close(render->fd_drm);
eglDisplay = NULL;
free(render);
render = NULL;
Debug(3, "nach drm clean up\n");
}

View File

@@ -61,7 +61,7 @@ extern void ToggleLUT();
/// vdr-plugin version number.
/// Makefile extracts the version number for generating the file name
/// for the distribution archive.
static const char *const VERSION = "3.19"
static const char *const VERSION = "3.22"
#ifdef GIT_REV
"-GIT" GIT_REV
#endif

43
video.c
View File

@@ -1246,14 +1246,17 @@ static void EglExit(void) {
glxSharedContext = NULL;
}
#else
if (eglGetCurrentContext() == eglContext) {
// if currently used, set to none
eglMakeCurrent(eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
}
#ifndef USE_DRM
if (eglSharedContext) {
eglDestroyContext(eglDisplay, eglSharedContext);
#ifdef USE_DRM
drm_clean_up();
#endif
eglMakeCurrent(eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
if (eglSurface) {
eglDestroySurface(eglDisplay, eglSurface);
EglCheck();
eglSurface = NULL;
}
if (eglContext) {
@@ -1261,13 +1264,15 @@ static void EglExit(void) {
EglCheck();
eglContext = NULL;
}
if (eglSharedContext) {
eglDestroyContext(eglDisplay, eglSharedContext);
EglCheck();
eglSharedContext = NULL;
}
eglTerminate(eglDisplay);
#endif
#ifdef USE_DRM
drm_clean_up();
#endif
eglDisplay = NULL;
#endif
}
@@ -3001,10 +3006,12 @@ static enum AVPixelFormat Cuvid_get_format(CuvidDecoder *decoder, AVCodecContext
#ifdef CUVID
ist->active_hwaccel_id = HWACCEL_CUVID;
#else
if (VideoDeinterlace[decoder->Resolution]) // need deinterlace
if (VideoDeinterlace[decoder->Resolution]) {// need deinterlace
ist->filter = 1; // init deint vaapi
else
}
else {
ist->filter = 0;
}
ist->active_hwaccel_id = HWACCEL_VAAPI;
#endif
@@ -7094,6 +7101,14 @@ void VideoInit(const char *display_name) {
xcb_screen_iterator_t screen_iter;
xcb_screen_t const *screen;
#ifdef VAAPI
VideoDeinterlace[0] = 1; // 576i
VideoDeinterlace[1] = 0; // mode[1]; // 720p
VideoDeinterlace[2] = 1; // fake 1080
VideoDeinterlace[3] = 1; // 1080
VideoDeinterlace[4] = 0; // mode[4]; 2160p
#endif
#ifdef USE_DRM
VideoInitDrm();
#else