Skip to content

Commit 40bb677

Browse files
committed
fix memory offsets for uploading
- fix uploading for multi-dmabuf formats - fix chroma siting detection
1 parent 4756502 commit 40bb677

File tree

1 file changed

+20
-18
lines changed
  • src/plugins/gstreamer_video_player

1 file changed

+20
-18
lines changed

src/plugins/gstreamer_video_player/frame.c

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -660,6 +660,8 @@ static int get_plane_infos(
660660

661661
plane_infos[i].fd = ok;
662662
}
663+
664+
offset_in_memory += memory->offset;
663665
}
664666

665667
plane_infos[i].offset = offset_in_memory;
@@ -780,27 +782,27 @@ static EGLint egl_sample_range_hint_from_gst_info(const GstVideoInfo *info) {
780782
}
781783

782784
static EGLint egl_horizontal_chroma_siting_from_gst_info(const GstVideoInfo *info) {
783-
if ((GST_VIDEO_INFO_CHROMA_SITE(info) & ~(GST_VIDEO_CHROMA_SITE_H_COSITED | GST_VIDEO_CHROMA_SITE_V_COSITED)) == 0) {
784-
if (GST_VIDEO_INFO_CHROMA_SITE(info) & GST_VIDEO_CHROMA_SITE_H_COSITED) {
785-
return EGL_YUV_CHROMA_SITING_0_EXT;
786-
} else {
787-
return EGL_YUV_CHROMA_SITING_0_5_EXT;
788-
}
789-
}
785+
GstVideoChromaSite chroma_site = GST_VIDEO_INFO_CHROMA_SITE(info);
790786

791-
return EGL_NONE;
787+
if (chroma_site == GST_VIDEO_CHROMA_SITE_H_COSITED || chroma_site == GST_VIDEO_CHROMA_SITE_COSITED) {
788+
return EGL_YUV_CHROMA_SITING_0_EXT;
789+
} else if (chroma_site == GST_VIDEO_CHROMA_SITE_V_COSITED || chroma_site == GST_VIDEO_CHROMA_SITE_NONE) {
790+
return EGL_YUV_CHROMA_SITING_0_5_EXT;
791+
} else {
792+
return EGL_NONE;
793+
}
792794
}
793795

794796
static EGLint egl_vertical_chroma_siting_from_gst_info(const GstVideoInfo *info) {
795-
if ((GST_VIDEO_INFO_CHROMA_SITE(info) & ~(GST_VIDEO_CHROMA_SITE_H_COSITED | GST_VIDEO_CHROMA_SITE_V_COSITED)) == 0) {
796-
if (GST_VIDEO_INFO_CHROMA_SITE(info) & GST_VIDEO_CHROMA_SITE_V_COSITED) {
797-
return EGL_YUV_CHROMA_SITING_0_EXT;
798-
} else {
799-
return EGL_YUV_CHROMA_SITING_0_5_EXT;
800-
}
801-
}
797+
GstVideoChromaSite chroma_site = GST_VIDEO_INFO_CHROMA_SITE(info);
802798

803-
return EGL_NONE;
799+
if (chroma_site == GST_VIDEO_CHROMA_SITE_V_COSITED || chroma_site == GST_VIDEO_CHROMA_SITE_COSITED) {
800+
return EGL_YUV_CHROMA_SITING_0_EXT;
801+
} else if (chroma_site == GST_VIDEO_CHROMA_SITE_H_COSITED || chroma_site == GST_VIDEO_CHROMA_SITE_NONE) {
802+
return EGL_YUV_CHROMA_SITING_0_5_EXT;
803+
} else {
804+
return EGL_NONE;
805+
}
804806
}
805807

806808
struct video_frame *frame_new(
@@ -948,7 +950,7 @@ struct video_frame *frame_new(
948950

949951
// add plane 2 (if present)
950952
if (n_planes >= 2) {
951-
PUT_ATTR(EGL_DMA_BUF_PLANE1_FD_EXT, planes[0].fd);
953+
PUT_ATTR(EGL_DMA_BUF_PLANE1_FD_EXT, planes[1].fd);
952954
PUT_ATTR(EGL_DMA_BUF_PLANE1_OFFSET_EXT, planes[1].offset);
953955
PUT_ATTR(EGL_DMA_BUF_PLANE1_PITCH_EXT, planes[1].pitch);
954956
if (planes[1].has_modifier) {
@@ -964,7 +966,7 @@ struct video_frame *frame_new(
964966

965967
// add plane 3 (if present)
966968
if (n_planes >= 3) {
967-
PUT_ATTR(EGL_DMA_BUF_PLANE2_FD_EXT, planes[0].fd);
969+
PUT_ATTR(EGL_DMA_BUF_PLANE2_FD_EXT, planes[2].fd);
968970
PUT_ATTR(EGL_DMA_BUF_PLANE2_OFFSET_EXT, planes[2].offset);
969971
PUT_ATTR(EGL_DMA_BUF_PLANE2_PITCH_EXT, planes[2].pitch);
970972
if (planes[2].has_modifier) {

0 commit comments

Comments
 (0)