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,
|