123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144 |
- --- a/omx/gstomxmjpegdec.h
- +++ b/omx/gstomxmjpegdec.h
- @@ -45,6 +45,16 @@
- struct _GstOMXMJPEGDec
- {
- GstOMXVideoDec parent;
- +#ifdef USE_OMX_TARGET_STARFIVE
- + //If container shows fps as public api, it won't work
- + //as GstBuffer containing pts/dts/duration and it will calculate fps in upstream.
- + //i.e.
- + //not works:
- + // gst-launch-1.0 -v filesrc location=xxx.mp4 ! qtdemux name=demux demux.video_0 ! jpegparse ! omxmjpegdec framerate=xxx ! kmssink driver-name=starfive force-modesetting=1
- + //works:
- + // gst-launch-1.0 -v filesrc location=xxx.mjpeg ! jpegparse ! omxmjpegdec framerate=xxx ! kmssink driver-name=starfive force-modesetting=1
- + gint framerate;
- +#endif
- };
- struct _GstOMXMJPEGDecClass
- --- a/omx/gstomxmjpegdec.c
- +++ b/omx/gstomxmjpegdec.c
- @@ -28,16 +28,28 @@
- GST_DEBUG_CATEGORY_STATIC (gst_omx_mjpeg_dec_debug_category);
- #define GST_CAT_DEFAULT gst_omx_mjpeg_dec_debug_category
- -
- +#ifdef USE_OMX_TARGET_STARFIVE
- +#define DEFAULT_FRAMERATE 0
- +#endif
- /* prototypes */
- static gboolean gst_omx_mjpeg_dec_is_format_change (GstOMXVideoDec * dec,
- GstOMXPort * port, GstVideoCodecState * state);
- static gboolean gst_omx_mjpeg_dec_set_format (GstOMXVideoDec * dec,
- GstOMXPort * port, GstVideoCodecState * state);
- -
- +#ifdef USE_OMX_TARGET_STARFIVE
- +static void gst_omx_mjpeg_dec_set_property (GObject * object, guint prop_id,
- + const GValue * value, GParamSpec * pspec);
- +static void gst_omx_mjpeg_dec_get_property (GObject * object, guint prop_id,
- + GValue * value, GParamSpec * pspec);
- +#endif
- enum
- {
- +#ifdef USE_OMX_TARGET_STARFIVE
- + PROP_0,
- + PROP_FRAMERATE
- +#else
- PROP_0
- +#endif
- };
- /* class initialization */
- @@ -54,11 +66,16 @@
- {
- GstOMXVideoDecClass *videodec_class = GST_OMX_VIDEO_DEC_CLASS (klass);
- GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
- -
- +#ifdef USE_OMX_TARGET_STARFIVE
- + GObjectClass *gobject_class = G_OBJECT_CLASS (videodec_class);
- +#endif
- videodec_class->is_format_change =
- GST_DEBUG_FUNCPTR (gst_omx_mjpeg_dec_is_format_change);
- videodec_class->set_format = GST_DEBUG_FUNCPTR (gst_omx_mjpeg_dec_set_format);
- -
- +#ifdef USE_OMX_TARGET_STARFIVE
- + gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_omx_mjpeg_dec_set_property);
- + gobject_class->get_property = GST_DEBUG_FUNCPTR (gst_omx_mjpeg_dec_get_property);
- +#endif
- videodec_class->cdata.default_sink_template_caps = "image/jpeg, "
- "width=(int) [1,MAX], " "height=(int) [1,MAX]";
- @@ -67,7 +84,16 @@
- "Codec/Decoder/Video/Hardware",
- "Decode MJPEG video streams",
- "Sebastian Dröge <sebastian.droege@collabora.co.uk>");
- -
- +#ifdef USE_OMX_TARGET_STARFIVE
- + g_object_class_install_property (gobject_class, PROP_FRAMERATE,
- + g_param_spec_int ("framerate",
- + "Framerate",
- + "Frames per second in raw stream.\n \
- + Only workable for the container not exposing fps.\n\
- + '0' means disabled.",
- + 0, G_MAXINT,
- + DEFAULT_FRAMERATE, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
- +#endif
- gst_omx_set_default_role (&videodec_class->cdata, "video_decoder.mjpeg");
- }
- @@ -89,10 +115,53 @@
- {
- gboolean ret;
- OMX_PARAM_PORTDEFINITIONTYPE port_def;
- +#ifdef USE_OMX_TARGET_STARFIVE
- + GstVideoInfo *info = &state->info;
- + GstOMXMJPEGDec * mjpeg_dec = GST_OMX_MJPEG_DEC (dec);
- + if (mjpeg_dec->framerate != DEFAULT_FRAMERATE) {
- + GST_DEBUG_OBJECT (dec, " change fps from %d/%d to %d/1" GST_PTR_FORMAT, info->fps_n, info->fps_d, mjpeg_dec->framerate);
- + info->fps_n = mjpeg_dec->framerate;
- + info->fps_d = 1;
- + if (state->caps) {
- + gst_caps_set_simple (state->caps, "framerate", GST_TYPE_FRACTION, info->fps_n, info->fps_d, NULL);
- + }
- + }
- +#endif
- gst_omx_port_get_port_definition (port, &port_def);
- port_def.format.video.eCompressionFormat = OMX_VIDEO_CodingMJPEG;
- ret = gst_omx_port_update_port_definition (port, &port_def) == OMX_ErrorNone;
- return ret;
- }
- +#ifdef USE_OMX_TARGET_STARFIVE
- +static void
- +gst_omx_mjpeg_dec_set_property (GObject * object, guint prop_id,
- + const GValue * value, GParamSpec * pspec)
- +{
- + GstOMXMJPEGDec * mjpeg_dec = GST_OMX_MJPEG_DEC (object);
- + switch (prop_id) {
- + case PROP_FRAMERATE:
- + mjpeg_dec->framerate = g_value_get_int (value);
- + break;
- + default:
- + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- + break;
- + }
- +}
- +
- +static void
- +gst_omx_mjpeg_dec_get_property (GObject * object, guint prop_id, GValue * value,
- + GParamSpec * pspec)
- +{
- + GstOMXMJPEGDec * mjpeg_dec = GST_OMX_MJPEG_DEC (object);
- + switch (prop_id) {
- + case PROP_FRAMERATE:
- + g_value_set_int (value, mjpeg_dec->framerate);
- + break;
- + default:
- + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
- + break;
- + }
- +}
- +#endif
|