예제 #1
0
static int write_audio_frame (struct ALL_DATA *all_data)
{
	struct paRecordData *pdata = all_data->pdata;
	struct GLOBAL *global = all_data->global;
	struct VideoFormatData *videoF = all_data->videoF;
	//struct GWIDGET *gwidget = all_data->gwidget;

	int ret =0;

	switch (global->VidFormat)
	{
		case AVI_FORMAT:
			ret = compress_audio_frame(all_data);
			break;

		case WEBM_FORMAT:
		case MKV_FORMAT:
			__LOCK_MUTEX( __AMUTEX ); //why do we need this ???
				/*set pts*/
				videoF->apts = pdata->audio_buff[pdata->br_ind][pdata->r_ind].time_stamp;
				/*write audio chunk*/
				ret = compress_audio_frame(all_data);
			__UNLOCK_MUTEX( __AMUTEX );
			break;

		default:

			break;
	}
	return (ret);
}
예제 #2
0
static int write_audio_frame (struct ALL_DATA *all_data)
{
	struct paRecordData *pdata = all_data->pdata;
	struct GLOBAL *global = all_data->global;
	struct VideoFormatData *videoF = all_data->videoF;
	struct GWIDGET *gwidget = all_data->gwidget;
	
	int ret =0;
	__THREAD_TYPE press_butt_thread;
	
	switch (global->VidFormat)
	{
		case AVI_FORMAT:
			if(!(global->VidButtPress)) //if this is set AVI reached it's limit size
				ret = compress_audio_frame(all_data);
		
			if (ret) 
			{	
				if (AVI_getErrno () == AVI_ERR_SIZELIM) 
				{
					if (!(global->VidButtPress))
					{
						global->VidButtPress = TRUE;

						/*avi file limit reached - must end capture close file and start new one*/
						if( __THREAD_CREATE(&press_butt_thread, split_avi, all_data))  //should be created detachable
						{
							/*thread failed to start - stop video capture   */
							/*can't restart since we need IO thread to stop */
							g_printerr("split avi: thread creation failed\n");
							
							printf("stoping video capture\n");
							if(!(global->no_display))
                            {
							    gdk_threads_enter();
							    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(gwidget->CapVidButt), FALSE);
							    gdk_flush();
							    gdk_threads_leave();
							}
							else
							    capture_vid(NULL, all_data);
						}
					
						//split_avi(all_data);/*blocking call*/
						g_print("AVI file size limit reached - restarted capture on new file\n");
					}
				} 
				else 
				{
					g_printerr ("write error on avi out \n");
				}
					
			}
			break;
		case MKV_FORMAT:
			__LOCK_MUTEX( __AMUTEX ); //why do we need this ???
				/*set pts*/
				videoF->apts = pdata->audio_buff[pdata->br_ind][pdata->r_ind].time_stamp;
				/*write audio chunk*/
				ret = compress_audio_frame(all_data);
			__UNLOCK_MUTEX( __AMUTEX );
			break;
			
		default:
			
			break;
	}
	return (0);
}