diff -r 69c7080681bf -r 4ed5253bb6ba gst_plugins_symbian/gst/devsound/gstdevsoundsrc.c --- a/gst_plugins_symbian/gst/devsound/gstdevsoundsrc.c Fri Aug 06 16:36:50 2010 -0500 +++ b/gst_plugins_symbian/gst/devsound/gstdevsoundsrc.c Tue Aug 24 03:01:45 2010 -0500 @@ -129,6 +129,7 @@ static gint gst_devsound_src_get_rate(gint rate); +static void post_symbian_error ( GstBaseSrc* element, int symbian_error ); typedef struct _GstCustomIfaceUpdate GstCustomIfaceUpdate; @@ -398,13 +399,12 @@ //gst_debug_log(devsound_debug, GST_LEVEL_LOG, "", "", 0, (GObject *) devsoundsrc, "StartDevSoundThread ",NULL); int ret = open_devsound(&(devsoundsrc->handle)); - if( 0 != ret ) + if( KErrNone != ret ) { pthread_mutex_lock(&(create_mutex1)); return_error = ret; pthread_cond_signal(&(create_condition1)); - pthread_mutex_unlock(&(create_mutex1)); - //return_error = ret; + pthread_mutex_unlock(&(create_mutex1)); pthread_exit(NULL); } @@ -437,10 +437,10 @@ { gst_update_devsound_speech_bitrate(devsoundsrc); ret = initialize_devsound(devsoundsrc); - if( 0 == ret ) + if( KErrNone == ret ) { ret = recordinit(devsoundsrc->handle); - if( 0 == ret ) + if( KErrNone == ret ) initproperties(devsoundsrc); } @@ -730,7 +730,7 @@ consumer_thread_state = CONSUMER_THREAD_INITIALIZING; cmd = OPEN; - return_error = 0; + return_error = KErrNone; //gst_debug_log(devsound_debug, GST_LEVEL_LOG, "", "", 0, (GObject *) src, "Before Thread Create ",NULL); pthread_create(&ds_thread, NULL, StartDevSoundThread, (void *)src); //gst_debug_log(devsound_debug, GST_LEVEL_LOG, "", "", 0, (GObject *) src, "After Thread Create ",NULL); @@ -744,7 +744,9 @@ } //gst_debug_log(devsound_debug, GST_LEVEL_LOG, "", "", 0, (GObject *) src, "AFter Mutex Wait in START ",NULL); //gst_debug_log(devsound_debug, GST_LEVEL_LOG, "", "", 0, (GObject *) src, "gst_devsound_src_start EXIT ",NULL); - return ret; + if ( return_error ) + post_symbian_error( bsrc,return_error ); + return ret; /* ERRORS */ } @@ -754,7 +756,6 @@ GstDevsoundSrc *src= GST_DEVSOUND_SRC(bsrc); //gst_debug_log(devsound_debug, GST_LEVEL_LOG, "", "", 0, (GObject *) src, "gst_devsound_src_stop ENTER "); cmd = CLOSE; - pthread_mutex_lock(&(create_mutex1)); pthread_cond_signal(&(create_condition1)); pthread_mutex_unlock(&(create_mutex1)); @@ -822,14 +823,14 @@ { GstDevsoundSrc *dsrc= GST_DEVSOUND_SRC(src); int bufferpos=0; - int ret = 0; + int ret = KErrNone; if(!g_queue_get_length(dataqueue) && (dsrc->eosreceived == TRUE)) { pthread_mutex_lock(&(create_mutex1)); pthread_cond_signal(&(create_condition1)); pthread_mutex_unlock(&(create_mutex1)); - + post_symbian_error( src,KErrCancel ); return GST_FLOW_UNEXPECTED; } @@ -838,7 +839,12 @@ //gst_debug_log(devsound_debug, GST_LEVEL_LOG, "", "", 0, (GObject *) dsrc, "Before Buffer Alloc in CREATE ",NULL); *buf = gst_buffer_try_new_and_alloc(size); //gst_debug_log(devsound_debug, GST_LEVEL_LOG, "", "", 0, (GObject *) dsrc, "AFter Buffer Alloc in CREATE ",NULL); - + if(*buf == NULL) + { + post_symbian_error( src,KErrNoMemory ); + return GST_FLOW_UNEXPECTED; + } + while (size > 0) { if (dataleft >= size) @@ -883,12 +889,13 @@ //gst_debug_log(devsound_debug, GST_LEVEL_LOG, "", "", 0, (GObject *) dsrc, "Before WAIT in CREATE ",NULL); if(dsrc->eosreceived == TRUE) { + post_symbian_error( src,KErrCancel ); return GST_FLOW_UNEXPECTED; } else { cmd = RECORDING; - return_error = 0; + return_error = KErrNone; pthread_mutex_lock(&(create_mutex1)); pthread_cond_signal(&(create_condition1)); pthread_mutex_unlock(&(create_mutex1)); @@ -900,19 +907,10 @@ } //gst_debug_log(devsound_debug, GST_LEVEL_LOG, "", "", 0, (GObject *) dsrc, "AFTER WAIT in CREATE ",NULL); } - if( KErrInUse == ret || KErrDied == ret || KErrAccessDenied == ret ) - { - // post error as pre-emption - GST_ELEMENT_ERROR (src, RESOURCE, BUSY, - (("Pre-emption error.")), - ("streaming paused because higher priority app requested resource, Err(%d)", ret)); - + if( ret ) + { + post_symbian_error( src,ret ); return GST_FLOW_UNEXPECTED; - } - else if( KErrNone != ret ) - { - // no need to post error as base src will post error. - return GST_FLOW_ERROR; } //gst_debug_log(devsound_debug, GST_LEVEL_LOG, "", "", 0, (GObject *) dsrc, "Before POP in CREATE ",NULL); GST_OBJECT_LOCK(dsrc); @@ -921,7 +919,8 @@ if(!popBuffer ) { - return GST_FLOW_UNEXPECTED; + post_symbian_error( src,KErrNoMemory ); + return GST_FLOW_UNEXPECTED; } if(dsrc->firstTimeInit != kPlayed) { @@ -990,7 +989,7 @@ if(cmd == PAUSE) { cmd = RESUME; - return_error = 0; + return_error = KErrNone; pthread_mutex_lock(&create_mutex1); pthread_cond_signal(&create_condition1); pthread_mutex_unlock(&create_mutex1); @@ -998,7 +997,10 @@ pthread_mutex_lock(&create_mutex1); pthread_cond_wait(&create_condition1, &create_mutex1); if( return_error ) + { + post_symbian_error( GST_BASE_SRC(element),return_error ); ret = GST_STATE_CHANGE_FAILURE; + } pthread_mutex_unlock(&create_mutex1); } break; @@ -1014,7 +1016,7 @@ case GST_STATE_CHANGE_PLAYING_TO_PAUSED: cmd = PAUSE; - return_error = 0; + return_error = KErrNone; pthread_mutex_lock(&create_mutex1); pthread_cond_signal(&create_condition1); pthread_mutex_unlock(&create_mutex1); @@ -1022,7 +1024,10 @@ pthread_mutex_lock(&create_mutex1); pthread_cond_wait(&create_condition1, &create_mutex1); if( return_error ) - ret = GST_STATE_CHANGE_FAILURE; + { + post_symbian_error( GST_BASE_SRC(element),return_error ); + ret = GST_STATE_CHANGE_FAILURE; + } pthread_mutex_unlock(&create_mutex1); break; default: @@ -1302,7 +1307,7 @@ //reset_devsound(sink->handle); src->eosreceived = TRUE; cmd = STOP; - return_error = 0; + return_error = KErrNone; pthread_mutex_lock(&create_mutex1); pthread_cond_signal(&create_condition1); pthread_mutex_unlock(&create_mutex1); @@ -1328,4 +1333,94 @@ return retValue; } - + +static void +post_symbian_error ( GstBaseSrc* element, int symbian_error ) +{ + switch (symbian_error) + { + + case KErrNone: + break; + case KErrNotFound: + GST_ELEMENT_ERROR (element, RESOURCE, NOT_FOUND, + (("resource not found error.")), + ("streaming paused because resource not found, Err(%d)", symbian_error)); + break; + case KErrCancel: + GST_ELEMENT_ERROR (element, RESOURCE, CLOSE, + (("resource request canceled.")), + ("streaming paused because resource request canceled, Err(%d)", symbian_error)); + break; + case KErrNoMemory: + GST_ELEMENT_ERROR (element, RESOURCE, NO_SPACE_LEFT, + (("Error out of memory")), + ("streaming paused because of no memory, Err(%d)", symbian_error)); + break; + case KErrNotSupported: + GST_ELEMENT_ERROR (element, RESOURCE, READ, + (("resource not supported.")), + ("streaming paused because resource not supported, Err(%d)", symbian_error)); + break; + case KErrNotReady: + GST_ELEMENT_ERROR (element, RESOURCE, TOO_LAZY, + (("resource is not ready for request.")), + ("streaming paused because resource is not ready, Err(%d)", symbian_error)); + break; + case KErrPermissionDenied: + GST_ELEMENT_ERROR (element, RESOURCE, READ, + (("Permission Denied.")), + ("streaming paused because permission denied, Err(%d)", symbian_error)); + break; + case KErrTimedOut: + GST_ELEMENT_ERROR (element, RESOURCE, TOO_LAZY, + (("Timed Out.")), + ("streaming paused because timed out, Err(%d)", symbian_error)); + break; + case KErrHardwareNotAvailable: + GST_ELEMENT_ERROR (element, RESOURCE, NOT_FOUND, + (("Hardware Not Available.")), + ("streaming paused because hardware not available, Err(%d)", symbian_error)); + break; + case KErrCorrupt: + GST_ELEMENT_ERROR (element, RESOURCE, FAILED, + (("Corrupted data.")), + ("streaming paused because of corrupted data, Err(%d)", symbian_error)); + break; + case KErrUnderflow: + GST_ELEMENT_ERROR (element, STREAM, FAILED, + (("Under flow.")), + ("streaming paused because of under flow, Err(%d)", symbian_error)); + break; + case KErrOverflow: + GST_ELEMENT_ERROR (element, STREAM, FAILED, + (("Over flow.")), + ("streaming paused because of over flow, Err(%d)", symbian_error)); + break; + + case KErrInUse: + GST_ELEMENT_ERROR (element, RESOURCE, BUSY, + (("Resource In Use.")), + ("streaming paused because resource in use, Err(%d)", symbian_error)); + break; + + case KErrDied: + GST_ELEMENT_ERROR (element, RESOURCE, BUSY, + (("Error Resource Died.")), + ("streaming paused because resource died., Err(%d)", symbian_error)); + break; + + case KErrAccessDenied: + GST_ELEMENT_ERROR (element, RESOURCE, BUSY, + (("Resource Access Denied.")), + ("streaming paused because resource access denied, Err(%d)", symbian_error)); + break; + + default: + GST_ELEMENT_ERROR (element, STREAM, FAILED, + (("internal data flow error.")), + ("streaming paused because of internal data flow error., Err(%d)", symbian_error)); + break; + } +} +