diff --git a/ext/dv/gstdvdec.c b/ext/dv/gstdvdec.c index dfd0dcd52d..4ea06b801c 100644 --- a/ext/dv/gstdvdec.c +++ b/ext/dv/gstdvdec.c @@ -266,81 +266,78 @@ gst_dvdec_loop (GstElement *element) dvdec = GST_DVDEC (element); - do { - // grab an input frame - needed = BUFFER; - if (dvdec->remaining > 0) { - memcpy(&dvdec->inframe[BUFFER-needed], - GST_BUFFER_DATA(dvdec->carryover)+(GST_BUFFER_SIZE(dvdec->carryover)-dvdec->remaining), - dvdec->remaining); - dvdec->remaining = 0; - gst_buffer_unref(dvdec->carryover); - } - while (needed) { - buf = gst_pad_pull(dvdec->sinkpad); - if (needed < GST_BUFFER_SIZE(buf)) { - memcpy(&dvdec->inframe[BUFFER-needed],GST_BUFFER_DATA(buf),needed); -/***** NOTE: this is done because 1394src doesn't allow buffers to outlive the handler *****/ - dvdec->carryover = gst_buffer_copy(buf); - dvdec->remaining = GST_BUFFER_SIZE(buf) - needed; - needed = 0; - } else { - memcpy(&dvdec->inframe[BUFFER-needed],GST_BUFFER_DATA(buf),GST_BUFFER_SIZE(buf)); - needed -= GST_BUFFER_SIZE(buf); - } - gst_buffer_unref(buf); - } - - if (!GST_PAD_CAPS (dvdec->videosrcpad)) { - gst_pad_set_caps (dvdec->videosrcpad, gst_pad_get_padtemplate_caps (dvdec->videosrcpad)); - } - - if (!dvdec->pool) { - dvdec->pool = gst_pad_get_bufferpool (dvdec->videosrcpad); - } - - buf = NULL; - if (dvdec->pool) { - buf = gst_buffer_new_from_pool (dvdec->pool, 0, 0); - } - - if (!buf) { - // allocate an output frame - buf = gst_buffer_new(); -#ifdef RGB - GST_BUFFER_SIZE(buf) = (720*HEIGHT)*3; -#else - GST_BUFFER_SIZE(buf) = (720*HEIGHT)*2; -#endif - GST_BUFFER_DATA(buf) = g_malloc(GST_BUFFER_SIZE(buf)); - outframe = GST_BUFFER_DATA(buf); + // grab an input frame + needed = BUFFER; + if (dvdec->remaining > 0) { + memcpy(&dvdec->inframe[BUFFER-needed], + GST_BUFFER_DATA(dvdec->carryover)+(GST_BUFFER_SIZE(dvdec->carryover)-dvdec->remaining), + dvdec->remaining); + dvdec->remaining = 0; + gst_buffer_unref(dvdec->carryover); + } + while (needed) { + buf = gst_pad_pull(dvdec->sinkpad); + if (needed < GST_BUFFER_SIZE(buf)) { + memcpy(&dvdec->inframe[BUFFER-needed],GST_BUFFER_DATA(buf),needed); +/**** NOTE: this is done because 1394src doesn't allow buffers to outlive the handler *****/ + dvdec->carryover = gst_buffer_copy(buf); + dvdec->remaining = GST_BUFFER_SIZE(buf) - needed; + needed = 0; } else { - outframe = GST_BUFFER_DATA (buf); + memcpy(&dvdec->inframe[BUFFER-needed],GST_BUFFER_DATA(buf),GST_BUFFER_SIZE(buf)); + needed -= GST_BUFFER_SIZE(buf); } + gst_buffer_unref(buf); + } - outframe_ptrs[0] = outframe; - outframe_ptrs[1] = outframe_ptrs[0] + 720*HEIGHT; - outframe_ptrs[2] = outframe_ptrs[1] + 360*HEIGHT; + if (!GST_PAD_CAPS (dvdec->videosrcpad)) { + gst_pad_set_caps (dvdec->videosrcpad, gst_pad_get_padtemplate_caps (dvdec->videosrcpad)); + } + + if (!dvdec->pool) { + dvdec->pool = gst_pad_get_bufferpool (dvdec->videosrcpad); + } + + buf = NULL; + if (dvdec->pool) { + buf = gst_buffer_new_from_pool (dvdec->pool, 0, 0); + } + + if (!buf) { + // allocate an output frame + buf = gst_buffer_new(); #ifdef RGB - outframe_pitches[0] = 720*3; + GST_BUFFER_SIZE(buf) = (720*HEIGHT)*3; #else - outframe_pitches[0] = 720*2; // huh? + GST_BUFFER_SIZE(buf) = (720*HEIGHT)*2; #endif - outframe_pitches[1] = HEIGHT/2; - outframe_pitches[2] = HEIGHT/2; + GST_BUFFER_DATA(buf) = g_malloc(GST_BUFFER_SIZE(buf)); + outframe = GST_BUFFER_DATA(buf); + } else { + outframe = GST_BUFFER_DATA (buf); + } - // now we start decoding the frame - dv_parse_header(dvdec->decoder,dvdec->inframe); + outframe_ptrs[0] = outframe; + outframe_ptrs[1] = outframe_ptrs[0] + 720*HEIGHT; + outframe_ptrs[2] = outframe_ptrs[1] + 360*HEIGHT; +#ifdef RGB + outframe_pitches[0] = 720*3; +#else + outframe_pitches[0] = 720*2; // huh? +#endif + outframe_pitches[1] = HEIGHT/2; + outframe_pitches[2] = HEIGHT/2; + + // now we start decoding the frame + dv_parse_header(dvdec->decoder,dvdec->inframe); #ifdef RGB - dv_decode_full_frame(dvdec->decoder,dvdec->inframe,e_dv_color_rgb,outframe_ptrs,outframe_pitches); + dv_decode_full_frame(dvdec->decoder,dvdec->inframe,e_dv_color_rgb,outframe_ptrs,outframe_pitches); #else - dv_decode_full_frame(dvdec->decoder,dvdec->inframe,e_dv_color_yuv,outframe_ptrs,outframe_pitches); + dv_decode_full_frame(dvdec->decoder,dvdec->inframe,e_dv_color_yuv,outframe_ptrs,outframe_pitches); #endif - gst_pad_push(dvdec->videosrcpad,buf); - - } while (!GST_ELEMENT_IS_COTHREAD_STOPPING (element)); + gst_pad_push(dvdec->videosrcpad,buf); } diff --git a/ext/flac/gstflacdec.c b/ext/flac/gstflacdec.c index 6729148275..d7619b55ec 100644 --- a/ext/flac/gstflacdec.c +++ b/ext/flac/gstflacdec.c @@ -242,9 +242,6 @@ gst_flacdec_loop (GstElement *element) FLAC__stream_decoder_process_metadata (flacdec->decoder); } - do { - FLAC__stream_decoder_process_one_frame (flacdec->decoder); - } - while (!GST_ELEMENT_IS_COTHREAD_STOPPING (element)); + FLAC__stream_decoder_process_one_frame (flacdec->decoder); } diff --git a/ext/ladspa/gstladspa.c b/ext/ladspa/gstladspa.c index 81740c259f..e605ec3438 100644 --- a/ext/ladspa/gstladspa.c +++ b/ext/ladspa/gstladspa.c @@ -640,26 +640,23 @@ gst_ladspa_loop (GstElement *element) LADSPA_Descriptor *desc; desc = ladspa->descriptor; - do { - printf("looping something\n"); + printf("looping something\n"); - // first get all the necessary data from the input ports - for (i=0;inumsinkpads;i++){ - ladspa->buffers[i] = gst_pad_pull(ladspa->sinkpads[i]); - printf("pulling buffer %d\n", i); - } + // first get all the necessary data from the input ports + for (i=0;inumsinkpads;i++){ + ladspa->buffers[i] = gst_pad_pull(ladspa->sinkpads[i]); + printf("pulling buffer %d\n", i); + } - for (i=0;inumsinkpads;i++) { + for (i=0;inumsinkpads;i++) { // desc->connect_port(ladspa->handle,i,&(ladspa->controls[i])); - } + } - for (i=0;inumsrcpads && inumsinkpads;i++){ - printf("pushing buffer %d\n", i); - gst_pad_push (ladspa->srcpads[i], ladspa->buffers[i]); - ladspa->buffers[i] = NULL; - } - - } while (!GST_ELEMENT_IS_COTHREAD_STOPPING (element)); + for (i=0;inumsrcpads && inumsinkpads;i++){ + printf("pushing buffer %d\n", i); + gst_pad_push (ladspa->srcpads[i], ladspa->buffers[i]); + ladspa->buffers[i] = NULL; + } } static void diff --git a/ext/mikmod/gstmikmod.c b/ext/mikmod/gstmikmod.c index 9ab89e7c58..a8b6a345fc 100644 --- a/ext/mikmod/gstmikmod.c +++ b/ext/mikmod/gstmikmod.c @@ -407,9 +407,8 @@ gst_mikmod_loop (GstElement *element) do { if ( Player_Active() ) drv_gst.Update(); - - if (GST_ELEMENT_IS_COTHREAD_STOPPING (element)) - cothread_switch(cothread_current_main()); + + gst_element_yield (element); } while ( 1 ); }