summaryrefslogtreecommitdiff
blob: fae77f752e509e5d24eee5b81637248bccae57d7 (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
72
73
74
75
76
77
From f392c3f35052b57343e814d8f2d52b4f788d5d45 Mon Sep 17 00:00:00 2001
From: Rob Clark <rob@ti.com>
Date: Fri, 20 Nov 2009 18:43:12 -0600
Subject: [PATCH 07/24] Add NV12 support in stridetransform

---
 gst-libs/gst/video/video.c      |    3 +++
 gst/stride/gststridetransform.c |   12 ++++--------
 2 files changed, 7 insertions(+), 8 deletions(-)

diff --git a/gst-libs/gst/video/video.c b/gst-libs/gst/video/video.c
index 24f1ac8..ff9c4fb 100644
--- a/gst-libs/gst/video/video.c
+++ b/gst-libs/gst/video/video.c
@@ -2025,6 +2025,9 @@ gst_video_format_get_size_strided (GstVideoFormat format,
     case GST_VIDEO_FORMAT_Y42B:
     case GST_VIDEO_FORMAT_Y444:
       return GST_ROUND_UP_4 (3 * rowstride * height);
+    case GST_VIDEO_FORMAT_NV12:
+    case GST_VIDEO_FORMAT_NV21:
+      return GST_ROUND_UP_4 (rowstride) * GST_ROUND_UP_2 (height) * 3 / 2;
     default:
       return 0;
   }
diff --git a/gst/stride/gststridetransform.c b/gst/stride/gststridetransform.c
index ea52500..56207d0 100644
--- a/gst/stride/gststridetransform.c
+++ b/gst/stride/gststridetransform.c
@@ -2,7 +2,7 @@
  *
  * Copyright (C) 2009 Texas Instruments, Inc - http://www.ti.com/
  *
- * Description: V4L2 sink element
+ * Description: stride transform element
  *  Created on: Jul 30, 2009
  *      Author: Rob Clark <rob@ti.com>
  *
@@ -62,7 +62,7 @@ GST_ELEMENT_DETAILS ("Stride transform",
 
 /* TODO: add rgb formats too! */
 #define SUPPORTED_CAPS                                                        \
-  GST_VIDEO_CAPS_YUV_STRIDED ("{ I420, YV12, YUY2, UYVY }", "[ 0, max ]")
+  GST_VIDEO_CAPS_YUV_STRIDED ("{ I420, YV12, YUY2, UYVY, NV12 }", "[ 0, max ]")
 
 
 static GstStaticPadTemplate src_template =
@@ -357,12 +357,10 @@ stridify (GstStrideTransform *self, guchar *strided, guchar *unstrided)
   gint stride = self->out_rowstride;
 
   switch (self->format) {
-#if 0 /* TODO */
     case GST_VIDEO_FORMAT_NV12:
       g_return_val_if_fail (stride >= width, GST_FLOW_ERROR);
-      stridemove (strided, unstrided, stride, width, height * 1.5);
+      stridemove (strided, unstrided, stride, width, (GST_ROUND_UP_2 (height) * 3) / 2);
       return GST_FLOW_OK;
-#endif
     case GST_VIDEO_FORMAT_I420:
     case GST_VIDEO_FORMAT_YV12:
       g_return_val_if_fail (stride >= width, GST_FLOW_ERROR);
@@ -403,12 +401,10 @@ unstridify (GstStrideTransform *self, guchar *unstrided, guchar *strided)
   gint stride = self->in_rowstride;
 
   switch (self->format) {
-#if 0 /* TODO */
     case GST_VIDEO_FORMAT_NV12:
       g_return_val_if_fail (stride >= width, GST_FLOW_ERROR);
-      stridemove (unstrided, strided, width, stride, height * 1.5);
+      stridemove (unstrided, strided, width, stride, (GST_ROUND_UP_2 (height) * 3) / 2);
       return GST_FLOW_OK;
-#endif
     case GST_VIDEO_FORMAT_I420:
     case GST_VIDEO_FORMAT_YV12:
       g_return_val_if_fail (stride >= width, GST_FLOW_ERROR);
-- 
1.7.1