I use gst_bus_post and gst_bus_poll to transfrom application message in same pipeline,but error.

zhang007z zhang007z at gmail.com
Fri May 29 01:28:58 PDT 2015


at first I use pipeline command: 
#gst-launch-0.10  videotestsrc ! queue ! cedar_h264enc ! h264parse ! queue 
! vdpauh264dec ! vdpauvideopostprocess ! vdpausink 

I modify  gst_cedarh264enc_chain function in cedar_h264enc plugin file. 
at below this code ,My main purpose: transform mutex_lock value to
vdpauh264dec plugin by gst_bus_post function. I adopt gstreamer bus message
method for implementing my purpose. using gst_structure_new and
gst_message_new_application that  make mutex_lock value to message
structure,then  gst_bus_post function send this message to pipeline bus . 
//---------------------cedar_h264 plugin------------------------// 
        GstBus *bus=NULL; 
        GstStructure *structure=NULL; 
        GstMessage *message=NULL; 
        gboolean b_gstbuspost=FALSE; 

        bus=gst_element_get_bus(gst_pad_get_parent(pad)); 
        if(bus==NULL) 
             g_print("zhang100 gst_cedarh264enc_chaing get bus failed\n"); 
        structure = gst_structure_new
("h264hardware_mutex","MutexPoint",G_TYPE_UINT,(guint)g_h264hardware_mutex,
NULL); 
        if(structure==NULL) 
             g_print("zhang100 gst_cedarh264enc_chaing gst_structure_new
failed\n"); 
        message = gst_message_new_application (NULL, structure); 
        if(message==NULL) 
             g_print("zhang100 gst_cedarh264enc_chaing
gst_message_new_application failed\n"); 
        g_print("zhang100 gst_cedarh264enc_chain
g_h264hardware_mutex=%8x\n",(void*)g_h264hardware_mutex); 
        g_print("zhang100 gst_cedarh264enc_chain gst_bus_post message
start\n"); 
        b_gstbuspost=gst_bus_post (bus, message); 
        if(b_gstbuspost==FALSE) 
            g_print("zhang100 cedarh264enc_chain gst_bus_post failed\n"); 
        g_print("zhang007 gst_cedarh264enc_chain gst_bus_post message
end\n"); 
//-------------------------------------------------------// 
I modify  gst_vdp_h264_dec_handle_frame function in vdpauh264dec plugin
file. 
at below this code ,at second section code My main purpose: receive mutex
lock value from cedar_h264enc plugin by gst_bus_poll function. 
//----------------------vdpauh264dec plugin at below-------------------// 
        GstBus *bus=NULL; 
        guint ui_mutexpoint=0; 
        GstStructure *structure=NULL; 
        GstMessage *message=NULL; 
        gboolean b_ISpendingMessage=FALSE; 
        gboolean b_ISMyDefineMessage=FALSE; 
                
       bus=gst_element_get_bus(GST_ELEMENT(base_video_decoder)); 
       if(bus==NULL) 
                g_print("zhang007z bus=gst_element_get_bus  failed\n"); 
        g_print("zhang100 gst_vdp_h264_dec_handle_frame
bus=0x%08x\n",(void*)bus); 
        
        gst_bus_add_signal_watch (bus); 
  g_signal_connect (bus, "message", (GCallback) message_func, NULL); 
        b_ISpendingMessage=gst_bus_have_pending(bus); 
        if(b_ISpendingMessage=TRUE) 
        { 
             g_print("zhang100 gst_vdp_h264_dec_handle_frame bus YES exist
pending message\n"); 
        } 
        else 
        { 
             g_print("zhang100 gst_vdp_h264_dec_handle_frame bus NO  exist
pending message\n");	
        } 
        g_print("zhang100 gst_vdp_h264_dec_handle_frame wait message come
up\n"); 
        message=gst_bus_poll
(bus,GST_MESSAGE_APPLICATION,GST_CLOCK_TIME_NONE); 
        structure = gst_message_get_structure (message);	    
       
b_ISMyDefineMessage=gst_structure_get_uint(structure,"MutexPoint",&ui_mutexpoint); 
        g_h264hardware_mutex=(pthread_mutex_t*)ui_mutexpoint; 
        g_print("zhang100
g_h264hardware_mutex=%8x",(void*)g_h264hardware_mutex); 
        gst_message_unref (message); 
        gst_bus_remove_signal_watch (bus); 
//-------------------------------------------------------// 
execute above my pipeline command return result : 
//--------pipeline command return result at below------------------// 
root at zhang100:/home/zhang100# gst-launch-0.10  videotestsrc ! queue !
cedar_h264enc ! h264parse ! queue  ! vdpauh264dec ! vdpauvideopostprocess !
vdpausink 
zhang100 gst_cedarh264enc_class_init g_h264hardware_mutex=b6f36000 
Setting pipeline to PAUSED ... 
[VDPAU SUNXI] VE version 0x1623 opened. 
[VDPAU SUNXI] VE version 0x1623 opened. 
Pipeline is PREROLLING ... 
zhang100 gst_cedarh264_chain bus=0x018e2140 
zhang100 gst_cedarh264enc_chain g_h264hardware_mutex=0xb6f36000 
zhang100 gst_cedarh264enc_chain gst_bus_post message start 
zhang100 gst_cedarh264enc_chain gst_bus_post message end 
zhang100 gst_vdp_h264_dec_handle_frame bus=0x018e2140 
zhang100 gst_vdp_h264_dec_handle_frame bus YES exist pending message 
zhang100 gst_vdp_h264_dec_handle_frame wait message come up 
//------------------------------------------------------// 
at above returning text, returning result is always wait message to come
up.but I already have send my application message by gst_bus_post function
at cedar_h264enc plugin. why vdpauh264dec plugin don't receive this
application message by gst_bus_poll at gst_vdp_h264_dec_handle_frame
function . 

Anybody have any idea for me. thank you for spending your time to my issue.



--
View this message in context: http://gstreamer-devel.966125.n4.nabble.com/I-use-gst-bus-post-and-gst-bus-poll-to-transfrom-application-message-in-same-pipeline-but-error-tp4672048.html
Sent from the GStreamer-devel mailing list archive at Nabble.com.


More information about the gstreamer-devel mailing list