static guint gst_dasf_clock_required (GstDasfSink* self) { guint retvalue = 0; GooTiPostProcessor *peer_component = NULL; GooObject *video_decoder = GOO_OBJECT (gst_goo_util_find_goo_component ( GST_ELEMENT (self), GOO_TYPE_TI_VIDEO_DECODER)); if (video_decoder == NULL) video_decoder = GOO_OBJECT ( gst_goo_util_find_goo_component (GST_ELEMENT (self), GOO_TYPE_TI_VIDEO_DECODER720P)); if(video_decoder == NULL) goto done; GST_DEBUG_OBJECT (self, "Found a video decoder %s", GOO_OBJECT_NAME(GOO_OBJECT(video_decoder))); GstGooVideoFilter *gst_video_dec = GST_GOO_VIDEO_FILTER(g_object_get_data(G_OBJECT(video_decoder), "gst")); peer_component = GOO_TI_POST_PROCESSOR (gst_goo_util_find_goo_component (GST_ELEMENT (gst_video_dec), GOO_TYPE_TI_POST_PROCESSOR)); GST_INFO("peer_component=0x%08x", peer_component); if (peer_component == NULL) goto done; self->pp = peer_component; // TODO we should probably ref and unref pp!! retvalue = 1; done: return retvalue; }
static void goo_ti_post_processor_set_parameters (GooComponent* component) { g_assert (GOO_IS_TI_POST_PROCESSOR (component)); GooTiPostProcessor* self = GOO_TI_POST_PROCESSOR (component); GooTiPostProcessorPriv* priv = GOO_TI_POST_PROCESSOR_GET_PRIVATE (self); goo_component_set_parameter_by_name (component, VIDEO_PIPELINE, (OMX_PTR) &self->video_pipeline); _goo_ti_post_processor_set_ouput(self, priv->out_device); goo_component_set_parameter_by_name (component, BACKGROUND_COLOR, self->background_color); if (self->transcolor_key->bTransColorEnable != OMX_FALSE) { goo_component_set_parameter_by_name (component, TRANSPARENCY_KEY, self->transcolor_key); } /* Check if there is an OMX Clock existent */ goo_ti_post_processor_set_clock (component); GOO_OBJECT_DEBUG (self, ""); return; }
static void goo_ti_post_processor_get_property (GObject* object, guint prop_id, GValue* value, GParamSpec* spec) { g_assert (GOO_IS_TI_POST_PROCESSOR (object)); GooTiPostProcessor* self = GOO_TI_POST_PROCESSOR (object); GooTiPostProcessorPriv* priv = GOO_TI_POST_PROCESSOR_GET_PRIVATE (self); switch (prop_id) { case PROP_ROTATION: g_value_set_enum (value, priv->rotation); break; case PROP_OPACITY: g_value_set_uint (value, priv->opacity); break; case PROP_XSCALE: g_value_set_uint (value, priv->xscale); break; case PROP_YSCALE: g_value_set_uint (value, priv->yscale); break; case PROP_XPOS: g_value_set_uint (value, priv->xpos); break; case PROP_YPOS: g_value_set_uint (value, priv->ypos); break; case PROP_MIRROR: g_value_set_boolean (value, priv->mirror); break; case PROP_CROPLEFT: g_value_set_uint (value, priv->cropleft); break; case PROP_CROPTOP: g_value_set_uint (value, priv->croptop); break; case PROP_CROPWIDTH: g_value_set_uint (value, priv->cropwidth); break; case PROP_CROPHEIGHT: g_value_set_uint (value, priv->cropheight); break; case PROP_OUTPUT: g_value_set_enum (value, priv->output); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, spec); break; } return; }
void goo_ti_post_processor_set_starttime (GooComponent* component, gint64 time_start) { g_assert (GOO_IS_TI_POST_PROCESSOR (component)); GooTiPostProcessor* self = GOO_TI_POST_PROCESSOR (component); GOO_OBJECT_DEBUG (self, "Set start time by sync AV"); GooTiComponentFactory *factory = GOO_TI_COMPONENT_FACTORY ( goo_object_get_owner (GOO_OBJECT (component)) ); if (factory->clock != NULL) { GooComponent *clock = g_object_ref (factory->clock); goo_ti_clock_set_starttime (clock, time_start); g_object_unref (clock); } g_object_unref (factory); }
static void goo_ti_post_processor_load_parameters (GooComponent* component) { g_assert (GOO_IS_TI_POST_PROCESSOR (component)); GooTiPostProcessor* self = GOO_TI_POST_PROCESSOR (component); self->background_color = g_new0 (POSTPROC_CUSTOM_BACKGROUNDCOLOR, 1); self->background_color->nOutputDev = 0; self->background_color->nColor = 0x000000; self->transcolor_key = g_new0 (POSTPROC_CUSTOM_TRANSCOLORKEYTYPE, 1); self->transcolor_key->nOutputDev = 0; self->transcolor_key->nKeyType = 1; self->transcolor_key->bTransColorEnable = OMX_FALSE; self->transcolor_key->nColor = 0x000000; self->video_pipeline = 1; GOO_OBJECT_DEBUG (self, ""); return; }
static void goo_ti_post_processor_finalize (GObject* object) { g_assert (GOO_IS_TI_POST_PROCESSOR (object)); GooTiPostProcessor* self = GOO_TI_POST_PROCESSOR (object); if (G_LIKELY (self->background_color)) { g_free (self->background_color); self->background_color = NULL; } if (G_LIKELY (self->transcolor_key)) { g_free (self->transcolor_key); self->transcolor_key = NULL; } (*G_OBJECT_CLASS (goo_ti_post_processor_parent_class)->finalize) (object); return; }
static void goo_ti_post_processor_set_property (GObject* object, guint prop_id, const GValue* value, GParamSpec* spec) { g_assert (GOO_IS_TI_POST_PROCESSOR (object)); GooTiPostProcessor* self = GOO_TI_POST_PROCESSOR (object); GooTiPostProcessorPriv* priv = GOO_TI_POST_PROCESSOR_GET_PRIVATE (self); switch (prop_id) { case PROP_ROTATION: _goo_ti_post_processor_set_rotation (self, g_value_get_enum (value)); break; case PROP_OPACITY: _goo_ti_post_processor_set_opacity (self, g_value_get_uint (value)); break; case PROP_XSCALE: _goo_ti_post_processor_set_xscale (self, g_value_get_uint (value)); break; case PROP_YSCALE: _goo_ti_post_processor_set_yscale (self, g_value_get_uint (value)); break; case PROP_XPOS: _goo_ti_post_processor_set_xpos (self, g_value_get_uint (value)); break; case PROP_YPOS: _goo_ti_post_processor_set_ypos (self, g_value_get_uint (value)); break; case PROP_MIRROR: _goo_ti_post_processor_set_mirror (self, g_value_get_boolean (value)); break; case PROP_CROPTOP: _goo_ti_post_processor_set_crop_top (self, g_value_get_uint (value)); break; case PROP_CROPLEFT: _goo_ti_post_processor_set_crop_left (self, g_value_get_uint (value)); break; case PROP_CROPWIDTH: _goo_ti_post_processor_set_crop_width (self, g_value_get_uint (value)); break; case PROP_CROPHEIGHT: _goo_ti_post_processor_set_crop_height (self, g_value_get_uint (value)); break; case PROP_OUTPUT: priv->out_device = g_value_get_enum (value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, spec); break; } return; }
static void goo_ti_post_processor_validate (GooComponent* component) { g_assert (GOO_IS_TI_POST_PROCESSOR (component)); GooTiPostProcessor* self = GOO_TI_POST_PROCESSOR (component); g_assert (component->cur_state == OMX_StateLoaded); /* params */ { g_assert (self->video_pipeline >= 1 && self->video_pipeline <= 2); /* this is temporal */ self->background_color->nOutputDev = 0; g_assert (self->background_color->nColor >= 0x000000 && self->background_color->nColor <= 0xffffff); /* this is temporal */ self->transcolor_key->nOutputDev = 0; self->transcolor_key->nKeyType = 1; g_assert (self->transcolor_key->nColor >= 0x000000 && self->transcolor_key->nColor <= 0xffffff); } /* input */ { GooIterator* iter = goo_component_iterate_input_ports (component); goo_iterator_nth (iter, 0); GooPort* port = GOO_PORT (goo_iterator_get_current (iter)); g_assert (port != NULL); OMX_PARAM_PORTDEFINITIONTYPE* param; param = GOO_PORT_GET_DEFINITION (port); /* let's use the max available resolution. */ ResolutionInfo rinfo = goo_get_resolution ("sxvga"); g_assert ((param->format.video.nFrameWidth <= rinfo.width) && (param->format.video.nFrameHeight <= rinfo.height)); param->format.video.cMIMEType = "video/x-raw-yuv"; switch (param->format.video.eColorFormat) { case OMX_COLOR_FormatYUV420PackedPlanar: /* I420 */ param->nBufferSize = param->format.video.nFrameWidth * param->format.video.nFrameHeight * 1.5; break; case OMX_COLOR_FormatYCbYCr: /* YUY2? */ case OMX_COLOR_FormatCbYCrY: /* UYVY? */ case OMX_COLOR_Format16bitRGB565: /* RGB */ param->nBufferSize = param->format.video.nFrameWidth * param->format.video.nFrameHeight * 2; break; default: GOO_OBJECT_DEBUG (self, "Invalid color format"); g_assert_not_reached (); } param->format.video.eCompressionFormat = OMX_VIDEO_CodingUnused; g_object_unref (iter); g_object_unref (port); } GOO_OBJECT_DEBUG (self, ""); return; }