244fb59a59ba127e43a2fe09626271ac2276afe8
[glsdk/gst-plugin-ducati.git] / src / gstducati.c
1 /*
2  * GStreamer
3  * Copyright (c) 2010, Texas Instruments Incorporated
4  *
5  * This library is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU Lesser General Public
7  * License as published by the Free Software Foundation
8  * version 2.1 of the License.
9  *
10  * This library is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * Lesser General Public License for more details.
14  *
15  * You should have received a copy of the GNU Lesser General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
18  */
20 #ifdef HAVE_CONFIG_H
21 #  include <config.h>
22 #endif
24 #include "gstducati.h"
25 #include "gstducatih264dec.h"
26 #include "gstducatimpeg4dec.h"
27 #include "gstducatimpeg2dec.h"
28 #include "gstducativc1dec.h"
29 #include "gstducativp6dec.h"
30 #include "gstducativp7dec.h"
31 #include "gstducatirvdec.h"
33 GST_DEBUG_CATEGORY (gst_ducati_debug);
35 static gboolean
36 plugin_init (GstPlugin * plugin)
37 {
38   GST_DEBUG_CATEGORY_INIT (gst_ducati_debug, "ducati", 0, "ducati");
40   /* TODO .. find some way to reasonably detect if the corresponding
41    * codecs are actually available..
42    */
43   return gst_element_register (plugin, "ducatih264dec", GST_RANK_PRIMARY, GST_TYPE_DUCATIH264DEC) &&
44       gst_element_register (plugin, "ducatimpeg4dec", GST_RANK_PRIMARY, GST_TYPE_DUCATIMPEG4DEC) &&
45       gst_element_register (plugin, "ducatimpeg2dec", GST_RANK_PRIMARY, GST_TYPE_DUCATIMPEG2DEC) &&
46       gst_element_register (plugin, "ducativc1dec", GST_RANK_PRIMARY, GST_TYPE_DUCATIVC1DEC) &&
47       gst_element_register (plugin, "ducativp6dec", GST_RANK_PRIMARY, GST_TYPE_DUCATIVP6DEC) &&
48       gst_element_register (plugin, "ducativp7dec", GST_RANK_PRIMARY, GST_TYPE_DUCATIVP7DEC) &&
49       gst_element_register (plugin, "ducatirvdec", GST_RANK_PRIMARY, GST_TYPE_DUCATIRVDEC);
50 }
52 void *
53 gst_ducati_alloc_1d (gint sz)
54 {
55   MemAllocBlock block = {
56     .pixelFormat = PIXEL_FMT_PAGE,
57     .dim.len = sz,
58   };
59   return MemMgr_Alloc (&block, 1);
60 }
62 void *
63 gst_ducati_alloc_2d (gint width, gint height, guint * sz)
64 {
65   MemAllocBlock block[] = { {
66           .pixelFormat = PIXEL_FMT_8BIT,
67           .dim = {.area = {
68                       .width = width,
69                       .height = ALIGN2 (height, 1),
70                   }},
71           .stride = 4096
72       }, {
73         .pixelFormat = PIXEL_FMT_16BIT,
74         .dim = {.area = {
75                     .width = width,
76                     .height = ALIGN2 (height, 1) / 2,
77                 }},
78         .stride = 4096
79       }
80   };
81   if (sz) {
82     *sz = (4096 * ALIGN2 (height, 1) * 3) / 2;
83   }
84   return MemMgr_Alloc (block, 2);
85 }
87 XDAS_Int16
88 gst_ducati_get_mem_type (SSPtr paddr)
89 {
90   XDAS_Int16 type = -1;
92   if ((0x60000000 <= paddr) && (paddr < 0x68000000))
93       type = XDM_MEMTYPE_TILED8;
94   else if ((0x68000000 <= paddr) && (paddr < 0x70000000))
95       type = XDM_MEMTYPE_TILED16;
96   else if ((0x70000000 <= paddr) && (paddr < 0x78000000))
97       type = XDM_MEMTYPE_TILED32;
98   else if ((0x78000000 <= paddr) && (paddr < 0x80000000))
99       type = XDM_MEMTYPE_TILEDPAGE;
101   return type;
104 /* PACKAGE: this is usually set by autotools depending on some _INIT macro
105  * in configure.ac and then written into and defined in config.h, but we can
106  * just set it ourselves here in case someone doesn't use autotools to
107  * compile this code. GST_PLUGIN_DEFINE needs PACKAGE to be defined.
108  */
109 #ifndef PACKAGE
110 #  define PACKAGE "ducati"
111 #endif
113 GST_PLUGIN_DEFINE (
114     GST_VERSION_MAJOR,
115     GST_VERSION_MINOR,
116     "ducati",
117     "Hardware accellerated codecs for OMAP4",
118     plugin_init,
119     VERSION,
120     "LGPL",
121     "GStreamer",
122     "http://gstreamer.net/"