View Single Post
Posts: 61 | Thanked: 77 times | Joined on Dec 2009 @ Lancaster
#1
Hello,

I am trying to use autofocus functionality of gst/interfaces/photography.h. I manage to activate the autofocus by calling gst_photography_set_autofocus() on my camer source, however, I also want to trace the progress of autofocusing state(i.e running, success, fail, done). I created a GstBus element, added a watch to camera source and expected GstMessage "autofocus-done" in my bus_callback function. On capture of this message, I planned to check if the focusing was successfull or not, by fetching GstFocusState variable, with calling gst_focus_status_get_type().

The problem is that the "autofocus-done" message was never received. The gst_message_type_get_name function always returned string "unknown". I guess I am making a fundamental mistake somewhere as I found clear evidence of support for this feature in "photography.h" file. I was also not successful in calling gst_focus_status_get_type() function to get the focus state.

Any suggestions,

PS: I opened the same thread on Forum Nokia.
Thanks,
Klen

photogrpahy.h
Code:
...
Custom GstMessage name that will be sent to GstBus when autofocusing  is complete */
#define GST_PHOTOGRAPHY_AUTOFOCUS_DONE "autofocus-done"
...

My Code
Code:
gboolean CameraN900::initialize_pipeline(int *argc, char ***argv) 
{
	...
	pipeline = gst_pipeline_new("test-camera");
	bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline));
	gst_bus_add_watch(bus, (GstBusFunc)bus_callback, camera_src);
	...
}

gboolean CameraN900::bus_callback (GstMessage * message)
{
	const gchar *message_str;	
	
	message_str = gst_message_type_get_name(GST_MESSAGE_TYPE (message));
	printf("Message: %s\n",message_str);

	GType focusStatus= gst_focus_status_get_type();
	switch(GstFocusStatus (focusStatus)){
		case GST_PHOTOGRAPHY_FOCUS_STATUS_NONE:
			printf("NONE\n");
		case GST_PHOTOGRAPHY_FOCUS_STATUS_RUNNING:
				printf("RUNNINF\n");
		case GST_PHOTOGRAPHY_FOCUS_STATUS_FAIL:
				printf("FAILE\n");
		case GST_PHOTOGRAPHY_FOCUS_STATUS_SUCCESS:
				printf("SUCCESS\n");
			break;
		}
	return TRUE;
}

Last edited by klen; 2010-04-12 at 17:30.