From ff1182f0bdba71efe2ba8750f20f8a6f55239fde Mon Sep 17 00:00:00 2001 From: "Ronald S. Bultje" Date: Mon, 14 Jul 2003 06:31:26 +0000 Subject: [PATCH] Fix some weird-ass segfaults in xvid Original commit message from CVS: Fix some weird-ass segfaults in xvid --- ext/xvid/gstxvid.c | 18 ------------------ ext/xvid/gstxviddec.c | 21 +++++++++++++++++++-- ext/xvid/gstxvidenc.c | 17 +++++++++++++++++ 3 files changed, 36 insertions(+), 20 deletions(-) diff --git a/ext/xvid/gstxvid.c b/ext/xvid/gstxvid.c index e1a9700e40..fb7d06f4e7 100644 --- a/ext/xvid/gstxvid.c +++ b/ext/xvid/gstxvid.c @@ -56,24 +56,6 @@ static gboolean plugin_init (GModule *module, GstPlugin *plugin) { - XVID_INIT_PARAM xinit; - gint ret; - - /* set up xvid initially (function pointers, CPU flags) */ - memset(&xinit, 0, sizeof(XVID_INIT_PARAM)); - xinit.cpu_flags = 0; - if ((ret = xvid_init(NULL, 0, &xinit, NULL)) != XVID_ERR_OK) { - g_warning("Faied to initialize XviD: %s (%d)", - gst_xvid_error(ret), ret); - return FALSE; - } - - if (xinit.api_version != API_VERSION) { - g_warning("Xvid API version mismatch! %d.%d (that's us) != %d.%d (lib)", - (API_VERSION >> 8) & 0xff, API_VERSION & 0xff, - (xinit.api_version >> 8) & 0xff, xinit.api_version & 0xff); - } - return (gst_xviddec_plugin_init(module, plugin) && gst_xvidenc_plugin_init(module, plugin)); } diff --git a/ext/xvid/gstxviddec.c b/ext/xvid/gstxviddec.c index fcde219ba7..a5888da8ff 100644 --- a/ext/xvid/gstxviddec.c +++ b/ext/xvid/gstxviddec.c @@ -135,6 +135,23 @@ static void gst_xviddec_class_init (GstXvidDecClass *klass) { GObjectClass *gobject_class = (GObjectClass *) klass; + XVID_INIT_PARAM xinit; + gint ret; + + /* set up xvid initially (function pointers, CPU flags) */ + memset(&xinit, 0, sizeof(XVID_INIT_PARAM)); + xinit.cpu_flags = 0; + if ((ret = xvid_init(NULL, 0, &xinit, NULL)) != XVID_ERR_OK) { + g_warning("Failed to initialize XviD: %s (%d)", + gst_xvid_error(ret), ret); + return; + } + + if (xinit.api_version != API_VERSION) { + g_warning("Xvid API version mismatch! %d.%d (that's us) != %d.%d (lib)", + (API_VERSION >> 8) & 0xff, API_VERSION & 0xff, + (xinit.api_version >> 8) & 0xff, xinit.api_version & 0xff); + } parent_class = g_type_class_ref(GST_TYPE_ELEMENT); @@ -248,7 +265,7 @@ gst_xviddec_chain (GstPad *pad, xframe.bitstream = (void *) GST_BUFFER_DATA(buf); xframe.image = (void *) GST_BUFFER_DATA(outbuf); xframe.length = GST_BUFFER_SIZE(buf); - xframe.stride = xviddec->width * xviddec->bpp / 8; + xframe.stride = 0; /*xviddec->width * xviddec->bpp / 8;*/ xframe.colorspace = xviddec->csp; if ((ret = xvid_decore(xviddec->handle, XVID_DEC_DECODE, @@ -278,8 +295,8 @@ gst_xviddec_negotiate (GstXvidDec *xviddec) { GST_MAKE_FOURCC('Y','U','Y','V'), 16, 16, XVID_CSP_YUY2 }, { GST_MAKE_FOURCC('U','Y','V','Y'), 16, 16, XVID_CSP_UYVY }, { GST_MAKE_FOURCC('Y','V','Y','U'), 16, 16, XVID_CSP_YVYU }, - { GST_MAKE_FOURCC('I','4','2','0'), 12, 12, XVID_CSP_I420 }, { GST_MAKE_FOURCC('Y','V','1','2'), 12, 12, XVID_CSP_YV12 }, + { GST_MAKE_FOURCC('I','4','2','0'), 12, 12, XVID_CSP_I420 }, { GST_MAKE_FOURCC('R','G','B',' '), 32, 32, XVID_CSP_RGB32 }, { GST_MAKE_FOURCC('R','G','B',' '), 24, 24, XVID_CSP_RGB24 }, { GST_MAKE_FOURCC('R','G','B',' '), 16, 16, XVID_CSP_RGB555 }, diff --git a/ext/xvid/gstxvidenc.c b/ext/xvid/gstxvidenc.c index 5a4156ceab..eb27b8ff7b 100644 --- a/ext/xvid/gstxvidenc.c +++ b/ext/xvid/gstxvidenc.c @@ -147,6 +147,23 @@ gst_xvidenc_class_init (GstXvidEncClass *klass) { GstElementClass *gstelement_class; GObjectClass *gobject_class; + XVID_INIT_PARAM xinit; + gint ret; + + /* set up xvid initially (function pointers, CPU flags) */ + memset(&xinit, 0, sizeof(XVID_INIT_PARAM)); + xinit.cpu_flags = 0; + if ((ret = xvid_init(NULL, 0, &xinit, NULL)) != XVID_ERR_OK) { + g_warning("Failed to initialize XviD: %s (%d)", + gst_xvid_error(ret), ret); + return; + } + + if (xinit.api_version != API_VERSION) { + g_warning("Xvid API version mismatch! %d.%d (that's us) != %d.%d (lib)", + (API_VERSION >> 8) & 0xff, API_VERSION & 0xff, + (xinit.api_version >> 8) & 0xff, xinit.api_version & 0xff); + } gobject_class = (GObjectClass *) klass; gstelement_class = (GstElementClass *) klass;