tizen beta release
[profile/ivi/gst-openmax0.10.git] / omx / gstomx_filereadersrc.c
1 /*
2  * Copyright (C) 2007-2009 Nokia Corporation.
3  *
4  * Author: Felipe Contreras <felipe.contreras@nokia.com>
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation
9  * version 2.1 of the License.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
19  *
20  */
21
22 #include "gstomx_filereadersrc.h"
23 #include "gstomx_base_src.h"
24 #include "gstomx.h"
25
26 enum
27 {
28   ARG_0,
29   ARG_FILE_NAME,
30 };
31
32 GSTOMX_BOILERPLATE (GstOmxFilereaderSrc, gst_omx_filereadersrc, GstOmxBaseSrc,
33     GST_OMX_BASE_SRC_TYPE);
34
35 static void
36 type_base_init (gpointer g_class)
37 {
38   GstElementClass *element_class;
39
40   element_class = GST_ELEMENT_CLASS (g_class);
41
42   gst_element_class_set_details_simple (element_class,
43       "OpenMAX IL filereader src element",
44       "None", "Does nothing", "Felipe Contreras");
45
46   gst_element_class_add_pad_template (element_class,
47       gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS,
48           gstomx_template_caps (G_TYPE_FROM_CLASS (g_class), "src")));
49 }
50
51 static gboolean
52 setcaps (GstBaseSrc * gst_src, GstCaps * caps)
53 {
54   GstOmxBaseSrc *self;
55
56   self = GST_OMX_BASE_SRC (gst_src);
57
58   GST_INFO_OBJECT (self, "setcaps (src): %" GST_PTR_FORMAT, caps);
59
60   g_return_val_if_fail (gst_caps_get_size (caps) == 1, FALSE);
61
62   return TRUE;
63 }
64
65 static void
66 settings_changed_cb (GOmxCore * core)
67 {
68   GstOmxBaseSrc *omx_base;
69
70   omx_base = core->object;
71
72   GST_DEBUG_OBJECT (omx_base, "settings changed");
73
74     /** @todo properly set the capabilities */
75 }
76
77 static void
78 setup_ports (GstOmxBaseSrc * base_src)
79 {
80   GOmxCore *gomx;
81   GstOmxFilereaderSrc *self;
82
83   self = GST_OMX_FILEREADERSRC (base_src);
84   gomx = base_src->gomx;
85
86   /* This is specific for Bellagio. */
87   {
88     OMX_INDEXTYPE index;
89     OMX_GetExtensionIndex (gomx->omx_handle,
90         "OMX.ST.index.param.filereader.inputfilename", &index);
91     OMX_SetParameter (gomx->omx_handle, index, self->file_name);
92   }
93 }
94
95 static void
96 set_property (GObject * obj,
97     guint prop_id, const GValue * value, GParamSpec * pspec)
98 {
99   GstOmxFilereaderSrc *self;
100
101   self = GST_OMX_FILEREADERSRC (obj);
102
103   switch (prop_id) {
104     case ARG_FILE_NAME:
105       if (self->file_name) {
106         g_free (self->file_name);
107       }
108       self->file_name = g_value_dup_string (value);
109       break;
110     default:
111       G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec);
112       break;
113   }
114 }
115
116 static void
117 get_property (GObject * obj, guint prop_id, GValue * value, GParamSpec * pspec)
118 {
119   GstOmxFilereaderSrc *self;
120
121   self = GST_OMX_FILEREADERSRC (obj);
122
123   switch (prop_id) {
124     case ARG_FILE_NAME:
125       g_value_set_string (value, self->file_name);
126       break;
127     default:
128       G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec);
129       break;
130   }
131 }
132
133 static void
134 type_class_init (gpointer g_class, gpointer class_data)
135 {
136   GstBaseSrcClass *gst_base_src_class;
137   GObjectClass *gobject_class;
138
139   gst_base_src_class = GST_BASE_SRC_CLASS (g_class);
140   gobject_class = G_OBJECT_CLASS (g_class);
141
142   gst_base_src_class->set_caps = setcaps;
143
144   /* Properties stuff */
145   {
146     gobject_class->set_property = set_property;
147     gobject_class->get_property = get_property;
148
149     g_object_class_install_property (gobject_class, ARG_FILE_NAME,
150         g_param_spec_string ("file-name", "File name",
151             "The input filename to use",
152             NULL, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
153   }
154 }
155
156 static void
157 type_instance_init (GTypeInstance * instance, gpointer g_class)
158 {
159   GstOmxBaseSrc *omx_base;
160
161   omx_base = GST_OMX_BASE_SRC (instance);
162
163   GST_DEBUG_OBJECT (omx_base, "begin");
164
165   omx_base->setup_ports = setup_ports;
166
167   omx_base->gomx->settings_changed_cb = settings_changed_cb;
168
169   GST_DEBUG_OBJECT (omx_base, "end");
170 }