static gboolean gst_gl_stereo_mix_make_output (GstGLStereoMix * mix) { GList *walk; gboolean res = FALSE; GstElement *element = GST_ELEMENT (mix); gboolean missing_buffer = FALSE; GST_LOG_OBJECT (mix, "Processing buffers"); GST_OBJECT_LOCK (mix); walk = element->sinkpads; while (walk) { GstVideoAggregatorPad *vaggpad = walk->data; GstGLStereoMixPad *pad = walk->data; GstBuffer *buffer = gst_video_aggregator_pad_get_current_buffer (vaggpad); GST_LOG_OBJECT (mix, "Checking pad %" GST_PTR_FORMAT, vaggpad); if (buffer != NULL) { pad->current_buffer = buffer; GST_DEBUG_OBJECT (pad, "Got buffer %" GST_PTR_FORMAT, pad->current_buffer); } else { GST_LOG_OBJECT (mix, "No buffer on pad %" GST_PTR_FORMAT, vaggpad); pad->current_buffer = NULL; missing_buffer = TRUE; } walk = g_list_next (walk); } if (missing_buffer) { /* We're still waiting for a buffer to turn up on at least one input */ GST_WARNING_OBJECT (mix, "Not generating output - need more input buffers"); res = TRUE; goto out; } /* Copy GL memory from each input frame to the output */ if (!gst_gl_stereo_mix_process_frames (mix)) { GST_LOG_OBJECT (mix, "Failed to process frames to output"); goto out; } if (mix->primary_out == NULL) goto out; res = TRUE; out: GST_OBJECT_UNLOCK (mix); return res; }
gboolean gst_gl_stereo_mix_make_output (GstGLStereoMix * mix) { guint i; GList *walk; gboolean res = FALSE; guint array_index = 0; GstElement *element = GST_ELEMENT (mix); gboolean missing_buffer = FALSE; GST_LOG_OBJECT (mix, "Processing buffers"); GST_OBJECT_LOCK (mix); walk = element->sinkpads; i = mix->frames->len; g_ptr_array_set_size (mix->frames, element->numsinkpads); for (; i < element->numsinkpads; i++) mix->frames->pdata[i] = g_slice_new0 (GstGLStereoMixFrameData); while (walk) { GstGLMixerPad *pad = GST_GL_MIXER_PAD (walk->data); GstVideoAggregatorPad *vaggpad = walk->data; GstGLStereoMixFrameData *frame; GST_LOG_OBJECT (mix, "Checking pad %" GST_PTR_FORMAT, vaggpad); frame = g_ptr_array_index (mix->frames, array_index); frame->base.pad = pad; frame->buf = NULL; walk = g_list_next (walk); if (vaggpad->buffer != NULL) { frame->buf = vaggpad->buffer; GST_DEBUG_OBJECT (pad, "Got buffer %" GST_PTR_FORMAT, frame->buf); } else { GST_LOG_OBJECT (mix, "No buffer on pad %" GST_PTR_FORMAT, vaggpad); missing_buffer = TRUE; } ++array_index; } if (missing_buffer) { /* We're still waiting for a buffer to turn up on at least one input */ GST_WARNING_OBJECT (mix, "Not generating output - need more input buffers"); res = TRUE; goto out; } /* Copy GL memory from each input frame to the output */ if (!gst_gl_stereo_mix_process_frames (mix, mix->frames)) { GST_LOG_OBJECT (mix, "Failed to process frames to output"); goto out; } if (mix->primary_out == NULL) goto out; res = TRUE; out: GST_OBJECT_UNLOCK (mix); return res; }