From: <fe...@ke...> - 2007-06-15 11:55:36
|
CVS Root: /cvs/gstreamer Module: gst-openmax Changes by: felipec Date: Fri Jun 15 2007 11:55:27 UTC Log message: Directory /cvs/gstreamer/gst-openmax/omx added to the repository Added files: omx : - New directory Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/-%20New%20directory?rev=NONE&content-type=text/vnd.viewcvs-markup ====Begin Diffs==== --- NEW FILE: - New directory --- |
From: <fe...@ke...> - 2007-06-29 15:43:54
|
CVS Root: /cvs/gstreamer Module: gst-openmax Changes by: felipec Date: Fri Jun 29 2007 15:43:43 UTC Log message: Add some error handling. Modified files: omx : gstomx_base.c gstomx_util.c gstomx_util.h Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base.c.diff?r1=1.1&r2=1.2 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_util.c.diff?r1=1.1&r2=1.2 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_util.h.diff?r1=1.1&r2=1.2 ====Begin Diffs==== Index: gstomx_base.c =================================================================== RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_base.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- gstomx_base.c 15 Jun 2007 11:59:03 -0000 1.1 +++ gstomx_base.c 29 Jun 2007 15:43:29 -0000 1.2 @@ -67,6 +67,8 @@ { case GST_STATE_CHANGE_NULL_TO_READY: g_omx_core_init (self->gomx, self->omx_component); + if (self->gomx->omx_error) + return GST_STATE_CHANGE_FAILURE; setup_ports (self->gomx); g_omx_core_prepare (self->gomx); break; @@ -100,6 +102,9 @@ case GST_STATE_CHANGE_READY_TO_NULL: + g_omx_core_deinit (self->gomx); default: @@ -116,7 +121,6 @@ self = GST_OMX_BASE (obj); - g_omx_core_deinit (self->gomx); g_omx_core_free (self->gomx); G_OBJECT_CLASS (parent_class)->dispose (obj); Index: gstomx_util.c RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_util.c,v --- gstomx_util.c 15 Jun 2007 11:59:03 -0000 1.1 +++ gstomx_util.c 29 Jun 2007 15:43:29 -0000 1.2 @@ -120,25 +120,31 @@ { if (counter == 0) - OMX_Init (); + core->omx_error = OMX_Init (); + + if (core->omx_error) + return; } counter++; /** @todo: Why is it not a const? */ - OMX_GetHandle (&core->omx_handle, (gchar *) name, core, &callbacks); + core->omx_error = OMX_GetHandle (&core->omx_handle, (gchar *) name, core, &callbacks); } void g_omx_core_deinit (GOmxCore *core) - OMX_FreeHandle (core->omx_handle); + core->omx_error = OMX_FreeHandle (core->omx_handle); + if (core->omx_error) + return; counter--; - OMX_Deinit (); + core->omx_error = OMX_Deinit (); @@ -242,7 +248,7 @@ port = core->ports[omx_port->nPortIndex]; - g_omx_port_setup (port, omx_port->nBufferCountActual, omx_port->nBufferSize); + g_omx_port_setup (port, omx_port->nBufferCountActual, omx_port->nBufferSize); Index: gstomx_util.h RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_util.h,v --- gstomx_util.h 15 Jun 2007 11:59:03 -0000 1.1 +++ gstomx_util.h 29 Jun 2007 15:43:29 -0000 1.2 @@ -50,6 +50,7 @@ OMX_HANDLETYPE omx_handle; OMX_STATETYPE omx_state; + OMX_ERRORTYPE omx_error; GOmxPort *ports[2]; /**< @todo: extend. */ |
From: <fe...@ke...> - 2007-06-29 18:16:07
|
CVS Root: /cvs/gstreamer Module: gst-openmax Changes by: felipec Date: Fri Jun 29 2007 18:15:56 UTC Log message: Generate proper capabilities for the output buffer in the vorbis decoder. Modified files: omx : gstomx_vorbisdec.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_vorbisdec.c.diff?r1=1.1&r2=1.2 ====Begin Diffs==== Index: gstomx_vorbisdec.c =================================================================== RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_vorbisdec.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- gstomx_vorbisdec.c 15 Jun 2007 11:59:03 -0000 1.1 +++ gstomx_vorbisdec.c 29 Jun 2007 18:15:42 -0000 1.2 @@ -105,6 +105,45 @@ } static void +set_caps (GstOmxBase *omx_base) +{ + guint rate; + guint channels; + + { + OMX_AUDIO_PARAM_PCMMODETYPE *param; + param = calloc (1, sizeof (OMX_AUDIO_PARAM_PCMMODETYPE)); + param->nSize = sizeof (OMX_AUDIO_PARAM_PCMMODETYPE); + param->nVersion.nVersion = 1; + param->nPortIndex = 1; + OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioPcm, param); + rate = param->nSamplingRate; + channels = param->nChannels; + free (param); + } + GST_DEBUG_OBJECT (omx_base, "fixing caps"); + GstCaps *new_caps; + new_caps = gst_caps_new_simple ("audio/x-raw-int", + "width", G_TYPE_INT, 16, + "depth", G_TYPE_INT, 16, + "rate", G_TYPE_INT, rate, + "signed", G_TYPE_BOOLEAN, TRUE, + "endianness", G_TYPE_INT, G_BYTE_ORDER ? 1234 : 4321, + "channels", G_TYPE_INT, channels, + NULL); + GST_INFO_OBJECT (omx_base, "caps are: %" GST_PTR_FORMAT, new_caps); + gst_pad_set_caps (omx_base->srcpad, new_caps); +} +static void type_instance_init (GTypeInstance *instance, gpointer g_class) { @@ -117,6 +156,7 @@ GST_DEBUG_OBJECT (omx_base, "start"); omx_base->omx_component = OMX_COMPONENT_ID; + omx_base->set_caps = set_caps; GType |
From: <fe...@ke...> - 2007-07-02 14:56:37
|
CVS Root: /cvs/gstreamer Module: gst-openmax Changes by: felipec Date: Mon Jul 02 2007 14:56:26 UTC Log message: Set version to 1.1 for now. Modified files: omx : gstomx_base.c gstomx_mp3dec.c gstomx_vorbisdec.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base.c.diff?r1=1.2&r2=1.3 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_mp3dec.c.diff?r1=1.1&r2=1.2 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_vorbisdec.c.diff?r1=1.2&r2=1.3 ====Begin Diffs==== Index: gstomx_base.c =================================================================== RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_base.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- gstomx_base.c 29 Jun 2007 15:43:29 -0000 1.2 +++ gstomx_base.c 2 Jul 2007 14:56:12 -0000 1.3 @@ -33,7 +33,8 @@ param = calloc (1, sizeof (OMX_PARAM_PORTDEFINITIONTYPE)); param->nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE); - param->nVersion.nVersion = 1; + param->nVersion.s.nVersionMajor = 1; + param->nVersion.s.nVersionMinor = 1; /* Input port configuration. */ Index: gstomx_mp3dec.c RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_mp3dec.c,v retrieving revision 1.1 diff -u -d -r1.1 -r1.2 --- gstomx_mp3dec.c 15 Jun 2007 11:59:03 -0000 1.1 +++ gstomx_mp3dec.c 2 Jul 2007 14:56:12 -0000 1.2 @@ -120,7 +120,8 @@ param = calloc (1, sizeof (OMX_AUDIO_PARAM_PCMMODETYPE)); param->nSize = sizeof (OMX_AUDIO_PARAM_PCMMODETYPE); - param->nVersion.nVersion = 1; + param->nVersion.s.nVersionMajor = 1; + param->nVersion.s.nVersionMinor = 1; param->nPortIndex = 1; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioPcm, param); Index: gstomx_vorbisdec.c RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_vorbisdec.c,v --- gstomx_vorbisdec.c 29 Jun 2007 18:15:42 -0000 1.2 +++ gstomx_vorbisdec.c 2 Jul 2007 14:56:12 -0000 1.3 @@ -115,7 +115,8 @@ |
From: <fe...@ke...> - 2007-07-03 16:08:20
|
CVS Root: /cvs/gstreamer Module: gst-openmax Changes by: felipec Date: Tue Jul 03 2007 16:08:11 UTC Log message: Remove base "set_caps" and use "settings_changed_cb". Modified files: omx : gstomx_base.c gstomx_base.h gstomx_mp3dec.c gstomx_vorbisdec.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base.c.diff?r1=1.3&r2=1.4 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base.h.diff?r1=1.1&r2=1.2 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_mp3dec.c.diff?r1=1.2&r2=1.3 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_vorbisdec.c.diff?r1=1.3&r2=1.4 ====Begin Diffs==== Index: gstomx_base.c =================================================================== RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_base.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- gstomx_base.c 2 Jul 2007 14:56:12 -0000 1.3 +++ gstomx_base.c 3 Jul 2007 16:07:57 -0000 1.4 @@ -145,23 +145,6 @@ gstelement_class->change_state = change_state; } -static void -set_caps (GstOmxBase *self) -{ - if (self->set_caps) - { - self->set_caps (self); - } -} - -settings_changed_cb (GOmxCore *core) - GstOmxBase *self; - self = core->client_data; - set_caps (self); gpointer output_thread (gpointer cb_data) { @@ -201,7 +184,9 @@ if (!caps) { - set_caps (self); + /** @todo We shouldn't be doing this. */ + GST_WARNING_OBJECT (self, "somebody didn't do his work"); + gomx->settings_changed_cb (gomx); } else @@ -407,7 +392,6 @@ GOmxCore *gomx; self->gomx = gomx = g_omx_core_new (); gomx->client_data = self; - gomx->settings_changed_cb = settings_changed_cb; gomx->ports[0]->enable_queue = true; gomx->ports[1]->enable_queue = true; } Index: gstomx_base.h RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_base.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- gstomx_base.h 15 Jun 2007 11:59:03 -0000 1.1 +++ gstomx_base.h 3 Jul 2007 16:07:57 -0000 1.2 @@ -48,7 +48,6 @@ GThread *thread; const char *omx_component; - GstOmxBaseCb set_caps; }; struct GstOmxBaseClass Index: gstomx_mp3dec.c RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_mp3dec.c,v diff -u -d -r1.2 -r1.3 --- gstomx_mp3dec.c 2 Jul 2007 14:56:12 -0000 1.2 +++ gstomx_mp3dec.c 3 Jul 2007 16:07:57 -0000 1.3 @@ -110,11 +110,16 @@ static void -set_caps (GstOmxBase *omx_base) +settings_changed_cb (GOmxCore *core) + GstOmxBase *omx_base; guint rate; guint channels; + omx_base = core->client_data; + + GST_DEBUG_OBJECT (omx_base, "settings changed"); { OMX_AUDIO_PARAM_PCMMODETYPE *param; @@ -125,11 +130,12 @@ param->nPortIndex = 1; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamAudioPcm, param); rate = param->nSamplingRate; channels = param->nChannels; if (rate == 0) { - /** @todo: fetch the right one. */ + /** @todo: this shouldn't happen. */ GST_WARNING_OBJECT (omx_base, "Bad samplerate"); rate = 44100; } @@ -137,8 +143,6 @@ free (param); - GST_DEBUG_OBJECT (omx_base, "fixing caps"); GstCaps *new_caps; @@ -167,7 +171,8 @@ GST_DEBUG_OBJECT (omx_base, "start"); omx_base->omx_component = OMX_COMPONENT_ID; - omx_base->set_caps = set_caps; + omx_base->gomx->settings_changed_cb = settings_changed_cb; GType Index: gstomx_vorbisdec.c RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_vorbisdec.c,v --- gstomx_vorbisdec.c 2 Jul 2007 14:56:12 -0000 1.3 +++ gstomx_vorbisdec.c 3 Jul 2007 16:07:57 -0000 1.4 @@ -105,11 +105,16 @@ @@ -120,13 +125,13 @@ @@ -157,7 +162,8 @@ - omx_base->set_caps = set_caps; |
From: <fe...@ke...> - 2007-07-03 16:11:38
|
CVS Root: /cvs/gstreamer Module: gst-openmax Changes by: felipec Date: Tue Jul 03 2007 16:11:30 UTC Log message: New MPEG4v decoder. Modified files: omx : Makefile.am gstomx.c Added files: omx : gstomx_mpeg4dec.c gstomx_mpeg4dec.h Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/Makefile.am.diff?r1=1.1&r2=1.2 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx.c.diff?r1=1.2&r2=1.3 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_mpeg4dec.c?rev=1.1&content-type=text/vnd.viewcvs-markup http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_mpeg4dec.h?rev=1.1&content-type=text/vnd.viewcvs-markup ====Begin Diffs==== Index: Makefile.am =================================================================== RCS file: /cvs/gstreamer/gst-openmax/omx/Makefile.am,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- Makefile.am 15 Jun 2007 11:59:03 -0000 1.1 +++ Makefile.am 3 Jul 2007 16:11:15 -0000 1.2 @@ -4,6 +4,7 @@ gstomx_base.c gstomx_base.h \ gstomx_util.c gstomx_util.h \ gstomx_dummy.c gstomx_dummy.h \ + gstomx_mpeg4dec.c gstomx_mpeg4dec.h \ gstomx_vorbisdec.c gstomx_vorbisdec.h \ gstomx_mp3dec.c gstomx_mp3dec.h Index: gstomx.c RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx.c,v retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- gstomx.c 29 Jun 2007 10:20:44 -0000 1.2 +++ gstomx.c 3 Jul 2007 16:11:15 -0000 1.3 @@ -20,6 +20,7 @@ #include "gstomx.h" #include "gstomx_base.h" #include "gstomx_dummy.h" +#include "gstomx_mpeg4dec.h" #include "gstomx_vorbisdec.h" #include "gstomx_mp3dec.h" @@ -37,6 +38,11 @@ return false; } + if (!gst_element_register (plugin, "omx_mpeg4dec", GST_RANK_NONE, GST_OMX_MPEG4DEC_TYPE)) + { + return false; + } + if (!gst_element_register (plugin, "omx_vorbisdec", GST_RANK_NONE, GST_OMX_VORBISDEC_TYPE)) { --- NEW FILE: gstomx_mpeg4dec.c --- /* * Copyright (C) 2007 Nokia Corporation. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation * version 2.1 of the License. * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "gstomx_mpeg4dec.h" #include "gstomx_base.h" #include "gstomx.h" #include <string.h> #include <stdbool.h> #define OMX_COMPONENT_ID "OMX.st.video_decoder.mpeg4" /* #define OMX_COMPONENT_ID "OMX_VideoDecoder" */ static GstOmxBaseClass *parent_class = NULL; static GstCaps * generate_src_template () { GstCaps *caps; GstStructure *struc; caps = gst_caps_new_empty (); struc = gst_structure_new ("video/x-raw-yuv", "width", GST_TYPE_INT_RANGE, 16, 4096, "height", GST_TYPE_INT_RANGE, 16, 4096, "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, 30, 1, NULL); { GValue list = { 0 }; GValue val = { 0 }; g_value_init (&list, GST_TYPE_LIST); g_value_init (&val, GST_TYPE_FOURCC); gst_value_set_fourcc (&val, GST_MAKE_FOURCC ('I', '4', '2', '0')); gst_value_list_append_value (&list, &val); gst_value_set_fourcc (&val, GST_MAKE_FOURCC ('Y', 'U', 'Y', '2')); gst_value_set_fourcc (&val, GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y')); gst_structure_set_value (struc, "format", &list); g_value_unset (&val); g_value_unset (&list); } gst_caps_append_structure (caps, struc); return caps; } generate_sink_template () caps = gst_caps_new_simple ("video/x-divx", "divxversion", G_TYPE_INT, 4, "width", GST_TYPE_INT_RANGE, 16, 4096, "height", GST_TYPE_INT_RANGE, 16, 4096, "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, 100, 1, NULL); static void type_base_init (gpointer g_class) GstElementClass *element_class; GstOmxBaseClass *omx_base_class; omx_base_class = GST_OMX_BASE_CLASS (g_class); element_class = GST_ELEMENT_CLASS (g_class); GstElementDetails details; details.longname = "OpenMAX IL MPEG4 video decoder"; details.klass = "Codec/Decoder/Audio"; details.description = "Decodes video in MPEG4 format with OpenMAX IL"; details.author = "Felipe Contreras"; gst_element_class_set_details (element_class, &details); GstPadTemplate *template; template = gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS, generate_src_template ()); gst_element_class_add_pad_template (element_class, template); template = gst_pad_template_new ("sink", GST_PAD_SINK, generate_sink_template ()); type_class_init (gpointer g_class, gpointer class_data) parent_class = g_type_class_ref (GST_OMX_BASE_TYPE); settings_changed_cb (GOmxCore *core) GstOmxBase *omx_base; guint width; guint height; guint framerate; guint format; omx_base = core->client_data; GST_DEBUG_OBJECT (omx_base, "settings changed"); OMX_PARAM_PORTDEFINITIONTYPE *param; param = (OMX_PARAM_PORTDEFINITIONTYPE *) calloc (1, sizeof (OMX_PARAM_PORTDEFINITIONTYPE)); param->nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE); param->nVersion.s.nVersionMajor = 1; param->nVersion.s.nVersionMinor = 1; param->nPortIndex = 1; OMX_GetParameter (omx_base->gomx->omx_handle, OMX_IndexParamPortDefinition, param); width = param->format.video.nFrameWidth; height = param->format.video.nFrameHeight; framerate = param->format.video.xFramerate; switch (param->format.video.eColorFormat) { case OMX_COLOR_FormatYUV420Planar: format = GST_MAKE_FOURCC ('I', '4', '2', '0'); break; case OMX_COLOR_FormatYCbYCr: format = GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'); break; case OMX_COLOR_FormatCbYCrY: format = GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y'); break; default: break; } free (param); GstCaps *new_caps; new_caps = gst_caps_new_simple ("video/x-raw-yuv", "width", G_TYPE_INT, width, "height", G_TYPE_INT, height, "framerate", GST_TYPE_FRACTION, framerate, 1, "format", GST_TYPE_FOURCC, format, NULL); GST_INFO_OBJECT (omx_base, "caps are: %" GST_PTR_FORMAT, new_caps); gst_pad_set_caps (omx_base->srcpad, new_caps); type_instance_init (GTypeInstance *instance, gpointer g_class) omx_base = GST_OMX_BASE (instance); GST_DEBUG_OBJECT (omx_base, "start"); omx_base->omx_component = OMX_COMPONENT_ID; omx_base->gomx->settings_changed_cb = settings_changed_cb; GType gst_omx_mpeg4dec_get_type (void) static GType type = 0; if (type == 0) GTypeInfo *type_info; type_info = g_new0 (GTypeInfo, 1); type_info->class_size = sizeof (GstOmxMpeg4DecClass); type_info->base_init = type_base_init; type_info->class_init = type_class_init; type_info->instance_size = sizeof (GstOmxMpeg4Dec); type_info->instance_init = type_instance_init; type = g_type_register_static (GST_OMX_BASE_TYPE, "GstOmxMpeg4Dec", type_info, 0); g_free (type_info); return type; --- NEW FILE: gstomx_mpeg4dec.h --- #ifndef __GST_OMX_MPEG4DEC_H__ #define __GST_OMX_MPEG4DEC_H__ #include <gst/gst.h> #include <config.h> G_BEGIN_DECLS #define GST_OMX_MPEG4DEC(obj) (GstOmxMpeg4Dec *) (obj) #define GST_OMX_MPEG4DEC_TYPE (gst_omx_mpeg4dec_get_type ()) typedef struct GstOmxMpeg4Dec GstOmxMpeg4Dec; typedef struct GstOmxMpeg4DecClass GstOmxMpeg4DecClass; struct GstOmxMpeg4Dec GstOmxBase omx_base; }; struct GstOmxMpeg4DecClass GstOmxBaseClass parent_class; GType gst_omx_mpeg4dec_get_type (void); G_END_DECLS #endif /* __GST_OMX_MPEG4DEC_H__ */ |
From: <fe...@ke...> - 2007-07-06 10:41:53
|
CVS Root: /cvs/gstreamer Module: gst-openmax Changes by: felipec Date: Fri Jul 06 2007 10:41:38 UTC Log message: Now the ports are extensible. Modified files: omx : gstomx_base.c gstomx_base.h gstomx_util.c gstomx_util.h Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base.c.diff?r1=1.4&r2=1.5 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base.h.diff?r1=1.2&r2=1.3 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_util.c.diff?r1=1.2&r2=1.3 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_util.h.diff?r1=1.2&r2=1.3 ====Begin Diffs==== Index: gstomx_base.c =================================================================== RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_base.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- gstomx_base.c 3 Jul 2007 16:07:57 -0000 1.4 +++ gstomx_base.c 6 Jul 2007 10:41:23 -0000 1.5 @@ -26,11 +26,21 @@ static GstElementClass *parent_class = NULL; +/** Finishes the processing. */ +static void +out_port_done_cb (GOmxPort *port) +{ + g_omx_sem_up (port->core->done_sem); +} + static void -setup_ports (GOmxCore *core) +setup_ports (GstOmxBase *self) { + GOmxCore *core; OMX_PARAM_PORTDEFINITIONTYPE *param; + core = self->gomx; param = calloc (1, sizeof (OMX_PARAM_PORTDEFINITIONTYPE)); param->nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE); param->nVersion.s.nVersionMajor = 1; @@ -40,13 +50,16 @@ param->nPortIndex = 0; OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, param); - g_omx_port_setup (core->ports[param->nPortIndex], param->nBufferCountActual, param->nBufferSize); + self->in_port = g_omx_core_setup_port (core, param); + self->in_port->enable_queue = true; /* Output port configuration. */ param->nPortIndex = 1; + self->out_port = g_omx_core_setup_port (core, param); + self->out_port->enable_queue = true; + self->out_port->done_cb = out_port_done_cb; free (param); } @@ -70,13 +83,14 @@ g_omx_core_init (self->gomx, self->omx_component); if (self->gomx->omx_error) return GST_STATE_CHANGE_FAILURE; - setup_ports (self->gomx); + setup_ports (self); g_omx_core_prepare (self->gomx); break; case GST_STATE_CHANGE_PLAYING_TO_PAUSED: - g_omx_port_set_done (self->gomx->ports[0]); - g_omx_port_set_done (self->gomx->ports[1]); + g_omx_port_set_done (self->in_port); + g_omx_port_set_done (self->out_port); case GST_STATE_CHANGE_PAUSED_TO_READY: @@ -149,6 +163,7 @@ output_thread (gpointer cb_data) GOmxCore *gomx; + GOmxPort *out_port; GstOmxBase *self; gomx = (GOmxCore *) cb_data; @@ -156,11 +171,13 @@ GST_LOG_OBJECT (self, "start"); - while (!gomx->ports[1]->done) + out_port = self->out_port; + while (!out_port->done) { OMX_BUFFERHEADERTYPE *omx_buffer; - omx_buffer = g_omx_port_request_buffer (gomx->ports[1]); + omx_buffer = g_omx_port_request_buffer (out_port); GST_LOG_OBJECT (self, "omx_buffer: %p", omx_buffer); @@ -228,7 +245,7 @@ if (omx_buffer->nFlags & OMX_BUFFERFLAG_EOS) { - g_omx_port_set_done (gomx->ports[1]); + g_omx_port_set_done (out_port); } @@ -258,7 +275,7 @@ } - g_omx_port_release_buffer (gomx->ports[1], omx_buffer); + g_omx_port_release_buffer (out_port, omx_buffer); } GST_LOG_OBJECT (self, "end"); @@ -270,8 +287,9 @@ pad_chain (GstPad *pad, GstBuffer *buf) - GstOmxBase *self; + GOmxPort *in_port; + GstOmxBase *self; GstFlowReturn ret = GST_FLOW_OK; self = GST_OMX_BASE (GST_OBJECT_PARENT (pad)); @@ -292,11 +310,13 @@ self->started = true; - if (!gomx->ports[0]->done) + in_port = self->in_port; + if (!in_port->done) - omx_buffer = g_omx_port_request_buffer (gomx->ports[0]); + omx_buffer = g_omx_port_request_buffer (in_port); if (omx_buffer) @@ -320,7 +340,7 @@ omx_buffer->pAppPrivate = buf; GST_LOG_OBJECT (self, "release_buffer"); - g_omx_port_release_buffer (gomx->ports[0], omx_buffer); + g_omx_port_release_buffer (in_port, omx_buffer); else @@ -355,7 +375,7 @@ case GST_EVENT_EOS: /* Close the inpurt port. */ /* Wait for the output port to get the EOS. */ g_omx_core_wait_for_done (self->gomx); @@ -392,8 +412,6 @@ GOmxCore *gomx; self->gomx = gomx = g_omx_core_new (); gomx->client_data = self; - gomx->ports[0]->enable_queue = true; - gomx->ports[1]->enable_queue = true; self->sinkpad = Index: gstomx_base.h RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_base.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- gstomx_base.h 3 Jul 2007 16:07:57 -0000 1.2 +++ gstomx_base.h 6 Jul 2007 10:41:23 -0000 1.3 @@ -44,6 +44,9 @@ GstPad *srcpad; gboolean started; GThread *thread; Index: gstomx_util.c RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_util.c,v --- gstomx_util.c 29 Jun 2007 15:43:29 -0000 1.2 +++ gstomx_util.c 6 Jul 2007 10:41:23 -0000 1.3 @@ -49,9 +49,6 @@ GOmxPort *port, OMX_BUFFERHEADERTYPE *omx_buffer); -static void -out_port_done_cb (GOmxPort *port); - static OMX_ERRORTYPE EventHandler (OMX_HANDLETYPE omx_handle, OMX_PTR app_data, @@ -83,14 +80,7 @@ core = g_new0 (GOmxCore, 1); - core->ports[0] = g_omx_port_new (core); - core->ports[0]->callback = in_port_cb; - core->ports[0]->type = GOMX_PORT_INPUT; - core->ports[1] = g_omx_port_new (core); - core->ports[1]->callback = out_port_cb; - core->ports[1]->type = GOMX_PORT_OUTPUT; - core->ports[1]->done_cb = out_port_done_cb; + core->ports = g_ptr_array_new (); core->state_sem = g_omx_sem_new (); core->done_sem = g_omx_sem_new (); @@ -106,8 +96,16 @@ g_omx_sem_free (core->done_sem); g_omx_sem_free (core->state_sem); - g_omx_port_free (core->ports[0]); - g_omx_port_free (core->ports[1]); + { + gint index; + for (index = 0; index < core->ports->len; index++) + { + GOmxPort *port; + port = g_omx_core_get_port (core, index); + g_omx_port_free (port); + } + g_ptr_array_free (core->ports, TRUE); + } g_free (core); @@ -158,20 +156,24 @@ gint index; gint i; - for (index = 0; index < 2; index++) - if (core->ports[index]) + if (port) { - for (i = 0; i < core->ports[index]->num_buffers; i++) + for (i = 0; i < port->num_buffers; i++) { gpointer buffer_data; guint size; - size = core->ports[index]->buffer_size; + size = port->buffer_size; buffer_data = g_malloc (size); OMX_UseBuffer (core->omx_handle, - &core->ports[index]->buffers[i], + &port->buffers[i], index, NULL, size, @@ -195,15 +197,19 @@ guint index; guint i; - for (i = 0; i < core->ports[index]->num_buffers; i++) + for (i = 0; i < port->num_buffers; i++) OMX_BUFFERHEADERTYPE *omx_buffer; - omx_buffer = core->ports[index]->buffers[i]; + omx_buffer = port->buffers[i]; - got_buffer (core, core->ports[index], omx_buffer); + got_buffer (core, port, omx_buffer); @@ -222,13 +228,17 @@ g_free (omx_buffer->pBuffer); @@ -240,15 +250,51 @@ wait_for_state (core, OMX_StateLoaded); -void +g_ptr_array_insert (GPtrArray *array, + guint index, + gpointer data) + if (index + 1 > array->len) + g_ptr_array_set_size (array, index + 1); + array->pdata[index] = data; +GOmxPort * g_omx_core_setup_port (GOmxCore *core, OMX_PARAM_PORTDEFINITIONTYPE *omx_port) GOmxPort *port; + guint index; - port = core->ports[omx_port->nPortIndex]; + index = omx_port->nPortIndex; + port = g_omx_core_get_port (core, index); - g_omx_port_setup (port, omx_port->nBufferCountActual, omx_port->nBufferSize); + if (!port) + port = g_omx_port_new (core); + g_omx_port_setup (port, omx_port); + g_ptr_array_insert (core->ports, index, port); + return port; +g_omx_core_get_port (GOmxCore *core, + guint index) + if (index < core->ports->len) + return g_ptr_array_index (core->ports, index); + return NULL; void @@ -256,7 +302,9 @@ guint index, GOmxBufferCb cb) - core->ports[index]->user_cb = cb; + GOmxPort *port; + port->user_cb = cb; @@ -301,11 +349,35 @@ g_omx_port_setup (GOmxPort *port, - gint num_buffers, - gint buffer_size) + OMX_PARAM_PORTDEFINITIONTYPE *omx_port) - port->num_buffers = num_buffers; - port->buffer_size = buffer_size; + GOmxPortType type; + GOmxBufferCb callback; + switch (omx_port->eDir) + case OMX_DirInput: + type = GOMX_PORT_INPUT; + callback = in_port_cb; + break; + case OMX_DirOutput: + type = GOMX_PORT_OUTPUT; + callback = out_port_cb; + default: + port->type = type; + port->callback = callback; + port->num_buffers = omx_port->nBufferCountActual; + port->buffer_size = omx_port->nBufferSize; + if (port->buffers) + /** @todo handle this case */ + g_print ("WARNING: unhandled setup\n"); port->buffers = g_new (OMX_BUFFERHEADERTYPE *, port->num_buffers); @@ -526,12 +598,6 @@ -out_port_done_cb (GOmxPort *port) -{ - g_omx_sem_up (port->core->done_sem); -} /* * OpenMAX IL callbacks. */ @@ -602,10 +668,12 @@ OMX_BUFFERHEADERTYPE *omx_buffer) GOmxCore *core; core = (GOmxCore*) app_data; + port = g_omx_core_get_port (core, omx_buffer->nInputPortIndex); - got_buffer (core, core->ports[omx_buffer->nInputPortIndex], omx_buffer); + got_buffer (core, port, omx_buffer); return OMX_ErrorNone; @@ -616,10 +684,12 @@ OMX_BUFFERHEADERTYPE *omx_buffer) core = (GOmxCore *) app_data; + port = g_omx_core_get_port (core, omx_buffer->nOutputPortIndex); - got_buffer (core, core->ports[omx_buffer->nOutputPortIndex], omx_buffer); Index: gstomx_util.h RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_util.h,v --- gstomx_util.h 29 Jun 2007 15:43:29 -0000 1.2 +++ gstomx_util.h 6 Jul 2007 10:41:23 -0000 1.3 @@ -52,7 +52,7 @@ OMX_STATETYPE omx_state; OMX_ERRORTYPE omx_error; - GOmxPort *ports[2]; /**< @todo: extend. */ + GPtrArray *ports; gpointer client_data; /**< Placeholder for the client data. */ @@ -101,11 +101,12 @@ void g_omx_core_finish (GOmxCore *core); void g_omx_core_wait_for_done (GOmxCore *core); void g_omx_core_set_port_cb (GOmxCore *core, guint index, GOmxBufferCb cb); -void g_omx_core_setup_port (GOmxCore *core, OMX_PARAM_PORTDEFINITIONTYPE *omx_port); +GOmxPort *g_omx_core_get_port (GOmxCore *core, guint index); +GOmxPort *g_omx_core_setup_port (GOmxCore *core, OMX_PARAM_PORTDEFINITIONTYPE *omx_port); GOmxPort *g_omx_port_new (GOmxCore *core); void g_omx_port_free (GOmxPort *port); -void g_omx_port_setup (GOmxPort *port, gint num_buffers, gint buffer_size); +void g_omx_port_setup (GOmxPort *port, OMX_PARAM_PORTDEFINITIONTYPE *omx_port); void g_omx_port_push_buffer (GOmxPort *port, OMX_BUFFERHEADERTYPE *omx_buffer); OMX_BUFFERHEADERTYPE *g_omx_port_request_buffer (GOmxPort *port); void g_omx_port_release_buffer (GOmxPort *port, OMX_BUFFERHEADERTYPE *omx_buffer); |
From: <fe...@ke...> - 2007-07-10 15:24:12
|
CVS Root: /cvs/gstreamer Module: gst-openmax Changes by: felipec Date: Tue Jul 10 2007 15:24:01 UTC Log message: Set omx parameters from gst caps. Other playing fixes too. Modified files: omx : gstomx_base.c gstomx_base.h gstomx_mpeg4dec.c gstomx_util.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base.c.diff?r1=1.5&r2=1.6 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base.h.diff?r1=1.3&r2=1.4 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_mpeg4dec.c.diff?r1=1.1&r2=1.2 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_util.c.diff?r1=1.3&r2=1.4 ====Begin Diffs==== Index: gstomx_base.c =================================================================== RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_base.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- gstomx_base.c 6 Jul 2007 10:41:23 -0000 1.5 +++ gstomx_base.c 10 Jul 2007 15:23:46 -0000 1.6 @@ -83,17 +83,14 @@ g_omx_core_init (self->gomx, self->omx_component); if (self->gomx->omx_error) return GST_STATE_CHANGE_FAILURE; - - setup_ports (self); - g_omx_core_prepare (self->gomx); break; case GST_STATE_CHANGE_PLAYING_TO_PAUSED: - g_omx_port_set_done (self->in_port); - g_omx_port_set_done (self->out_port); case GST_STATE_CHANGE_PAUSED_TO_READY: + g_omx_port_set_done (self->in_port); + g_omx_port_set_done (self->out_port); default: @@ -113,7 +110,6 @@ g_thread_join (self->thread); g_omx_core_finish (self->gomx); - self->started = false; case GST_STATE_CHANGE_READY_TO_NULL: @@ -194,6 +190,7 @@ { GstBuffer *buf; + if (!self->in_port->done) { GstCaps *caps = NULL; @@ -207,7 +204,7 @@ } else { - GST_DEBUG_OBJECT (self, "caps already fixed"); + GST_LOG_OBJECT (self, "caps already fixed"); gst_caps_unref (caps); } @@ -245,6 +242,7 @@ if (omx_buffer->nFlags & OMX_BUFFERFLAG_EOS) + GST_INFO_OBJECT (self, "set_done: out_port"); g_omx_port_set_done (out_port); } @@ -299,53 +297,78 @@ GST_LOG_OBJECT (self, "start"); GST_LOG_OBJECT (self, "gst_buffer: size=%lu", GST_BUFFER_SIZE (buf)); - /* Start OpenMAX IL */ - if (self->started == false) + GST_DEBUG_OBJECT (self, "state: %d", gomx->omx_state); + + if (gomx->omx_state == OMX_StateLoaded) { - GST_DEBUG_OBJECT (self, "start_omx"); + GST_INFO_OBJECT (self, "omx: prepare"); - g_omx_core_start (gomx); + setup_ports (self); + g_omx_core_prepare (self->gomx); self->thread = g_thread_create (output_thread, gomx, TRUE, NULL); - self->started = true; } in_port = self->in_port; if (!in_port->done) - OMX_BUFFERHEADERTYPE *omx_buffer; + switch (gomx->omx_state) + { + case OMX_StateIdle: + { + GST_INFO_OBJECT (self, "omx: play"); + g_omx_core_start (gomx); + } + break; + default: + } - omx_buffer = g_omx_port_request_buffer (in_port); + case OMX_StateExecuting: + /* OK */ + GST_ERROR_OBJECT (self, "Whoa! very wrong"); - if (omx_buffer) - GST_LOG_OBJECT (self, "omx_buffer: size=%lu, len=%lu, offset=%lu", - omx_buffer->nAllocLen, omx_buffer->nFilledLen, omx_buffer->nOffset); + OMX_BUFFERHEADERTYPE *omx_buffer; + omx_buffer = g_omx_port_request_buffer (in_port); + if (omx_buffer) - GstBuffer *old_buf; - old_buf = omx_buffer->pAppPrivate; + GST_LOG_OBJECT (self, "omx_buffer: size=%lu, len=%lu, offset=%lu", + omx_buffer->nAllocLen, omx_buffer->nFilledLen, omx_buffer->nOffset); - if (old_buf) - gst_buffer_unref (old_buf); + GstBuffer *old_buf; + old_buf = omx_buffer->pAppPrivate; + if (old_buf) + { + gst_buffer_unref (old_buf); + } - } - omx_buffer->nOffset = 0; - omx_buffer->pBuffer = GST_BUFFER_DATA (buf); - omx_buffer->nAllocLen = GST_BUFFER_SIZE (buf); - omx_buffer->nFilledLen = GST_BUFFER_SIZE (buf); - omx_buffer->pAppPrivate = buf; + omx_buffer->nOffset = 0; + omx_buffer->pBuffer = GST_BUFFER_DATA (buf); + omx_buffer->nAllocLen = GST_BUFFER_SIZE (buf); + omx_buffer->nFilledLen = GST_BUFFER_SIZE (buf); + omx_buffer->pAppPrivate = buf; - GST_LOG_OBJECT (self, "release_buffer"); - g_omx_port_release_buffer (in_port, omx_buffer); - } - else - { - GST_WARNING_OBJECT (self, "bad buffer"); - /* ret = GST_FLOW_ERROR; */ + GST_LOG_OBJECT (self, "release_buffer"); + g_omx_port_release_buffer (in_port, omx_buffer); + } + else + { + GST_WARNING_OBJECT (self, "bad buffer"); + /* ret = GST_FLOW_ERROR; */ else Index: gstomx_base.h RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_base.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- gstomx_base.h 6 Jul 2007 10:41:23 -0000 1.3 +++ gstomx_base.h 10 Jul 2007 15:23:46 -0000 1.4 @@ -47,7 +47,6 @@ GOmxPort *in_port; GOmxPort *out_port; - gboolean started; GThread *thread; const char *omx_component; Index: gstomx_mpeg4dec.c RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_mpeg4dec.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- gstomx_mpeg4dec.c 3 Jul 2007 16:11:15 -0000 1.1 +++ gstomx_mpeg4dec.c 10 Jul 2007 15:23:46 -0000 1.2 @@ -192,6 +192,83 @@ } +static gboolean +sink_setcaps (GstPad *pad, + GstCaps *caps) +{ + GstStructure *structure; + GstOmxBase *omx_base; + GOmxCore *gomx; + OMX_PARAM_PORTDEFINITIONTYPE *param; + gint width = 0; + gint height = 0; + omx_base = GST_OMX_BASE (GST_PAD_PARENT (pad)); + gomx = (GOmxCore *) omx_base->gomx; + GST_INFO_OBJECT (omx_base, "setcaps (sink): %" GST_PTR_FORMAT, caps); + g_return_val_if_fail (gst_caps_get_size (caps) == 1, FALSE); + structure = gst_caps_get_structure (caps, 0); + gst_structure_get_int (structure, "width", &width); + gst_structure_get_int (structure, "height", &height); + param = calloc (1, sizeof (OMX_PARAM_PORTDEFINITIONTYPE)); + param->nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE); + param->nVersion.s.nVersionMajor = 1; + param->nVersion.s.nVersionMinor = 1; + /* Input port configuration. */ + { + param->nPortIndex = 0; + OMX_GetParameter (gomx->omx_handle, OMX_IndexParamPortDefinition, param); + param->nBufferSize = width * height * 4; /** @todo keep an eye on that one: 4? */ + param->format.video.nFrameWidth = width; + param->format.video.nFrameHeight = height; + param->format.video.eCompressionFormat = OMX_VIDEO_CodingMPEG4; + OMX_SetParameter (gomx->omx_handle, OMX_IndexParamPortDefinition, param); + } + /* Output port configuration. */ + param->nPortIndex = 1; + OMX_COLOR_FORMATTYPE color_format; + color_format = param->format.video.eColorFormat; + switch (color_format) + case OMX_COLOR_FormatYCbYCr: + case OMX_COLOR_FormatCbYCrY: + param->nBufferSize = (width * height) * 2; + break; + case OMX_COLOR_FormatYUV420Planar: + param->nBufferSize = (width * height) * 1.5; + default: + free (param); + return gst_pad_set_caps (pad, caps); +} static void type_instance_init (GTypeInstance *instance, gpointer g_class) @@ -205,6 +282,8 @@ omx_base->omx_component = OMX_COMPONENT_ID; omx_base->gomx->settings_changed_cb = settings_changed_cb; + gst_pad_set_setcaps_function (omx_base->sinkpad, sink_setcaps); GType Index: gstomx_util.c RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_util.c,v --- gstomx_util.c 6 Jul 2007 10:41:23 -0000 1.3 +++ gstomx_util.c 10 Jul 2007 15:23:46 -0000 1.4 @@ -128,6 +128,7 @@ /** @todo: Why is it not a const? */ core->omx_error = OMX_GetHandle (&core->omx_handle, (gchar *) name, core, &callbacks); + core->omx_state = OMX_StateLoaded; void @@ -650,6 +651,7 @@ case OMX_EventPortSettingsChanged: + /** @todo only on the relevant port. */ if (core->settings_changed_cb) core->settings_changed_cb (core); |
From: <fe...@ke...> - 2007-07-10 15:25:12
|
CVS Root: /cvs/gstreamer Module: gst-openmax Changes by: felipec Date: Tue Jul 10 2007 15:25:03 UTC Log message: Rename Base to BaseFilter. Modified files: omx : Makefile.am gstomx.c gstomx_dummy.c gstomx_dummy.h gstomx_mp3dec.c gstomx_mp3dec.h gstomx_mpeg4dec.c gstomx_mpeg4dec.h gstomx_vorbisdec.c gstomx_vorbisdec.h Removed files: omx : gstomx_base.c gstomx_base.h Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/Makefile.am.diff?r1=1.2&r2=1.3 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx.c.diff?r1=1.3&r2=1.4 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base.c http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base.h http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_dummy.c.diff?r1=1.1&r2=1.2 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_dummy.h.diff?r1=1.1&r2=1.2 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_mp3dec.c.diff?r1=1.3&r2=1.4 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_mp3dec.h.diff?r1=1.1&r2=1.2 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_mpeg4dec.c.diff?r1=1.2&r2=1.3 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_mpeg4dec.h.diff?r1=1.1&r2=1.2 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_vorbisdec.c.diff?r1=1.4&r2=1.5 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_vorbisdec.h.diff?r1=1.1&r2=1.2 ====Begin Diffs==== Index: Makefile.am =================================================================== RCS file: /cvs/gstreamer/gst-openmax/omx/Makefile.am,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- Makefile.am 3 Jul 2007 16:11:15 -0000 1.2 +++ Makefile.am 10 Jul 2007 15:24:48 -0000 1.3 @@ -1,7 +1,7 @@ plugin_LTLIBRARIES = libgstomx.la libgstomx_la_SOURCES = gstomx.c gstomx.h \ - gstomx_base.c gstomx_base.h \ + gstomx_base_filter.c gstomx_base_filter.h \ gstomx_util.c gstomx_util.h \ gstomx_dummy.c gstomx_dummy.h \ gstomx_mpeg4dec.c gstomx_mpeg4dec.h \ Index: gstomx.c RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx.c,v retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- gstomx.c 3 Jul 2007 16:11:15 -0000 1.3 +++ gstomx.c 10 Jul 2007 15:24:48 -0000 1.4 @@ -18,7 +18,6 @@ */ #include "gstomx.h" -#include "gstomx_base.h" #include "gstomx_dummy.h" #include "gstomx_mpeg4dec.h" #include "gstomx_vorbisdec.h" --- gstomx_base.c DELETED --- --- gstomx_base.h DELETED --- Index: gstomx_dummy.c RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_dummy.c,v retrieving revision 1.1 diff -u -d -r1.1 -r1.2 --- gstomx_dummy.c 15 Jun 2007 11:59:03 -0000 1.1 +++ gstomx_dummy.c 10 Jul 2007 15:24:48 -0000 1.2 @@ -18,7 +18,7 @@ +#include "gstomx_base_filter.h" #include <string.h> @@ -27,7 +27,7 @@ #define OMX_COMPONENT_ID "OMX.st.dummy" -static GstOmxBaseClass *parent_class = NULL; +static GstOmxBaseFilterClass *parent_class = NULL; static GstCaps * generate_src_template () @@ -53,9 +53,9 @@ type_base_init (gpointer g_class) { GstElementClass *element_class; - GstOmxBaseClass *omx_base_class; + GstOmxBaseFilterClass *omx_base_class; - omx_base_class = GST_OMX_BASE_CLASS (g_class); + omx_base_class = GST_OMX_BASE_FILTER_CLASS (g_class); element_class = GST_ELEMENT_CLASS (g_class); { @@ -94,16 +94,16 @@ type_class_init (gpointer g_class, gpointer class_data) - parent_class = g_type_class_ref (GST_OMX_BASE_TYPE); + parent_class = g_type_class_ref (GST_OMX_BASE_FILTER_TYPE); } static void type_instance_init (GTypeInstance *instance, gpointer g_class) - GstOmxBase *omx_base; + GstOmxBaseFilter *omx_base; - omx_base = GST_OMX_BASE (instance); + omx_base = GST_OMX_BASE_FILTER (instance); GST_DEBUG_OBJECT (omx_base, "start"); @@ -126,7 +126,7 @@ type_info->instance_size = sizeof (GstOmxDummy); type_info->instance_init = type_instance_init; - type = g_type_register_static (GST_OMX_BASE_TYPE, "GstOmxDummy", type_info, 0); + type = g_type_register_static (GST_OMX_BASE_FILTER_TYPE, "GstOmxDummy", type_info, 0); g_free (type_info); } Index: gstomx_dummy.h RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_dummy.h,v --- gstomx_dummy.h 15 Jun 2007 11:59:03 -0000 1.1 +++ gstomx_dummy.h 10 Jul 2007 15:24:48 -0000 1.2 @@ -32,16 +32,16 @@ typedef struct GstOmxDummy GstOmxDummy; typedef struct GstOmxDummyClass GstOmxDummyClass; struct GstOmxDummy - GstOmxBase omx_base; + GstOmxBaseFilter omx_base; }; struct GstOmxDummyClass - GstOmxBaseClass parent_class; + GstOmxBaseFilterClass parent_class; GType gst_omx_dummy_get_type (void); Index: gstomx_mp3dec.c RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_mp3dec.c,v --- gstomx_mp3dec.c 3 Jul 2007 16:07:57 -0000 1.3 +++ gstomx_mp3dec.c 10 Jul 2007 15:24:48 -0000 1.4 #include "gstomx_mp3dec.h" #define OMX_COMPONENT_ID "OMX.st.audio_decoder.mp3.mad" @@ -65,9 +65,9 @@ @@ -106,13 +106,13 @@ settings_changed_cb (GOmxCore *core) guint rate; guint channels; @@ -164,9 +164,9 @@ @@ -191,7 +191,7 @@ type_info->instance_size = sizeof (GstOmxMp3Dec); - type = g_type_register_static (GST_OMX_BASE_TYPE, "GstOmxMp3Dec", type_info, 0); + type = g_type_register_static (GST_OMX_BASE_FILTER_TYPE, "GstOmxMp3Dec", type_info, 0); Index: gstomx_mp3dec.h RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_mp3dec.h,v --- gstomx_mp3dec.h 15 Jun 2007 11:59:03 -0000 1.1 +++ gstomx_mp3dec.h 10 Jul 2007 15:24:48 -0000 1.2 typedef struct GstOmxMp3Dec GstOmxMp3Dec; typedef struct GstOmxMp3DecClass GstOmxMp3DecClass; struct GstOmxMp3Dec struct GstOmxMp3DecClass GType gst_omx_mp3dec_get_type (void); Index: gstomx_mpeg4dec.c RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_mpeg4dec.c,v --- gstomx_mpeg4dec.c 10 Jul 2007 15:23:46 -0000 1.2 +++ gstomx_mpeg4dec.c 10 Jul 2007 15:24:48 -0000 1.3 @@ -28,7 +28,7 @@ #define OMX_COMPONENT_ID "OMX.st.video_decoder.mpeg4" /* #define OMX_COMPONENT_ID "OMX_VideoDecoder" */ @@ -90,9 +90,9 @@ @@ -131,13 +131,13 @@ guint width; guint height; guint framerate; @@ -197,13 +197,13 @@ GstCaps *caps) GstStructure *structure; GOmxCore *gomx; OMX_PARAM_PORTDEFINITIONTYPE *param; gint width = 0; gint height = 0; - omx_base = GST_OMX_BASE (GST_PAD_PARENT (pad)); + omx_base = GST_OMX_BASE_FILTER (GST_PAD_PARENT (pad)); gomx = (GOmxCore *) omx_base->gomx; GST_INFO_OBJECT (omx_base, "setcaps (sink): %" GST_PTR_FORMAT, caps); @@ -273,9 +273,9 @@ @@ -302,7 +302,7 @@ type_info->instance_size = sizeof (GstOmxMpeg4Dec); - type = g_type_register_static (GST_OMX_BASE_TYPE, "GstOmxMpeg4Dec", type_info, 0); + type = g_type_register_static (GST_OMX_BASE_FILTER_TYPE, "GstOmxMpeg4Dec", type_info, 0); Index: gstomx_mpeg4dec.h RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_mpeg4dec.h,v --- gstomx_mpeg4dec.h 3 Jul 2007 16:11:15 -0000 1.1 +++ gstomx_mpeg4dec.h 10 Jul 2007 15:24:48 -0000 1.2 typedef struct GstOmxMpeg4Dec GstOmxMpeg4Dec; typedef struct GstOmxMpeg4DecClass GstOmxMpeg4DecClass; struct GstOmxMpeg4Dec struct GstOmxMpeg4DecClass GType gst_omx_mpeg4dec_get_type (void); Index: gstomx_vorbisdec.c RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_vorbisdec.c,v retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- gstomx_vorbisdec.c 3 Jul 2007 16:07:57 -0000 1.4 +++ gstomx_vorbisdec.c 10 Jul 2007 15:24:48 -0000 1.5 #define OMX_COMPONENT_ID "OMX.st.audio_decoder.ogg.single" @@ -60,9 +60,9 @@ @@ -101,13 +101,13 @@ @@ -153,10 +153,10 @@ @@ -183,7 +183,7 @@ type_info->instance_size = sizeof (GstOmxVorbisDec); - type = g_type_register_static (GST_OMX_BASE_TYPE, "GstOmxVorbisDec", type_info, 0); + type = g_type_register_static (GST_OMX_BASE_FILTER_TYPE, "GstOmxVorbisDec", type_info, 0); Index: gstomx_vorbisdec.h RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_vorbisdec.h,v --- gstomx_vorbisdec.h 15 Jun 2007 11:59:03 -0000 1.1 +++ gstomx_vorbisdec.h 10 Jul 2007 15:24:48 -0000 1.2 typedef struct GstOmxVorbisDec GstOmxVorbisDec; typedef struct GstOmxVorbisDecClass GstOmxVorbisDecClass; struct GstOmxVorbisDec struct GstOmxVorbisDecClass GType gst_omx_vorbisdec_get_type (void); |
From: <fe...@ke...> - 2007-07-10 15:26:25
|
CVS Root: /cvs/gstreamer Module: gst-openmax Changes by: felipec Date: Tue Jul 10 2007 15:26:15 UTC Log message: Add missing files. Added files: omx : gstomx_base_filter.c gstomx_base_filter.h Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base_filter.c?rev=1.1&content-type=text/vnd.viewcvs-markup http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base_filter.h?rev=1.1&content-type=text/vnd.viewcvs-markup ====Begin Diffs==== --- NEW FILE: gstomx_base_filter.c --- /* * Copyright (C) 2007 Nokia Corporation. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation * version 2.1 of the License. * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "gstomx_base_filter.h" #include "gstomx.h" #include <string.h> #include <stdbool.h> static GstElementClass *parent_class = NULL; /** Finishes the processing. */ static void out_port_done_cb (GOmxPort *port) { g_omx_sem_up (port->core->done_sem); } static void setup_ports (GstOmxBaseFilter *self) GOmxCore *core; OMX_PARAM_PORTDEFINITIONTYPE *param; core = self->gomx; param = calloc (1, sizeof (OMX_PARAM_PORTDEFINITIONTYPE)); param->nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE); param->nVersion.s.nVersionMajor = 1; param->nVersion.s.nVersionMinor = 1; /* Input port configuration. */ param->nPortIndex = 0; OMX_GetParameter (core->omx_handle, OMX_IndexParamPortDefinition, param); self->in_port = g_omx_core_setup_port (core, param); self->in_port->enable_queue = true; /* Output port configuration. */ param->nPortIndex = 1; self->out_port = g_omx_core_setup_port (core, param); self->out_port->enable_queue = true; self->out_port->done_cb = out_port_done_cb; free (param); static GstStateChangeReturn change_state (GstElement *element, GstStateChange transition) GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; GstOmxBaseFilter *self; self = GST_OMX_BASE_FILTER (element); GST_DEBUG_OBJECT (self, "changing state %s - %s", gst_element_state_get_name (GST_STATE_TRANSITION_CURRENT (transition)), gst_element_state_get_name (GST_STATE_TRANSITION_NEXT (transition))); switch (transition) { case GST_STATE_CHANGE_NULL_TO_READY: g_omx_core_init (self->gomx, self->omx_component); if (self->gomx->omx_error) return GST_STATE_CHANGE_FAILURE; break; case GST_STATE_CHANGE_PLAYING_TO_PAUSED: case GST_STATE_CHANGE_PAUSED_TO_READY: g_omx_port_set_done (self->in_port); g_omx_port_set_done (self->out_port); default: } ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); if (ret == GST_STATE_CHANGE_FAILURE) return ret; g_thread_join (self->thread); g_omx_core_finish (self->gomx); case GST_STATE_CHANGE_READY_TO_NULL: g_omx_core_deinit (self->gomx); return ret; dispose (GObject *obj) self = GST_OMX_BASE_FILTER (obj); g_omx_core_free (self->gomx); G_OBJECT_CLASS (parent_class)->dispose (obj); type_class_init (gpointer g_class, gpointer class_data) GObjectClass *gobject_class; GstElementClass *gstelement_class; gobject_class = G_OBJECT_CLASS (g_class); gstelement_class = GST_ELEMENT_CLASS (g_class); parent_class = g_type_class_ref (GST_TYPE_ELEMENT); gobject_class->dispose = dispose; gstelement_class->change_state = change_state; static gpointer output_thread (gpointer cb_data) GOmxCore *gomx; GOmxPort *out_port; gomx = (GOmxCore *) cb_data; self = GST_OMX_BASE_FILTER (gomx->client_data); GST_LOG_OBJECT (self, "start"); out_port = self->out_port; while (!out_port->done) OMX_BUFFERHEADERTYPE *omx_buffer; omx_buffer = g_omx_port_request_buffer (out_port); GST_LOG_OBJECT (self, "omx_buffer: %p", omx_buffer); if (!omx_buffer) { GST_WARNING_OBJECT (self, "Bad buffer"); continue; } GST_LOG_OBJECT (self, "buffer: size=%lu, len=%lu, flags=%lu", omx_buffer->nAllocLen, omx_buffer->nFilledLen, omx_buffer->nFlags); if (omx_buffer->nFilledLen > 0) GstBuffer *buf; if (!self->in_port->done) { GstCaps *caps = NULL; caps = gst_pad_get_negotiated_caps (self->srcpad); if (!caps) { /** @todo We shouldn't be doing this. */ GST_WARNING_OBJECT (self, "somebody didn't do his work"); gomx->settings_changed_cb (gomx); } else GST_LOG_OBJECT (self, "caps already fixed"); gst_caps_unref (caps); } buf = omx_buffer->pAppPrivate; if (buf && !(omx_buffer->nFlags & OMX_BUFFERFLAG_EOS)) GST_BUFFER_SIZE (buf) = omx_buffer->nFilledLen; omx_buffer->pAppPrivate = NULL; omx_buffer->pBuffer = NULL; omx_buffer->nFilledLen = 0; gst_pad_push (self->srcpad, buf); gst_buffer_unref (buf); else /* This is only menat for the first OpenMAX buffers, * which need to be pre-allocated. */ /* Also for the very last one. */ gst_pad_alloc_buffer_and_set_caps (self->srcpad, GST_BUFFER_OFFSET_NONE, omx_buffer->nFilledLen, GST_PAD_CAPS (self->srcpad), &buf); if (buf) memcpy (GST_BUFFER_DATA (buf), omx_buffer->pBuffer + omx_buffer->nOffset, omx_buffer->nFilledLen); gst_pad_push (self->srcpad, buf); omx_buffer->nFilledLen = 0; if (omx_buffer->nFlags & OMX_BUFFERFLAG_EOS) GST_INFO_OBJECT (self, "set_done: out_port"); g_omx_port_set_done (out_port); if (!omx_buffer->pBuffer) GstFlowReturn result; result = gst_pad_alloc_buffer_and_set_caps (self->srcpad, GST_BUFFER_OFFSET_NONE, omx_buffer->nAllocLen, GST_PAD_CAPS (self->srcpad), &buf); if (result == GST_FLOW_OK) gst_buffer_ref (buf); omx_buffer->pAppPrivate = buf; omx_buffer->pBuffer = GST_BUFFER_DATA (buf); omx_buffer->nAllocLen = GST_BUFFER_SIZE (buf); GST_ERROR_OBJECT (self, "Could not allocate buffer"); break; g_omx_port_release_buffer (out_port, omx_buffer); GST_LOG_OBJECT (self, "end"); return NULL; static GstFlowReturn pad_chain (GstPad *pad, GstBuffer *buf) GOmxPort *in_port; GstFlowReturn ret = GST_FLOW_OK; self = GST_OMX_BASE_FILTER (GST_OBJECT_PARENT (pad)); gomx = self->gomx; GST_LOG_OBJECT (self, "gst_buffer: size=%lu", GST_BUFFER_SIZE (buf)); GST_DEBUG_OBJECT (self, "state: %d", gomx->omx_state); if (gomx->omx_state == OMX_StateLoaded) GST_INFO_OBJECT (self, "omx: prepare"); setup_ports (self); g_omx_core_prepare (self->gomx); self->thread = g_thread_create (output_thread, gomx, TRUE, NULL); in_port = self->in_port; if (!in_port->done) switch (gomx->omx_state) case OMX_StateIdle: GST_INFO_OBJECT (self, "omx: play"); g_omx_core_start (gomx); default: case OMX_StateExecuting: /* OK */ GST_ERROR_OBJECT (self, "Whoa! very wrong"); OMX_BUFFERHEADERTYPE *omx_buffer; omx_buffer = g_omx_port_request_buffer (in_port); if (omx_buffer) GST_LOG_OBJECT (self, "omx_buffer: size=%lu, len=%lu, offset=%lu", omx_buffer->nAllocLen, omx_buffer->nFilledLen, omx_buffer->nOffset); GstBuffer *old_buf; old_buf = omx_buffer->pAppPrivate; if (old_buf) { gst_buffer_unref (old_buf); } omx_buffer->nOffset = 0; omx_buffer->nFilledLen = GST_BUFFER_SIZE (buf); GST_LOG_OBJECT (self, "release_buffer"); g_omx_port_release_buffer (in_port, omx_buffer); GST_WARNING_OBJECT (self, "bad buffer"); /* ret = GST_FLOW_ERROR; */ else GST_WARNING_OBJECT (self, "done"); ret = GST_FLOW_UNEXPECTED; static gboolean pad_event (GstPad *pad, GstEvent *event) GST_DEBUG_OBJECT (self, "start"); GST_DEBUG_OBJECT (self, "event: %s", GST_EVENT_TYPE_NAME (event)); switch (GST_EVENT_TYPE (event)) case GST_EVENT_EOS: /* Close the inpurt port. */ /* Wait for the output port to get the EOS. */ g_omx_core_wait_for_done (self->gomx); case GST_EVENT_NEWSEGMENT: GST_DEBUG_OBJECT (self, "stop"); return gst_pad_event_default (pad, event); type_instance_init (GTypeInstance *instance, gpointer g_class) GstElementClass *element_class; element_class = GST_ELEMENT_CLASS (g_class); self = GST_OMX_BASE_FILTER (instance); /* GOmx */ GOmxCore *gomx; self->gomx = gomx = g_omx_core_new (); gomx->client_data = self; self->sinkpad = gst_pad_new_from_template (gst_element_class_get_pad_template (element_class, "sink"), "sink"); gst_pad_set_chain_function (self->sinkpad, pad_chain); gst_pad_set_event_function (self->sinkpad, pad_event); self->srcpad = gst_pad_new_from_template (gst_element_class_get_pad_template (element_class, "src"), "src"); gst_pad_use_fixed_caps (self->srcpad); gst_element_add_pad (GST_ELEMENT (self), self->sinkpad); gst_element_add_pad (GST_ELEMENT (self), self->srcpad); GType gst_omx_base_filter_get_type (void) static GType type = 0; if (type == 0) GTypeInfo *type_info; type_info = g_new0 (GTypeInfo, 1); type_info->class_size = sizeof (GstOmxBaseFilterClass); type_info->class_init = type_class_init; type_info->instance_size = sizeof (GstOmxBaseFilter); type_info->instance_init = type_instance_init; type = g_type_register_static (GST_TYPE_ELEMENT, "GstOmxBaseFilter", type_info, 0); g_free (type_info); return type; --- NEW FILE: gstomx_base_filter.h --- #ifndef __GST_OMX_BASE_FILTER_H__ #define __GST_OMX_BASE_FILTER_H__ #include <gst/gst.h> #include <config.h> G_BEGIN_DECLS #define GST_OMX_BASE_FILTER(obj) (GstOmxBaseFilter *) (obj) #define GST_OMX_BASE_FILTER_TYPE (gst_omx_base_filter_get_type ()) #define GST_OMX_BASE_FILTER_CLASS(obj) (GstOmxBaseFilterClass *) (obj) typedef struct GstOmxBaseFilter GstOmxBaseFilter; typedef struct GstOmxBaseFilterClass GstOmxBaseFilterClass; typedef void (*GstOmxBaseFilterCb) (GstOmxBaseFilter *self); #include <gstomx_util.h> struct GstOmxBaseFilter GstElement element; GstPad *sinkpad; GstPad *srcpad; GThread *thread; const char *omx_component; }; struct GstOmxBaseFilterClass GstElementClass parent_class; GType gst_omx_base_filter_get_type (void); G_END_DECLS #endif /* __GST_OMX_BASE_FILTER_H__ */ |
From: <fe...@ke...> - 2007-08-28 11:07:53
|
CVS Root: /cvs/gstreamer Module: gst-openmax Changes by: felipec Date: Tue Aug 28 2007 11:07:55 UTC Log message: Improve logging. Modified files: omx : gstomx_base_filter.c gstomx_base_sink.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base_filter.c.diff?r1=1.1&r2=1.2 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base_sink.c.diff?r1=1.1&r2=1.2 ====Begin Diffs==== Index: gstomx_base_filter.c =================================================================== RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_base_filter.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- gstomx_base_filter.c 10 Jul 2007 15:26:01 -0000 1.1 +++ gstomx_base_filter.c 28 Aug 2007 11:07:40 -0000 1.2 @@ -73,9 +73,11 @@ self = GST_OMX_BASE_FILTER (element); - GST_DEBUG_OBJECT (self, "changing state %s - %s", - gst_element_state_get_name (GST_STATE_TRANSITION_CURRENT (transition)), - gst_element_state_get_name (GST_STATE_TRANSITION_NEXT (transition))); + GST_LOG_OBJECT (self, "begin"); + + GST_INFO_OBJECT (self, "changing state %s - %s", + gst_element_state_get_name (GST_STATE_TRANSITION_CURRENT (transition)), + gst_element_state_get_name (GST_STATE_TRANSITION_NEXT (transition))); switch (transition) { @@ -122,6 +124,8 @@ break; } + GST_LOG_OBJECT (self, "end"); return ret; } @@ -163,7 +167,7 @@ gomx = (GOmxCore *) cb_data; self = GST_OMX_BASE_FILTER (gomx->client_data); - GST_LOG_OBJECT (self, "start"); out_port = self->out_port; @@ -177,7 +181,7 @@ if (!omx_buffer) { - GST_WARNING_OBJECT (self, "Bad buffer"); + GST_WARNING_OBJECT (self, "null buffer"); continue; } @@ -292,10 +296,10 @@ gomx = self->gomx; GST_LOG_OBJECT (self, "gst_buffer: size=%lu", GST_BUFFER_SIZE (buf)); - GST_DEBUG_OBJECT (self, "state: %d", gomx->omx_state); + GST_LOG_OBJECT (self, "state: %d", gomx->omx_state); if (gomx->omx_state == OMX_StateLoaded) @@ -336,6 +340,7 @@ OMX_BUFFERHEADERTYPE *omx_buffer; + GST_LOG_OBJECT (self, "request_buffer"); omx_buffer = g_omx_port_request_buffer (in_port); if (omx_buffer) @@ -364,7 +369,7 @@ } else { - GST_WARNING_OBJECT (self, "bad buffer"); + GST_WARNING_OBJECT (self, "null buffer"); /* ret = GST_FLOW_ERROR; */ @@ -388,7 +393,7 @@ self = GST_OMX_BASE_FILTER (GST_OBJECT_PARENT (pad)); - GST_DEBUG_OBJECT (self, "start"); GST_DEBUG_OBJECT (self, "event: %s", GST_EVENT_TYPE_NAME (event)); @@ -408,7 +413,7 @@ - GST_DEBUG_OBJECT (self, "stop"); return gst_pad_event_default (pad, event); @@ -424,7 +429,7 @@ self = GST_OMX_BASE_FILTER (instance); /* GOmx */ @@ -446,6 +451,8 @@ gst_element_add_pad (GST_ELEMENT (self), self->sinkpad); gst_element_add_pad (GST_ELEMENT (self), self->srcpad); GType Index: gstomx_base_sink.c RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_base_sink.c,v --- gstomx_base_sink.c 10 Jul 2007 15:28:48 -0000 1.1 +++ gstomx_base_sink.c 28 Aug 2007 11:07:40 -0000 1.2 @@ -56,13 +56,13 @@ self = GST_OMX_BASE_SINK (gst_base); - GST_DEBUG_OBJECT (self, "begin"); + GST_LOG_OBJECT (self, "begin"); g_omx_core_init (self->gomx, self->omx_component); if (self->gomx->omx_error) return GST_STATE_CHANGE_FAILURE; - GST_DEBUG_OBJECT (self, "end"); + GST_LOG_OBJECT (self, "end"); return true; @@ -74,7 +74,7 @@ g_omx_core_finish (self->gomx); @@ -82,7 +82,7 @@ - GST_DEBUG_OBJECT (self, "end"); @@ -115,7 +115,7 @@ GST_LOG_OBJECT (self, "begin"); @@ -172,7 +172,7 @@ @@ -196,7 +196,7 @@ self = GST_OMX_BASE_SINK (gst_base); - GST_DEBUG_OBJECT (self, "begin"); @@ -214,7 +214,7 @@ return true; @@ -253,7 +253,7 @@ self = GST_OMX_BASE_SINK (instance); @@ -262,7 +262,7 @@ gomx->client_data = self; |
From: <fe...@ke...> - 2007-08-28 11:12:06
|
CVS Root: /cvs/gstreamer Module: gst-openmax Changes by: felipec Date: Tue Aug 28 2007 11:12:07 UTC Log message: Fix a small memory leak. Modified files: omx : gstomx_base_filter.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base_filter.c.diff?r1=1.2&r2=1.3 ====Begin Diffs==== Index: gstomx_base_filter.c =================================================================== RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_base_filter.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- gstomx_base_filter.c 28 Aug 2007 11:07:40 -0000 1.2 +++ gstomx_base_filter.c 28 Aug 2007 11:11:53 -0000 1.3 @@ -356,6 +356,10 @@ { gst_buffer_unref (old_buf); } + else if (omx_buffer->pBuffer) + { + g_free (omx_buffer->pBuffer); + } } omx_buffer->nOffset = 0; |
From: <fe...@ke...> - 2007-08-28 11:13:06
|
CVS Root: /cvs/gstreamer Module: gst-openmax Changes by: felipec Date: Tue Aug 28 2007 11:13:10 UTC Log message: Fix zerocopy. Now actually use it. Modified files: omx : gstomx_base_filter.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base_filter.c.diff?r1=1.3&r2=1.4 ====Begin Diffs==== Index: gstomx_base_filter.c =================================================================== RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_base_filter.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- gstomx_base_filter.c 28 Aug 2007 11:11:53 -0000 1.3 +++ gstomx_base_filter.c 28 Aug 2007 11:12:56 -0000 1.4 @@ -224,7 +224,7 @@ } else { - /* This is only menat for the first OpenMAX buffers, + /* This is only meant for the first OpenMAX buffers, * which need to be pre-allocated. */ /* Also for the very last one. */ gst_pad_alloc_buffer_and_set_caps (self->srcpad, @@ -238,6 +238,9 @@ memcpy (GST_BUFFER_DATA (buf), omx_buffer->pBuffer + omx_buffer->nOffset, omx_buffer->nFilledLen); gst_pad_push (self->srcpad, buf); omx_buffer->nFilledLen = 0; + GST_WARNING_OBJECT (self, "couldn't ZC"); + g_free (omx_buffer->pBuffer); + omx_buffer->pBuffer = NULL; } } |
From: <fe...@ke...> - 2007-08-28 11:15:23
|
CVS Root: /cvs/gstreamer Module: gst-openmax Changes by: felipec Date: Tue Aug 28 2007 11:15:27 UTC Log message: Implement zerocopy on the base sink. Modified files: omx : gstomx_base_sink.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base_sink.c.diff?r1=1.2&r2=1.3 ====Begin Diffs==== Index: gstomx_base_sink.c =================================================================== RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_base_sink.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- gstomx_base_sink.c 28 Aug 2007 11:07:40 -0000 1.2 +++ gstomx_base_sink.c 28 Aug 2007 11:15:12 -0000 1.3 @@ -162,10 +162,28 @@ GST_LOG_OBJECT (self, "omx_buffer: size=%lu, len=%lu, offset=%lu", omx_buffer->nAllocLen, omx_buffer->nFilledLen, omx_buffer->nOffset); + { + GstBuffer *old_buf; + old_buf = omx_buffer->pAppPrivate; + + if (old_buf) + { + gst_buffer_unref (old_buf); + } + else if (omx_buffer->pBuffer) + g_free (omx_buffer->pBuffer); + } + /* We are going to use this. */ + gst_buffer_ref (buf); omx_buffer->nOffset = 0; - /** @todo Get rid of this memcpy. */ - memcpy (omx_buffer->pBuffer, GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf)); + omx_buffer->pBuffer = GST_BUFFER_DATA (buf); + omx_buffer->nAllocLen = GST_BUFFER_SIZE (buf); omx_buffer->nFilledLen = GST_BUFFER_SIZE (buf); + omx_buffer->pAppPrivate = buf; GST_LOG_OBJECT (self, "release_buffer"); g_omx_port_release_buffer (in_port, omx_buffer); |
From: <fe...@ke...> - 2007-08-28 11:16:45
|
CVS Root: /cvs/gstreamer Module: gst-openmax Changes by: felipec Date: Tue Aug 28 2007 11:16:47 UTC Log message: This looks better. Modified files: omx : gstomx_base_filter.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base_filter.c.diff?r1=1.4&r2=1.5 ====Begin Diffs==== Index: gstomx_base_filter.c =================================================================== RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_base_filter.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- gstomx_base_filter.c 28 Aug 2007 11:12:56 -0000 1.4 +++ gstomx_base_filter.c 28 Aug 2007 11:16:32 -0000 1.5 @@ -236,11 +236,11 @@ if (buf) { memcpy (GST_BUFFER_DATA (buf), omx_buffer->pBuffer + omx_buffer->nOffset, omx_buffer->nFilledLen); - gst_pad_push (self->srcpad, buf); omx_buffer->nFilledLen = 0; GST_WARNING_OBJECT (self, "couldn't ZC"); g_free (omx_buffer->pBuffer); omx_buffer->pBuffer = NULL; + gst_pad_push (self->srcpad, buf); } } } |
From: <fe...@ke...> - 2007-08-28 12:08:09
|
CVS Root: /cvs/gstreamer Module: gst-openmax Changes by: felipec Date: Tue Aug 28 2007 12:08:10 UTC Log message: More readable. Modified files: omx : gstomx_base_filter.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base_filter.c.diff?r1=1.5&r2=1.6 ====Begin Diffs==== Index: gstomx_base_filter.c =================================================================== RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_base_filter.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- gstomx_base_filter.c 28 Aug 2007 11:16:32 -0000 1.5 +++ gstomx_base_filter.c 28 Aug 2007 12:07:56 -0000 1.6 @@ -235,9 +235,9 @@ if (buf) { + GST_WARNING_OBJECT (self, "couldn't zerocopy"); memcpy (GST_BUFFER_DATA (buf), omx_buffer->pBuffer + omx_buffer->nOffset, omx_buffer->nFilledLen); omx_buffer->nFilledLen = 0; - GST_WARNING_OBJECT (self, "couldn't ZC"); g_free (omx_buffer->pBuffer); omx_buffer->pBuffer = NULL; gst_pad_push (self->srcpad, buf); |
From: <fe...@ke...> - 2007-08-28 12:09:32
|
CVS Root: /cvs/gstreamer Module: gst-openmax Changes by: felipec Date: Tue Aug 28 2007 12:09:35 UTC Log message: Add timestamp information. Modified files: omx : gstomx_base_filter.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base_filter.c.diff?r1=1.6&r2=1.7 ====Begin Diffs==== Index: gstomx_base_filter.c =================================================================== RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_base_filter.c,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- gstomx_base_filter.c 28 Aug 2007 12:07:56 -0000 1.6 +++ gstomx_base_filter.c 28 Aug 2007 12:09:20 -0000 1.7 @@ -216,6 +216,7 @@ if (buf && !(omx_buffer->nFlags & OMX_BUFFERFLAG_EOS)) { GST_BUFFER_SIZE (buf) = omx_buffer->nFilledLen; + GST_BUFFER_TIMESTAMP (buf) = omx_buffer->nTimeStamp * (GST_SECOND / OMX_TICKS_PER_SECOND); omx_buffer->pAppPrivate = NULL; omx_buffer->pBuffer = NULL; omx_buffer->nFilledLen = 0; @@ -237,6 +238,7 @@ { GST_WARNING_OBJECT (self, "couldn't zerocopy"); memcpy (GST_BUFFER_DATA (buf), omx_buffer->pBuffer + omx_buffer->nOffset, omx_buffer->nFilledLen); + GST_BUFFER_TIMESTAMP (buf) = omx_buffer->nTimeStamp * (GST_SECOND / OMX_TICKS_PER_SECOND); omx_buffer->nFilledLen = 0; g_free (omx_buffer->pBuffer); omx_buffer->pBuffer = NULL; @@ -370,6 +372,7 @@ omx_buffer->nAllocLen = GST_BUFFER_SIZE (buf); omx_buffer->nFilledLen = GST_BUFFER_SIZE (buf); omx_buffer->pAppPrivate = buf; + omx_buffer->nTimeStamp = GST_BUFFER_TIMESTAMP (buf) / (GST_SECOND / OMX_TICKS_PER_SECOND); GST_LOG_OBJECT (self, "release_buffer"); g_omx_port_release_buffer (in_port, omx_buffer); |
From: <fe...@ke...> - 2007-08-28 14:12:13
|
CVS Root: /cvs/gstreamer Module: gst-openmax Changes by: felipec Date: Tue Aug 28 2007 14:12:15 UTC Log message: Whitespace fixes. Modified files: omx : gstomx_alsasink.c gstomx_base_sink.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_alsasink.c.diff?r1=1.1&r2=1.2 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base_sink.c.diff?r1=1.3&r2=1.4 ====Begin Diffs==== Index: gstomx_alsasink.c =================================================================== RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_alsasink.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- gstomx_alsasink.c 10 Jul 2007 15:28:48 -0000 1.1 +++ gstomx_alsasink.c 28 Aug 2007 14:12:01 -0000 1.2 @@ -74,18 +74,18 @@ setcaps (GstBaseSink *gst_sink, GstCaps *caps) { - GstOmxBaseSink *self; - GOmxCore *gomx; + GstOmxBaseSink *self; + GOmxCore *gomx; - self = GST_OMX_BASE_SINK (gst_sink); - gomx = (GOmxCore *) self->gomx; + self = GST_OMX_BASE_SINK (gst_sink); + gomx = (GOmxCore *) self->gomx; GST_INFO_OBJECT (self, "setcaps (sink): %" GST_PTR_FORMAT, caps); - g_return_val_if_fail (gst_caps_get_size (caps) == 1, FALSE); + g_return_val_if_fail (gst_caps_get_size (caps) == 1, FALSE); - { - GstStructure *structure; + { + GstStructure *structure; gint channels; gint width; gint rate; @@ -125,7 +125,7 @@ } } - return true; + return true; } static void Index: gstomx_base_sink.c RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_base_sink.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- gstomx_base_sink.c 28 Aug 2007 11:15:12 -0000 1.3 +++ gstomx_base_sink.c 28 Aug 2007 14:12:01 -0000 1.4 @@ -52,31 +52,31 @@ static gboolean start (GstBaseSink *gst_base) - self = GST_OMX_BASE_SINK (gst_base); + self = GST_OMX_BASE_SINK (gst_base); - GST_LOG_OBJECT (self, "begin"); + GST_LOG_OBJECT (self, "begin"); g_omx_core_init (self->gomx, self->omx_component); if (self->gomx->omx_error) return GST_STATE_CHANGE_FAILURE; - GST_LOG_OBJECT (self, "end"); + GST_LOG_OBJECT (self, "end"); stop (GstBaseSink *gst_base) - g_omx_core_finish (self->gomx); + g_omx_core_finish (self->gomx); g_omx_core_deinit (self->gomx); @@ -84,7 +84,7 @@ GST_LOG_OBJECT (self, "end"); |
From: <fe...@ke...> - 2007-08-28 14:13:00
|
CVS Root: /cvs/gstreamer Module: gst-openmax Changes by: felipec Date: Tue Aug 28 2007 14:13:03 UTC Log message: Add more capabilities for MPEG-4 video dec. Modified files: omx : gstomx_mpeg4dec.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_mpeg4dec.c.diff?r1=1.3&r2=1.4 ====Begin Diffs==== Index: gstomx_mpeg4dec.c =================================================================== RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_mpeg4dec.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- gstomx_mpeg4dec.c 10 Jul 2007 15:24:48 -0000 1.3 +++ gstomx_mpeg4dec.c 28 Aug 2007 14:12:48 -0000 1.4 @@ -75,13 +75,44 @@ generate_sink_template () { GstCaps *caps; + GstStructure *struc; - caps = gst_caps_new_simple ("video/x-divx", - "divxversion", G_TYPE_INT, 4, - "width", GST_TYPE_INT_RANGE, 16, 4096, - "height", GST_TYPE_INT_RANGE, 16, 4096, - "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, 100, 1, - NULL); + caps = gst_caps_new_empty (); + + struc = gst_structure_new ("video/mpeg", + "mpegversion", G_TYPE_INT, 4, + "systemstream", G_TYPE_BOOLEAN, false, + "width", GST_TYPE_INT_RANGE, 16, 4096, + "height", GST_TYPE_INT_RANGE, 16, 4096, + "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, 100, 1, + NULL); + gst_caps_append_structure (caps, struc); + struc = gst_structure_new ("video/x-divx", + "divxversion", GST_TYPE_INT_RANGE, 4, 5, + struc = gst_structure_new ("video/x-xvid", + struc = gst_structure_new ("video/x-3ivx", return caps; } |
From: <fe...@ke...> - 2007-08-28 15:39:58
|
CVS Root: /cvs/gstreamer Module: gst-openmax Changes by: felipec Date: Tue Aug 28 2007 15:40:00 UTC Log message: Add use-timestamps property. Modified files: omx : gstomx_base_filter.c gstomx_base_filter.h Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base_filter.c.diff?r1=1.7&r2=1.8 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base_filter.h.diff?r1=1.1&r2=1.2 ====Begin Diffs==== Index: gstomx_base_filter.c =================================================================== RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_base_filter.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -d -r1.7 -r1.8 --- gstomx_base_filter.c 28 Aug 2007 12:09:20 -0000 1.7 +++ gstomx_base_filter.c 28 Aug 2007 15:39:45 -0000 1.8 @@ -24,6 +24,12 @@ #include <stdbool.h> +enum +{ + ARG_0, + ARG_USE_TIMESTAMPS +}; + static GstElementClass *parent_class = NULL; /** Finishes the processing. */ @@ -142,6 +148,48 @@ } static void +set_property (GObject *obj, + guint prop_id, + const GValue *value, + GParamSpec *pspec) + GstOmxBaseFilter *self; + self = GST_OMX_BASE_FILTER (obj); + switch (prop_id) + { + case ARG_USE_TIMESTAMPS: + self->use_timestamps = g_value_get_boolean (value); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec); + } +} +static void +get_property (GObject *obj, + GValue *value, + g_value_set_boolean (value, self->use_timestamps); type_class_init (gpointer g_class, gpointer class_data) { @@ -155,6 +203,17 @@ gobject_class->dispose = dispose; gstelement_class->change_state = change_state; + /* Properties stuff */ + gobject_class->set_property = set_property; + gobject_class->get_property = get_property; + g_object_class_install_property (gobject_class, ARG_USE_TIMESTAMPS, + g_param_spec_boolean ("use-timestamps", "Use timestamps", + "Whether or not to use timestamps", + FALSE, G_PARAM_READWRITE)); static gpointer @@ -216,7 +275,11 @@ if (buf && !(omx_buffer->nFlags & OMX_BUFFERFLAG_EOS)) { GST_BUFFER_SIZE (buf) = omx_buffer->nFilledLen; - GST_BUFFER_TIMESTAMP (buf) = omx_buffer->nTimeStamp * (GST_SECOND / OMX_TICKS_PER_SECOND); + if (self->use_timestamps) + { + GST_BUFFER_TIMESTAMP (buf) = omx_buffer->nTimeStamp * (GST_SECOND / OMX_TICKS_PER_SECOND); + } omx_buffer->pAppPrivate = NULL; omx_buffer->pBuffer = NULL; omx_buffer->nFilledLen = 0; @@ -236,9 +299,13 @@ if (buf) { - GST_WARNING_OBJECT (self, "couldn't zerocopy"); + GST_WARNING_OBJECT (self, "couldn't zero-copy"); memcpy (GST_BUFFER_DATA (buf), omx_buffer->pBuffer + omx_buffer->nOffset, omx_buffer->nFilledLen); - GST_BUFFER_TIMESTAMP (buf) = omx_buffer->nTimeStamp * (GST_SECOND / OMX_TICKS_PER_SECOND); + if (self->use_timestamps) + { + GST_BUFFER_TIMESTAMP (buf) = omx_buffer->nTimeStamp * (GST_SECOND / OMX_TICKS_PER_SECOND); + } omx_buffer->nFilledLen = 0; g_free (omx_buffer->pBuffer); omx_buffer->pBuffer = NULL; @@ -372,7 +439,10 @@ omx_buffer->nAllocLen = GST_BUFFER_SIZE (buf); omx_buffer->nFilledLen = GST_BUFFER_SIZE (buf); omx_buffer->pAppPrivate = buf; - omx_buffer->nTimeStamp = GST_BUFFER_TIMESTAMP (buf) / (GST_SECOND / OMX_TICKS_PER_SECOND); + omx_buffer->nTimeStamp = GST_BUFFER_TIMESTAMP (buf) / (GST_SECOND / OMX_TICKS_PER_SECOND); GST_LOG_OBJECT (self, "release_buffer"); g_omx_port_release_buffer (in_port, omx_buffer); Index: gstomx_base_filter.h RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_base_filter.h,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- gstomx_base_filter.h 10 Jul 2007 15:26:01 -0000 1.1 +++ gstomx_base_filter.h 28 Aug 2007 15:39:45 -0000 1.2 @@ -50,6 +50,7 @@ GThread *thread; const char *omx_component; + gboolean use_timestamps; }; struct GstOmxBaseFilterClass |
From: <fe...@ke...> - 2007-08-28 15:41:05
|
CVS Root: /cvs/gstreamer Module: gst-openmax Changes by: felipec Date: Tue Aug 28 2007 15:41:08 UTC Log message: Add property for the OpenMAX component name. Modified files: omx : gstomx_alsasink.c gstomx_base_filter.c gstomx_base_filter.h gstomx_base_sink.c gstomx_base_sink.h gstomx_dummy.c gstomx_mp3dec.c gstomx_mpeg4dec.c gstomx_vorbisdec.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_alsasink.c.diff?r1=1.2&r2=1.3 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base_filter.c.diff?r1=1.8&r2=1.9 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base_filter.h.diff?r1=1.2&r2=1.3 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base_sink.c.diff?r1=1.4&r2=1.5 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base_sink.h.diff?r1=1.1&r2=1.2 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_dummy.c.diff?r1=1.2&r2=1.3 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_mp3dec.c.diff?r1=1.4&r2=1.5 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_mpeg4dec.c.diff?r1=1.4&r2=1.5 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_vorbisdec.c.diff?r1=1.5&r2=1.6 ====Begin Diffs==== Index: gstomx_alsasink.c =================================================================== RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_alsasink.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- gstomx_alsasink.c 28 Aug 2007 14:12:01 -0000 1.2 +++ gstomx_alsasink.c 28 Aug 2007 15:40:53 -0000 1.3 @@ -150,7 +150,7 @@ GST_DEBUG_OBJECT (omx_base, "start"); - omx_base->omx_component = OMX_COMPONENT_ID; + omx_base->omx_component = g_strdup (OMX_COMPONENT_ID); } GType Index: gstomx_base_filter.c RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_base_filter.c,v retrieving revision 1.8 retrieving revision 1.9 diff -u -d -r1.8 -r1.9 --- gstomx_base_filter.c 28 Aug 2007 15:39:45 -0000 1.8 +++ gstomx_base_filter.c 28 Aug 2007 15:40:53 -0000 1.9 @@ -27,6 +27,7 @@ enum { ARG_0, + ARG_COMPONENT_NAME, ARG_USE_TIMESTAMPS }; @@ -144,6 +145,8 @@ g_omx_core_free (self->gomx); + g_free (self->omx_component); + G_OBJECT_CLASS (parent_class)->dispose (obj); @@ -159,6 +162,13 @@ switch (prop_id) { + case ARG_COMPONENT_NAME: + if (self->omx_component) + { + g_free (self->omx_component); + } + self->omx_component = g_value_dup_string (value); + break; case ARG_USE_TIMESTAMPS: self->use_timestamps = g_value_get_boolean (value); break; @@ -180,6 +190,9 @@ + g_value_set_string (value, self->omx_component); g_value_set_boolean (value, self->use_timestamps); @@ -209,6 +222,11 @@ gobject_class->set_property = set_property; gobject_class->get_property = get_property; + g_object_class_install_property (gobject_class, ARG_COMPONENT_NAME, + g_param_spec_string ("component-name", "Component name", + "Name of the OpenMAX IL component to use", + NULL, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, ARG_USE_TIMESTAMPS, g_param_spec_boolean ("use-timestamps", "Use timestamps", "Whether or not to use timestamps", Index: gstomx_base_filter.h RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_base_filter.h,v --- gstomx_base_filter.h 28 Aug 2007 15:39:45 -0000 1.2 +++ gstomx_base_filter.h 28 Aug 2007 15:40:53 -0000 1.3 @@ -49,7 +49,7 @@ GThread *thread; - const char *omx_component; + char *omx_component; gboolean use_timestamps; Index: gstomx_base_sink.c RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_base_sink.c,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- gstomx_base_sink.c 28 Aug 2007 14:12:01 -0000 1.4 +++ gstomx_base_sink.c 28 Aug 2007 15:40:54 -0000 1.5 @@ -24,6 +24,12 @@ #include <stdbool.h> +enum +{ + ARG_0, + ARG_COMPONENT_NAME +}; static GstElementClass *parent_class = NULL; static void @@ -96,6 +102,8 @@ @@ -238,6 +246,52 @@ static void +set_property (GObject *obj, + guint prop_id, + const GValue *value, + GParamSpec *pspec) + GstOmxBaseSink *self; + self = GST_OMX_BASE_SINK (obj); + switch (prop_id) + { + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (obj, prop_id, pspec); + } +} +static void +get_property (GObject *obj, + GValue *value, type_class_init (gpointer g_class, gpointer class_data) @@ -258,6 +312,17 @@ gst_base_sink_class->event = event; gst_base_sink_class->preroll = render; gst_base_sink_class->render = render; + /* Properties stuff */ + gobject_class->set_property = set_property; + gobject_class->get_property = get_property; Index: gstomx_base_sink.h RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_base_sink.h,v retrieving revision 1.1 diff -u -d -r1.1 -r1.2 --- gstomx_base_sink.h 10 Jul 2007 15:28:48 -0000 1.1 +++ gstomx_base_sink.h 28 Aug 2007 15:40:54 -0000 1.2 @@ -46,7 +46,7 @@ GOmxCore *gomx; GOmxPort *in_port; struct GstOmxBaseSinkClass Index: gstomx_dummy.c RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_dummy.c,v --- gstomx_dummy.c 10 Jul 2007 15:24:48 -0000 1.2 +++ gstomx_dummy.c 28 Aug 2007 15:40:54 -0000 1.3 @@ -107,7 +107,7 @@ Index: gstomx_mp3dec.c RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_mp3dec.c,v --- gstomx_mp3dec.c 10 Jul 2007 15:24:48 -0000 1.4 +++ gstomx_mp3dec.c 28 Aug 2007 15:40:54 -0000 1.5 @@ -170,7 +170,7 @@ omx_base->gomx->settings_changed_cb = settings_changed_cb; Index: gstomx_mpeg4dec.c RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_mpeg4dec.c,v --- gstomx_mpeg4dec.c 28 Aug 2007 14:12:48 -0000 1.4 +++ gstomx_mpeg4dec.c 28 Aug 2007 15:40:54 -0000 1.5 @@ -26,7 +26,6 @@ #define OMX_COMPONENT_ID "OMX.st.video_decoder.mpeg4" -/* #define OMX_COMPONENT_ID "OMX_VideoDecoder" */ static GstOmxBaseFilterClass *parent_class = NULL; @@ -310,7 +309,7 @@ Index: gstomx_vorbisdec.c RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_vorbisdec.c,v retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- gstomx_vorbisdec.c 10 Jul 2007 15:24:48 -0000 1.5 +++ gstomx_vorbisdec.c 28 Aug 2007 15:40:54 -0000 1.6 @@ -161,7 +161,7 @@ |
From: <fe...@ke...> - 2007-08-28 16:41:04
|
CVS Root: /cvs/gstreamer Module: gst-openmax Changes by: felipec Date: Tue Aug 28 2007 16:41:04 UTC Log message: Add video sink. Only works with TI's OpenMAX IL. Modified files: omx : Makefile.am gstomx.c Added files: omx : gstomx_videosink.c gstomx_videosink.h Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/Makefile.am.diff?r1=1.4&r2=1.5 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx.c.diff?r1=1.5&r2=1.6 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_videosink.c?rev=1.1&content-type=text/vnd.viewcvs-markup http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_videosink.h?rev=1.1&content-type=text/vnd.viewcvs-markup ====Begin Diffs==== Index: Makefile.am =================================================================== RCS file: /cvs/gstreamer/gst-openmax/omx/Makefile.am,v retrieving revision 1.4 retrieving revision 1.5 diff -u -d -r1.4 -r1.5 --- Makefile.am 10 Jul 2007 15:28:48 -0000 1.4 +++ Makefile.am 28 Aug 2007 16:40:49 -0000 1.5 @@ -8,7 +8,8 @@ gstomx_mpeg4dec.c gstomx_mpeg4dec.h \ gstomx_vorbisdec.c gstomx_vorbisdec.h \ gstomx_mp3dec.c gstomx_mp3dec.h \ - gstomx_alsasink.c gstomx_alsasink.h + gstomx_alsasink.c gstomx_alsasink.h \ + gstomx_videosink.c gstomx_videosink.h libgstomx_la_CFLAGS = $(GST_CFLAGS) $(GST_BASE_CFLAGS) $(OMXIL_CFLAGS) libgstomx_la_LIBADD = $(GST_LIBS) $(GST_BASE_LIBS) $(OMXIL_LIBS) Index: gstomx.c RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx.c,v retrieving revision 1.6 diff -u -d -r1.5 -r1.6 --- gstomx.c 10 Jul 2007 15:28:48 -0000 1.5 +++ gstomx.c 28 Aug 2007 16:40:49 -0000 1.6 @@ -23,6 +23,7 @@ #include "gstomx_vorbisdec.h" #include "gstomx_mp3dec.h" #include "gstomx_alsasink.h" +#include "gstomx_videosink.h" #include <stdbool.h> @@ -58,6 +59,11 @@ return false; } + if (!gst_element_register (plugin, "omx_videosink", GST_RANK_NONE, GST_OMX_VIDEOSINK_TYPE)) + { + return false; + } + return true; } --- NEW FILE: gstomx_videosink.c --- /* * Copyright (C) 2007 Nokia Corporation. All rights reserved. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation * version 2.1 of the License. * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "gstomx_videosink.h" #include "gstomx_base_sink.h" #include "gstomx.h" #include <string.h> #include <stdbool.h> #define OMX_COMPONENT_ID "OMX.st.videosink" static GstOmxBaseSinkClass *parent_class = NULL; enum { ARG_0, ARG_X_SCALE, ARG_Y_SCALE }; static GstCaps * generate_sink_template () GstCaps *caps; caps = gst_caps_new_any (); return caps; } static void type_base_init (gpointer g_class) GstElementClass *element_class; GstOmxBaseSinkClass *omx_base_class; omx_base_class = GST_OMX_BASE_SINK_CLASS (g_class); element_class = GST_ELEMENT_CLASS (g_class); { GstElementDetails details; details.longname = "OpenMAX IL videosink element"; details.klass = "None"; details.description = "Does nothing"; details.author = "Felipe Contreras"; gst_element_class_set_details (element_class, &details); } GstPadTemplate *template; template = gst_pad_template_new ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, generate_sink_template ()); gst_element_class_add_pad_template (element_class, template); static gboolean setcaps (GstBaseSink *gst_sink, GstCaps *caps) GstOmxBaseSink *omx_base; GstOmxVideoSink *self; GOmxCore *gomx; omx_base = GST_OMX_BASE_SINK (gst_sink); self = GST_OMX_VIDEOSINK (gst_sink); gomx = (GOmxCore *) omx_base->gomx; GST_INFO_OBJECT (omx_base, "setcaps (sink): %" GST_PTR_FORMAT, caps); g_return_val_if_fail (gst_caps_get_size (caps) == 1, FALSE); GstStructure *structure; guint framerate = 15; gint width; gint height; guint color_format; structure = gst_caps_get_structure (caps, 0); { const GValue *fps; fps = gst_structure_get_value (structure, "fps"); if (fps != NULL) { framerate = gst_value_get_fraction_numerator (fps) / gst_value_get_fraction_denominator (fps); } } gst_structure_get_int (structure, "width", &width); gst_structure_get_int (structure, "height", &height); if (strcmp (gst_structure_get_name (structure), "video/x-raw-yuv") == 0) guint32 fourcc; if (gst_structure_get_fourcc (structure, "format", &fourcc)) switch (fourcc) { case GST_MAKE_FOURCC ('I', '4', '2', '0'): color_format = OMX_COLOR_FormatYUV420Planar; break; case GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'): color_format = OMX_COLOR_FormatYCbYCr; case GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y'): color_format = OMX_COLOR_FormatCbYCrY; } OMX_PARAM_PORTDEFINITIONTYPE *param; param = calloc (1, sizeof (OMX_PARAM_PORTDEFINITIONTYPE)); param->nSize = sizeof (OMX_PARAM_PORTDEFINITIONTYPE); param->nVersion.s.nVersionMajor = 1; param->nVersion.s.nVersionMinor = 1; param->nPortIndex = 0; OMX_GetParameter (gomx->omx_handle, OMX_IndexParamPortDefinition, param); switch (color_format) case OMX_COLOR_FormatYUV420Planar: param->nBufferSize = (width * height * 1.5); break; case OMX_COLOR_FormatYCbYCr: case OMX_COLOR_FormatCbYCrY: param->nBufferSize = (width * height * 2); param->format.video.xFramerate = framerate; param->format.video.nFrameWidth = width; param->format.video.nFrameHeight = height; param->format.video.eCompressionFormat = OMX_VIDEO_CodingUnused; param->format.video.eColorFormat = color_format; OMX_SetParameter (gomx->omx_handle, OMX_IndexParamPortDefinition, param); free (param); OMX_CONFIG_SCALEFACTORTYPE *config; config = calloc (1, sizeof (OMX_CONFIG_SCALEFACTORTYPE)); config->nSize = sizeof (OMX_CONFIG_SCALEFACTORTYPE); config->nVersion.s.nVersionMajor = 1; config->nVersion.s.nVersionMinor = 1; config->nPortIndex = 0; OMX_GetConfig (gomx->omx_handle, OMX_IndexConfigCommonScale, config); config->xWidth = self->x_scale; config->xHeight = self->y_scale; OMX_SetConfig (gomx->omx_handle, OMX_IndexConfigCommonScale, config); free (config); return true; set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) self = GST_OMX_VIDEOSINK (object); switch (prop_id) case ARG_X_SCALE: self->x_scale = g_value_get_uint (value); break; case ARG_Y_SCALE: self->y_scale = g_value_get_uint (value); default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); get_property (GObject *object, GValue *value, g_value_set_uint (value, self->x_scale); g_value_set_uint (value, self->y_scale); type_class_init (gpointer g_class, gpointer class_data) GObjectClass *gobject_class; GstBaseSinkClass *gst_base_sink_class; gobject_class = (GObjectClass *) g_class; gst_base_sink_class = GST_BASE_SINK_CLASS (g_class); parent_class = g_type_class_ref (GST_OMX_BASE_SINK_TYPE); gst_base_sink_class->set_caps = setcaps; gobject_class->set_property = set_property; gobject_class->get_property = get_property; g_object_class_install_property (gobject_class, ARG_X_SCALE, g_param_spec_uint ("x-scale", "X Scale", "How much to scale the image in the X axis (100 means nothing)", 0, G_MAXUINT, 100, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, ARG_Y_SCALE, g_param_spec_uint ("y-scale", "Y Scale", "How much to scale the image in the Y axis (100 means nothing)", type_instance_init (GTypeInstance *instance, gpointer g_class) omx_base = GST_OMX_BASE_SINK (instance); GST_DEBUG_OBJECT (omx_base, "start"); omx_base->omx_component = g_strdup (OMX_COMPONENT_ID); GType gst_omx_videosink_get_type (void) static GType type = 0; if (type == 0) GTypeInfo *type_info; type_info = g_new0 (GTypeInfo, 1); type_info->class_size = sizeof (GstOmxVideoSinkClass); type_info->base_init = type_base_init; type_info->class_init = type_class_init; type_info->instance_size = sizeof (GstOmxVideoSink); type_info->instance_init = type_instance_init; type = g_type_register_static (GST_OMX_BASE_SINK_TYPE, "GstOmxVideoSink", type_info, 0); g_free (type_info); return type; --- NEW FILE: gstomx_videosink.h --- #ifndef __GST_OMX_VIDEOSINK_H__ #define __GST_OMX_VIDEOSINK_H__ #include <gst/gst.h> #include <config.h> G_BEGIN_DECLS #define GST_OMX_VIDEOSINK(obj) (GstOmxVideoSink *) (obj) #define GST_OMX_VIDEOSINK_TYPE (gst_omx_videosink_get_type ()) typedef struct GstOmxVideoSink GstOmxVideoSink; typedef struct GstOmxVideoSinkClass GstOmxVideoSinkClass; struct GstOmxVideoSink GstOmxBaseSink omx_base; guint x_scale; guint y_scale; struct GstOmxVideoSinkClass GstOmxBaseSinkClass parent_class; GType gst_omx_videosink_get_type (void); G_END_DECLS #endif /* __GST_OMX_VIDEOSINK_H__ */ |
From: <fe...@ke...> - 2007-10-16 14:06:53
|
CVS Root: /cvs/gstreamer Module: gst-openmax Changes by: felipec Date: Tue Oct 16 2007 14:06:56 UTC Log message: Don't hang if not properly initialized. Modified files: omx : gstomx_base_filter.c gstomx_base_filter.h Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base_filter.c.diff?r1=1.9&r2=1.10 http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base_filter.h.diff?r1=1.3&r2=1.4 ====Begin Diffs==== Index: gstomx_base_filter.c =================================================================== RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_base_filter.c,v retrieving revision 1.9 retrieving revision 1.10 diff -u -d -r1.9 -r1.10 --- gstomx_base_filter.c 28 Aug 2007 15:40:53 -0000 1.9 +++ gstomx_base_filter.c 16 Oct 2007 14:06:41 -0000 1.10 @@ -98,8 +98,11 @@ break; case GST_STATE_CHANGE_PAUSED_TO_READY: - g_omx_port_set_done (self->in_port); - g_omx_port_set_done (self->out_port); + if (self->initialized) + { + g_omx_port_set_done (self->in_port); + g_omx_port_set_done (self->out_port); + } default: @@ -117,8 +120,11 @@ - g_thread_join (self->thread); - g_omx_core_finish (self->gomx); + g_thread_join (self->thread); + g_omx_core_finish (self->gomx); case GST_STATE_CHANGE_READY_TO_NULL: @@ -399,6 +405,8 @@ g_omx_core_prepare (self->gomx); self->thread = g_thread_create (output_thread, gomx, TRUE, NULL); + + self->initialized = true; } in_port = self->in_port; Index: gstomx_base_filter.h RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_base_filter.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- gstomx_base_filter.h 28 Aug 2007 15:40:53 -0000 1.3 +++ gstomx_base_filter.h 16 Oct 2007 14:06:42 -0000 1.4 @@ -51,6 +51,7 @@ char *omx_component; gboolean use_timestamps; + gboolean initialized; }; struct GstOmxBaseFilterClass |
From: <fe...@ke...> - 2007-10-16 14:08:12
|
CVS Root: /cvs/gstreamer Module: gst-openmax Changes by: felipec Date: Tue Oct 16 2007 14:08:13 UTC Log message: Specify the srcpad capabilities of the videosink. Modified files: omx : gstomx_videosink.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_videosink.c.diff?r1=1.1&r2=1.2 ====Begin Diffs==== Index: gstomx_videosink.c =================================================================== RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_videosink.c,v retrieving revision 1.1 retrieving revision 1.2 diff -u -d -r1.1 -r1.2 --- gstomx_videosink.c 28 Aug 2007 16:40:49 -0000 1.1 +++ gstomx_videosink.c 16 Oct 2007 14:07:59 -0000 1.2 @@ -40,8 +40,39 @@ generate_sink_template () { GstCaps *caps; + GstStructure *struc; - caps = gst_caps_new_any (); + caps = gst_caps_new_empty (); + + struc = gst_structure_new ("video/x-raw-yuv", + "width", GST_TYPE_INT_RANGE, 16, 4096, + "height", GST_TYPE_INT_RANGE, 16, 4096, + "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, 30, 1, + NULL); + { + GValue list = { 0 }; + GValue val = { 0 }; + g_value_init (&list, GST_TYPE_LIST); + g_value_init (&val, GST_TYPE_FOURCC); + gst_value_set_fourcc (&val, GST_MAKE_FOURCC ('I', '4', '2', '0')); + gst_value_list_append_value (&list, &val); + gst_value_set_fourcc (&val, GST_MAKE_FOURCC ('Y', 'U', 'Y', '2')); + gst_value_set_fourcc (&val, GST_MAKE_FOURCC ('U', 'Y', 'V', 'Y')); + gst_structure_set_value (struc, "format", &list); + g_value_unset (&val); + g_value_unset (&list); + } + gst_caps_append_structure (caps, struc); return caps; } |
From: <fe...@ke...> - 2007-10-16 16:01:25
|
CVS Root: /cvs/gstreamer Module: gst-openmax Changes by: felipec Date: Tue Oct 16 2007 16:01:27 UTC Log message: Use timestamps by default on the base filter Modified files: omx : gstomx_base_filter.c Links: http://freedesktop.org/cgi-bin/viewcvs.cgi/gstreamer/gst-openmax/omx/gstomx_base_filter.c.diff?r1=1.10&r2=1.11 ====Begin Diffs==== Index: gstomx_base_filter.c =================================================================== RCS file: /cvs/gstreamer/gst-openmax/omx/gstomx_base_filter.c,v retrieving revision 1.10 retrieving revision 1.11 diff -u -d -r1.10 -r1.11 --- gstomx_base_filter.c 16 Oct 2007 14:06:41 -0000 1.10 +++ gstomx_base_filter.c 16 Oct 2007 16:01:13 -0000 1.11 @@ -236,7 +236,7 @@ g_object_class_install_property (gobject_class, ARG_USE_TIMESTAMPS, g_param_spec_boolean ("use-timestamps", "Use timestamps", "Whether or not to use timestamps", - FALSE, G_PARAM_READWRITE)); + TRUE, G_PARAM_READWRITE)); } } @@ -537,6 +537,8 @@ GST_LOG_OBJECT (self, "begin"); + self->use_timestamps = true; + /* GOmx */ { GOmxCore *gomx; |