Fixed some leftover fixes

Original commit message from CVS:
Fixed some leftover fixes
This commit is contained in:
Wim Taymans 2001-12-23 23:00:59 +00:00
parent 35e50facf7
commit cdb004a722
4 changed files with 76 additions and 86 deletions

View file

@ -266,81 +266,78 @@ gst_dvdec_loop (GstElement *element)
dvdec = GST_DVDEC (element); dvdec = GST_DVDEC (element);
do { // grab an input frame
// grab an input frame needed = BUFFER;
needed = BUFFER; if (dvdec->remaining > 0) {
if (dvdec->remaining > 0) { memcpy(&dvdec->inframe[BUFFER-needed],
memcpy(&dvdec->inframe[BUFFER-needed], GST_BUFFER_DATA(dvdec->carryover)+(GST_BUFFER_SIZE(dvdec->carryover)-dvdec->remaining),
GST_BUFFER_DATA(dvdec->carryover)+(GST_BUFFER_SIZE(dvdec->carryover)-dvdec->remaining), dvdec->remaining);
dvdec->remaining); dvdec->remaining = 0;
dvdec->remaining = 0; gst_buffer_unref(dvdec->carryover);
gst_buffer_unref(dvdec->carryover); }
} while (needed) {
while (needed) { buf = gst_pad_pull(dvdec->sinkpad);
buf = gst_pad_pull(dvdec->sinkpad); if (needed < GST_BUFFER_SIZE(buf)) {
if (needed < GST_BUFFER_SIZE(buf)) { memcpy(&dvdec->inframe[BUFFER-needed],GST_BUFFER_DATA(buf),needed);
memcpy(&dvdec->inframe[BUFFER-needed],GST_BUFFER_DATA(buf),needed); /**** NOTE: this is done because 1394src doesn't allow buffers to outlive the handler *****/
/***** NOTE: this is done because 1394src doesn't allow buffers to outlive the handler *****/ dvdec->carryover = gst_buffer_copy(buf);
dvdec->carryover = gst_buffer_copy(buf); dvdec->remaining = GST_BUFFER_SIZE(buf) - needed;
dvdec->remaining = GST_BUFFER_SIZE(buf) - needed; needed = 0;
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);
} else { } 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; if (!GST_PAD_CAPS (dvdec->videosrcpad)) {
outframe_ptrs[1] = outframe_ptrs[0] + 720*HEIGHT; gst_pad_set_caps (dvdec->videosrcpad, gst_pad_get_padtemplate_caps (dvdec->videosrcpad));
outframe_ptrs[2] = outframe_ptrs[1] + 360*HEIGHT; }
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 #ifdef RGB
outframe_pitches[0] = 720*3; GST_BUFFER_SIZE(buf) = (720*HEIGHT)*3;
#else #else
outframe_pitches[0] = 720*2; // huh? GST_BUFFER_SIZE(buf) = (720*HEIGHT)*2;
#endif #endif
outframe_pitches[1] = HEIGHT/2; GST_BUFFER_DATA(buf) = g_malloc(GST_BUFFER_SIZE(buf));
outframe_pitches[2] = HEIGHT/2; outframe = GST_BUFFER_DATA(buf);
} else {
outframe = GST_BUFFER_DATA (buf);
}
// now we start decoding the frame outframe_ptrs[0] = outframe;
dv_parse_header(dvdec->decoder,dvdec->inframe); 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 #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 #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 #endif
gst_pad_push(dvdec->videosrcpad,buf); gst_pad_push(dvdec->videosrcpad,buf);
} while (!GST_ELEMENT_IS_COTHREAD_STOPPING (element));
} }

View file

@ -242,9 +242,6 @@ gst_flacdec_loop (GstElement *element)
FLAC__stream_decoder_process_metadata (flacdec->decoder); FLAC__stream_decoder_process_metadata (flacdec->decoder);
} }
do { FLAC__stream_decoder_process_one_frame (flacdec->decoder);
FLAC__stream_decoder_process_one_frame (flacdec->decoder);
}
while (!GST_ELEMENT_IS_COTHREAD_STOPPING (element));
} }

View file

@ -640,26 +640,23 @@ gst_ladspa_loop (GstElement *element)
LADSPA_Descriptor *desc; LADSPA_Descriptor *desc;
desc = ladspa->descriptor; desc = ladspa->descriptor;
do { printf("looping something\n");
printf("looping something\n");
// first get all the necessary data from the input ports // first get all the necessary data from the input ports
for (i=0;i<oclass->numsinkpads;i++){ for (i=0;i<oclass->numsinkpads;i++){
ladspa->buffers[i] = gst_pad_pull(ladspa->sinkpads[i]); ladspa->buffers[i] = gst_pad_pull(ladspa->sinkpads[i]);
printf("pulling buffer %d\n", i); printf("pulling buffer %d\n", i);
} }
for (i=0;i<oclass->numsinkpads;i++) { for (i=0;i<oclass->numsinkpads;i++) {
// desc->connect_port(ladspa->handle,i,&(ladspa->controls[i])); // desc->connect_port(ladspa->handle,i,&(ladspa->controls[i]));
} }
for (i=0;i<oclass->numsrcpads && i<oclass->numsinkpads;i++){ for (i=0;i<oclass->numsrcpads && i<oclass->numsinkpads;i++){
printf("pushing buffer %d\n", i); printf("pushing buffer %d\n", i);
gst_pad_push (ladspa->srcpads[i], ladspa->buffers[i]); gst_pad_push (ladspa->srcpads[i], ladspa->buffers[i]);
ladspa->buffers[i] = NULL; ladspa->buffers[i] = NULL;
} }
} while (!GST_ELEMENT_IS_COTHREAD_STOPPING (element));
} }
static void static void

View file

@ -407,9 +407,8 @@ gst_mikmod_loop (GstElement *element)
do { do {
if ( Player_Active() ) if ( Player_Active() )
drv_gst.Update(); drv_gst.Update();
if (GST_ELEMENT_IS_COTHREAD_STOPPING (element)) gst_element_yield (element);
cothread_switch(cothread_current_main());
} }
while ( 1 ); while ( 1 );
} }