static gboolean
pad_event (GstPad *pad, GstEvent *event)
{
    GstOmxBaseVideoEnc *self;
    GstOmxBaseFilter *omx_base;

    self = GST_OMX_BASE_VIDEOENC (GST_OBJECT_PARENT (pad));
    omx_base = GST_OMX_BASE_FILTER (self);

    GST_INFO_OBJECT (self, "begin: event=%s", GST_EVENT_TYPE_NAME (event));

    switch (GST_EVENT_TYPE (event))
    {
        case GST_EVENT_CROP:
        {
            gint top, left;
            gst_event_parse_crop (event, &top, &left, NULL, NULL);

            omx_base->in_port->n_offset = (self->rowstride * top) + left;

            return TRUE;
        }
        default:
        {
            return parent_class->pad_event (pad, event);
        }
    }
}
static gboolean
pad_event (GstPad *pad, GstEvent *event)
{
    GstOmxBaseVfpc2 *self;
    GstOmxBaseFilter2 *omx_base;

    self = GST_OMX_BASE_VFPC2 (GST_OBJECT_PARENT (pad));
    omx_base = GST_OMX_BASE_FILTER2 (self);

    GST_INFO_OBJECT (self, "begin: event=%s", GST_EVENT_TYPE_NAME (event));

    switch (GST_EVENT_TYPE (event))
    {
        case GST_EVENT_CROP:
        {
            gst_event_parse_crop (event, &self->top, &self->left, NULL, NULL);
            return TRUE;
        }
        default:
        {
            return parent_class->pad_event (pad, event);
        }
    }
}