<div dir="ltr"><div class="gmail_extra"><br><br><div class="gmail_quote">2013/10/2 Sebastian Dröge <span dir="ltr"><<a href="mailto:slomo@circular-chaos.org" target="_blank">slomo@circular-chaos.org</a>></span><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">

<div><br>
</div>For your two problems, don't use the need-data/enough-data model of<br>
appsrc. Instead just start a thread (g_thread_new()) that pushes data<br>
all the time as fast as possible (or throttled if you want to limit the<br>
fps) to appsrc. appsrc will then block if too many frames are queued<br>
downstream, and you will only produce a new frame if the queues<br>
downstream are not all filled.<br></blockquote><div><br></div><div>I call push function in a native function called directly by Java code when a new preview frame is generated; the main loop is in another thread created as in the third tutorial using Posix Threads. -> pthread_create (&gst_app_thread, NULL, &app_function, data); [1]<br>

<br></div><div>Today I've investigated more and I have understood that it is not a problem with the push function but a problem with lacking deallocation of the buffer created (I have tried to comment the push function and the error remains there).<br>

<br></div><div>Below my native function where I do the push operation in the buffer; if I comment only the last instruction the error remains while if I comment also the gst_app_buffer_new I have no errors. It seems that the buffer is never freed; I have tried to free the last buffer received using g_free but it doesn't resolve the problem.<br>

<br></div><div>What could be the problem?<br></div><div><br></div><div>Thanks in advance,<br>Francesco Argese<br></div><div><br></div><div>P.S.: You have convinced me to pass to 1.2 version and today I'm working with it. :-)<br>

</div><div><br>--------------------------------------------------------------------------------------------------------------------------------------------------------------------<br>JNIEXPORT void JNICALL Java_com_cetma_singlepipeline_MainActivity_nativeSetBuffer<br>

  (JNIEnv *env, jobject thiz, jbyteArray frameData){<br><br>    CustomData *data = GET_CUSTOM_DATA (env, thiz, custom_data_field_id);<br><br>    if(data->initialized == FALSE || data->isPlaying == FALSE)<br>        return;<br>

<br>        jbyte* frameDataPtr = (*env)->GetByteArrayElements(env, frameData, NULL);<br>        jsize size = (*env)->GetArrayLength(env, frameData);<br>    <br>        if(data->bufferVideo == NULL)<br>            g_free(data->bufferVideo);<br>

<br>        data->bufferVideo = gst_app_buffer_new((guint8 *)frameDataPtr, size, g_free, NULL);<br>        gst_app_src_push_buffer(data->appsrc, data->bufferVideo);<br><br>}<br>----------------------------------------------------------------------------------------------------------------------------------------------------------------------<br>

</div></div><br>[1] <a href="http://docs.gstreamer.com/display/GstSDK/Android+tutorial+3%3A+Video" target="_blank">http://docs.gstreamer.com/display/GstSDK/Android+tutorial+3%3A+Video</a><br></div></div>