diff options
author | Wim Taymans <wim.taymans@gmail.com> | 2006-09-19 10:23:03 +0000 |
---|---|---|
committer | Wim Taymans <wim.taymans@gmail.com> | 2006-09-19 10:23:03 +0000 |
commit | 3edec5923c7c3a3dd11d76e49eafef7dc0b8d046 (patch) | |
tree | aded42692452751ee75b004278d155775f30a315 /sys | |
parent | ce5339801d2ac95aefb6576da4f52488e94eb205 (diff) |
gst-libs/gst/riff/riff-media.c: Reorder the audio formats a bit for clarity.
Original commit message from CVS:
* gst-libs/gst/riff/riff-media.c: (gst_riff_create_audio_caps),
(gst_riff_create_audio_template_caps):
Reorder the audio formats a bit for clarity.
Detect and create caps for MSGSM and MSN (WAV49).
Fixes #356596.
* sys/xvimage/xvimagesink.c: (gst_xvimage_buffer_destroy),
(gst_xvimagesink_check_xshm_calls), (gst_xvimagesink_xvimage_new),
(gst_xvimagesink_get_xv_support), (gst_xvimagesink_show_frame):
Small cleanups, move error handling out of normal flow for clarity.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/xvimage/xvimagesink.c | 89 |
1 files changed, 52 insertions, 37 deletions
diff --git a/sys/xvimage/xvimagesink.c b/sys/xvimage/xvimagesink.c index d72fbe7a..b7cca887 100644 --- a/sys/xvimage/xvimagesink.c +++ b/sys/xvimage/xvimagesink.c @@ -246,7 +246,7 @@ gst_xvimage_buffer_destroy (GstXvImageBuffer * xvimage) #ifdef HAVE_XSHM if (xvimagesink->xcontext->use_xshm) { if (xvimage->SHMInfo.shmaddr != ((void *) -1)) { - GST_DEBUG_OBJECT (xvimagesink, "XServer ShmDetaching from 0x%x id 0x%x\n", + GST_DEBUG_OBJECT (xvimagesink, "XServer ShmDetaching from 0x%x id 0x%x", xvimage->SHMInfo.shmid, xvimage->SHMInfo.shmseg); XShmDetach (xvimagesink->xcontext->disp, &xvimage->SHMInfo); XSync (xvimagesink->xcontext->disp, FALSE); @@ -463,7 +463,7 @@ gst_xvimagesink_check_xshm_calls (GstXContext * xcontext) /* Sync to ensure we see any errors we caused */ XSync (xcontext->disp, FALSE); - GST_DEBUG ("XServer ShmAttached to 0x%x, id 0x%x\n", SHMInfo.shmid, + GST_DEBUG ("XServer ShmAttached to 0x%x, id 0x%x", SHMInfo.shmid, SHMInfo.shmseg); if (!error_caught) { @@ -480,7 +480,7 @@ beach: XSetErrorHandler (handler); if (did_attach) { - GST_DEBUG ("XServer ShmDetaching from 0x%x id 0x%x\n", + GST_DEBUG ("XServer ShmDetaching from 0x%x id 0x%x", SHMInfo.shmid, SHMInfo.shmseg); XShmDetach (xcontext->disp, &SHMInfo); XSync (xcontext->disp, FALSE); @@ -589,7 +589,7 @@ gst_xvimagesink_xvimage_new (GstXvImageSink * xvimagesink, GstCaps * caps) } XSync (xvimagesink->xcontext->disp, FALSE); - GST_DEBUG_OBJECT (xvimagesink, "XServer ShmAttached to 0x%x, id 0x%x\n", + GST_DEBUG_OBJECT (xvimagesink, "XServer ShmAttached to 0x%x, id 0x%x", xvimage->SHMInfo.shmid, xvimage->SHMInfo.shmseg); } else #endif /* HAVE_XSHM */ @@ -1115,21 +1115,13 @@ gst_xvimagesink_get_xv_support (GstXvImageSink * xvimagesink, g_return_val_if_fail (xcontext != NULL, NULL); /* First let's check that XVideo extension is available */ - if (!XQueryExtension (xcontext->disp, "XVideo", &i, &i, &i)) { - GST_ELEMENT_ERROR (xvimagesink, RESOURCE, SETTINGS, - ("Could not initialise Xv output"), - ("XVideo extension is not available")); - return NULL; - } + if (!XQueryExtension (xcontext->disp, "XVideo", &i, &i, &i)) + goto no_extension; /* Then we get adaptors list */ if (Success != XvQueryAdaptors (xcontext->disp, xcontext->root, - &nb_adaptors, &adaptors)) { - GST_ELEMENT_ERROR (xvimagesink, RESOURCE, SETTINGS, - ("Could not initialise Xv output"), - ("Failed getting XV adaptors list")); - return NULL; - } + &nb_adaptors, &adaptors)) + goto no_adaptors; xcontext->xv_port_id = 0; @@ -1151,15 +1143,11 @@ gst_xvimagesink_get_xv_support (GstXvImageSink * xvimagesink, GST_DEBUG ("XV Adaptor %s with %ld ports", adaptors[i].name, adaptors[i].num_ports); - } XvFreeAdaptorInfo (adaptors); - if (!xcontext->xv_port_id) { - GST_ELEMENT_ERROR (xvimagesink, RESOURCE, BUSY, - ("Could not initialise Xv output"), ("No port available")); - return NULL; - } + if (!xcontext->xv_port_id) + goto no_port; /* Set XV_AUTOPAINT_COLORKEY and XV_DOUBLE_BUFFER and XV_COLORKEY */ { @@ -1334,15 +1322,40 @@ gst_xvimagesink_get_xv_support (GstXvImageSink * xvimagesink, GST_DEBUG ("Generated the following caps: %" GST_PTR_FORMAT, caps); - if (gst_caps_is_empty (caps)) { + if (gst_caps_is_empty (caps)) + goto no_caps; + + return caps; + + /* ERRORS */ +no_extension: + { + GST_ELEMENT_ERROR (xvimagesink, RESOURCE, SETTINGS, + ("Could not initialise Xv output"), + ("XVideo extension is not available")); + return NULL; + } +no_adaptors: + { + GST_ELEMENT_ERROR (xvimagesink, RESOURCE, SETTINGS, + ("Could not initialise Xv output"), + ("Failed getting XV adaptors list")); + return NULL; + } +no_port: + { + GST_ELEMENT_ERROR (xvimagesink, RESOURCE, BUSY, + ("Could not initialise Xv output"), ("No port available")); + return NULL; + } +no_caps: + { gst_caps_unref (caps); XvUngrabPort (xcontext->disp, xcontext->xv_port_id, 0); GST_ELEMENT_ERROR (xvimagesink, STREAM, WRONG_TYPE, (NULL), ("No supported format found")); return NULL; } - - return caps; } static gpointer @@ -2007,19 +2020,10 @@ gst_xvimagesink_show_frame (GstBaseSink * bsink, GstBuffer * buf) GST_BUFFER_CAPS (buf)); if (!xvimagesink->xvimage) - /* The create method should have posted an informative error */ goto no_image; - if (xvimagesink->xvimage->size < GST_BUFFER_SIZE (buf)) { - GST_ELEMENT_ERROR (xvimagesink, RESOURCE, WRITE, - ("Failed to create output image buffer of %dx%d pixels", - xvimagesink->xvimage->width, xvimagesink->xvimage->height), - ("XServer allocated buffer size did not match input buffer")); - - gst_xvimage_buffer_destroy (xvimagesink->xvimage); - xvimagesink->xvimage = NULL; - goto no_image; - } + if (xvimagesink->xvimage->size < GST_BUFFER_SIZE (buf)) + goto wrong_size; } memcpy (xvimagesink->xvimage->xvimage->data, @@ -2028,7 +2032,6 @@ gst_xvimagesink_show_frame (GstBaseSink * bsink, GstBuffer * buf) gst_xvimagesink_xvimage_put (xvimagesink, xvimagesink->xvimage); } - return GST_FLOW_OK; /* ERRORS */ @@ -2036,6 +2039,18 @@ no_image: { /* No image available. That's very bad ! */ GST_WARNING_OBJECT (xvimagesink, "could not create image"); + /* The create method should have posted an informative error */ + return GST_FLOW_ERROR; + } +wrong_size: + { + /* we have a buffer but the size was not what we expected */ + GST_ELEMENT_ERROR (xvimagesink, RESOURCE, WRITE, + ("Failed to create output image buffer of %dx%d pixels", + xvimagesink->xvimage->width, xvimagesink->xvimage->height), + ("XServer allocated buffer size did not match input buffer")); + gst_xvimage_buffer_destroy (xvimagesink->xvimage); + xvimagesink->xvimage = NULL; return GST_FLOW_ERROR; } } |