summaryrefslogtreecommitdiff
path: root/recipes-multimedia/libgstomx-1.0/files/r21.7.0-sources-gstomx1_src.patch
blob: aa4c6d5a52a478645ea4a0c9910b71681e30ed55 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
diff -Naur r21.6.0-sources-gstomx1_src-gst-omx1/omx/gstomxvideosink.c r21.7.0-sources-gstomx1_src-gst-omx1/omx/gstomxvideosink.c
--- r21.6.0-sources-gstomx1_src-gst-omx1/omx/gstomxvideosink.c	2017-10-14 03:23:25.000000000 +0200
+++ r21.7.0-sources-gstomx1_src-gst-omx1/omx/gstomxvideosink.c	2018-05-29 22:13:29.000000000 +0200
@@ -942,6 +942,32 @@
   return TRUE;
 }
 
+static OMX_ERRORTYPE
+gst_omx_set_stride_alignment (GstOmxVideoSink * self,
+    guint32 align)
+{
+  OMX_INDEXTYPE eIndex;
+  OMX_ERRORTYPE eError;
+
+  eError =  gst_omx_component_get_index (self->sink,
+                   (char *) NVX_INDEX_CONFIG_VIDEOSTRIDEALIGN,
+                   &eIndex);
+
+  if (eError == OMX_ErrorNone) {
+    NVX_CONFIG_VIDEO_STRIDEALIGN oStride;
+
+    GST_OMX_INIT_STRUCT (&oStride);
+
+    eError = gst_omx_component_get_config (self->sink, eIndex, &oStride);
+
+    if (eError == OMX_ErrorNone) {
+      oStride.nAlign = (unsigned long) align;
+      eError = gst_omx_component_set_config (self->sink, eIndex, &oStride);
+    }
+  }
+  return eError;
+}
+
 static void
 gst_omx_video_sink_check_nvfeatures (GstOmxVideoSink * self, GstCaps * caps)
 {
@@ -950,6 +976,13 @@
   if (gst_caps_features_contains (feature, "memory:NVMM")) {
     self->hw_path = TRUE;
   }
+
+  if (!self->hw_path) {
+    if (gst_omx_set_stride_alignment (self, 4)
+        != OMX_ErrorNone) {
+      g_warning ("Failed to set stride alignment.\n");
+    }
+  }
 }
 
 static OMX_ERRORTYPE
@@ -1087,6 +1120,20 @@
   min = MAX (port_def.nBufferCountMin, 4);
   port_def.nBufferCountActual = min;
 
+  switch (info.finfo->format) {
+    case GST_VIDEO_FORMAT_I420:
+      port_def.format.video.eColorFormat = OMX_COLOR_FormatYUV420Planar;
+      break;
+    case GST_VIDEO_FORMAT_NV12:
+      port_def.format.video.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
+      break;
+    default:
+      GST_ERROR_OBJECT (self, "Unsupported format %s",
+          gst_video_format_to_string (info.finfo->format));
+      return FALSE;
+      break;
+  }
+
   GST_DEBUG_OBJECT (self, "Setting inport port definition");
 
   if (gst_omx_port_update_port_definition (self->sink_in_port,