2014-06-10 7 views
1

gstreamer-1.0을 사용하는 간단한 응용 프로그램을 작성 중이며 파이프 라인을 통해 내 응용 프로그램에 전달 된 버퍼를 수신하고 싶습니다. 이렇게하려면 파이프 라인 끝 부분에 appsink 플러그인을 사용합니다.appsink를 사용하는 견본 샘플 신호

지금까지 모든 노력하고 있습니다,하지만 난 버퍼를받을하고자 할 때, 나는 이러한 오류

(응용 프로그램 : 31759) : 수 (주장 'G_TYPE_CHECK_INSTANCE : 입심-G 객체-CRITICAL ** : g_signal_emit_by_name를 31759) : 입심-G 객체-WARNING ** : 무효 (NULL) 클래스 포인터로 예를

예) '

(응용 프로그램 실패 여기

코드 나는 누군가가 나에게이 문제를 해결 도움이 될 수 있습니까

typedef struct _AllElements 
{ 
    GstElement *pipeline; 
    ... 
    GstElement *appsink; 

} AllElements; 

static void new_sample (AllElements *element) 
{ 
    GstSample *sample = NULL; 
    /* Retrieve the buffer */ 
    g_signal_emit_by_name (element->appsink, "pull-sample", &sample,NULL); 
    if (sample) 
    { 
      g_print ("*"); 
      gst_sample_unref (sample); 
    } 
} 

int main(int argc, char *argv[]) 
{ 
     Allelemets element; 

     ... // making and linking all the elements 

    g_object_set (G_OBJECT (element.appsink), "sync", TRUE, NULL); 
    g_object_set (element.appsink, "emit-signals", TRUE, NULL); 
    g_signal_connect (element.appsink, "new-sample", G_CALLBACK (new_sample), &element); 

      ... 

    gst_element_set_state (element.pipeline, GST_STATE_PLAYING); 

      ... 

    return 0; 
} 

을 썼다입니까? 모두에게 감사 드려요 !

답변

2

내 문제의 해결책을 찾았습니다.

난 그저 내 기능

static GstFlowReturn new_sample (GstElement *appsink, AllElements *element) 

에 대한 잘못된 서명을했고 지금은 샘플을 얻기 위해 gst_base_sink_get_last_sample(GST_BASE_SINK(appsink));를 사용합니다.