diff options
-rw-r--r-- | src/gstqcvideodec.c | 53 |
1 files changed, 50 insertions, 3 deletions
diff --git a/src/gstqcvideodec.c b/src/gstqcvideodec.c index 34ded39..51d93e2 100644 --- a/src/gstqcvideodec.c +++ b/src/gstqcvideodec.c @@ -85,7 +85,25 @@ enum static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ("sink", GST_PAD_SINK, GST_PAD_ALWAYS, - GST_STATIC_CAPS ("video/mpeg") + GST_STATIC_CAPS ( + "video/mpeg, " + "mpegversion=(int) 4, " + "systemstream=(boolean) false, " + "width=(int) [1,2048], " + "height=(int) [1,2048]" + ";" + "video/x-divx, " + "divxversion = (int)[3, 5], " + "width=(int) [1,2048], " + "height=(int) [1,2048]" + ";" + "video/x-h264, " + "parsed=(boolean)true, " + "alignment=(string) au, " + "stream-format=(string) byte-stream, " + "width=(int) [1,2048], " + "height=(int) [1,2048]" + ) ); static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE ("src", @@ -301,6 +319,7 @@ static gboolean gst_qcvideodec_set_format (GstVideoDecoder * decoder,GstVideoCod GstCaps *caps; gchar *caps_data; + GstStructure *structure; GstVideoFormat fmt = GST_VIDEO_FORMAT_NV12_64Z32; @@ -322,8 +341,36 @@ static gboolean gst_qcvideodec_set_format (GstVideoDecoder * decoder,GstVideoCod g_print("\n gst_qcvideodec_set_format Enter: data_size : %d \n",minfo.size); g_print("\n gst_qcvideodec_set_format Enter: width : %d , Height : %d \n",Vinfo->width,Vinfo->height); - // dec->decoder_format = VDEC_CODECTYPE_H264; - dec->decoder_format = VDEC_CODECTYPE_MPEG4; + structure = gst_caps_get_structure (state->caps, 0); + + if (gst_structure_has_name(structure, "video/mpeg")) { + dec->decoder_format = VDEC_CODECTYPE_MPEG4; + } else if (gst_structure_has_name(structure, "video/x-divx")) { + int version; + gst_structure_get_int (structure, "divxversion", &version); + switch (version) { + case 3: + dec->decoder_format = VDEC_CODECTYPE_DIVX_3; + break; + case 4: + dec->decoder_format = VDEC_CODECTYPE_DIVX_4; + break; + case 5: + dec->decoder_format = VDEC_CODECTYPE_DIVX_5; + break; + case 6: + dec->decoder_format = VDEC_CODECTYPE_DIVX_6; + break; + default: + g_print("OUCH\n"); + } + } else if (gst_structure_has_name(structure, "video/x-h264")) { + dec->decoder_format = VDEC_CODECTYPE_H264; + } else { + g_print("OUCH\n"); + } + + g_print("set_format decoder_format is %d\n", dec->decoder_format); /*Initialize Decoder with codec type and resolution*/ ioctl_msg.in = &dec->decoder_format; |