コード例 #1
0
ファイル: dhry_t.cpp プロジェクト: AlainRoy/htcondor
int mips_test(int test_blocksize,
			  double max_sd_variation_ratio, 
			  double ratio_failed_test_blocks_ok)
{
	int foo,  bar;
	int	return_val = 0;
	int i, j;
	int	num_tests = 0;
	int	num_warnings = 0;
	double mean, raw_mean;
	double variance, raw_variance;
	int test[test_blocksize], raw_test[test_blocksize];
	double testblocks_sd[test_blocksize], raw_testblocks_sd[test_blocksize];
	double testblocks_mean[test_blocksize], raw_testblocks_mean[test_blocksize];

	dprintf(D_ALWAYS, 
		"SysAPI: Running mips_test.\n");
	dprintf(D_ALWAYS, 
		"\tI will test sysapi_mips (and sysapi_mips_raw) in\n");
	dprintf(D_ALWAYS, 
		"\tblocks of %d tests, and take the standard\n", test_blocksize);
	dprintf(D_ALWAYS, 
		"\tdeviation of those test blocks. If the standard\n");
	dprintf(D_ALWAYS, 
		"\tdeviation is above %2f%% of the average,\n", max_sd_variation_ratio);
	dprintf(D_ALWAYS, 
		"\tthe mips reported are erratic and the test block\n");
	dprintf(D_ALWAYS, 
		"\tis considered a failure.\n");
	dprintf(D_ALWAYS, 
		"\tI will run %d test blocks, and if more than %2f%% of those blocks\n",
		test_blocksize, ratio_failed_test_blocks_ok*100);
	dprintf(D_ALWAYS, 
		"\tfail, this entire test fails.\n");

	foo = sysapi_mips_raw();
	dprintf(D_ALWAYS, "SysAPI: Initial sysapi_mips_raw -> %d\n", foo);
	bar = sysapi_mips();
	dprintf(D_ALWAYS, "SysAPI: Initial sysapi_mips -> %d\n", bar);

	for (i=0; i<test_blocksize; i++) {
		raw_mean = 0;
		raw_variance = 0;

		for (j=0; j<test_blocksize; j++) {
			raw_test[j] = sysapi_mips_raw();

			raw_mean += raw_test[j];

			dprintf(D_ALWAYS, "SysAPI: Testblock %d, test %d: Raw mips: %d\n",
					i, j, raw_test[j]);

			if (raw_test[j] <= 0) {
				dprintf(D_ALWAYS, "SysAPI: ERROR! Raw mips (%d) is negative!\n", foo);
				return_val = 1;
			}
		}

		raw_mean /= test_blocksize;
		raw_testblocks_mean[i] = raw_mean;
		dprintf(D_ALWAYS, "SysAPI: Testblock %d, mean:   Raw mips: %.1f\n",
				i, raw_mean );

		/* Test if there were any unusually large jumps in the means of the testblocks */
		num_tests++;
		if ( delta_check( i, raw_testblocks_mean, max_sd_variation_ratio, "Raw" ) ) {
			num_warnings++;
		}

		for (j=0; j<test_blocksize; j++) {
			raw_variance += (raw_test[j] - raw_mean)*(raw_test[j] - raw_mean);
		}
		raw_variance /= test_blocksize;

		raw_testblocks_sd[i] = sqrt(raw_variance);

		dprintf(D_ALWAYS,
				"SysAPI: Standard deviation of raw testblock %d is: %d MIPS\n", i, 
				(int)raw_testblocks_sd[i]);

		num_tests++;
		if ( sd_check( i, raw_mean, raw_testblocks_sd, max_sd_variation_ratio, "Raw" ) ) {
			num_warnings++;
		}
	}

	if (((double)num_warnings/(double)num_tests) > max_sd_variation_ratio) {
		dprintf(D_ALWAYS,
				"SysAPI: ERROR! Failing because %d raw MIPS tests failed > %d (%2.2f%%).\n",
				num_warnings, (int)(max_sd_variation_ratio*test_blocksize), max_sd_variation_ratio*100);
		return_val = return_val | 1;
	}
	
	dprintf(D_ALWAYS, "\n\n");
	num_warnings = 0;

	for (i=0; i<test_blocksize; i++) {
		mean = 0;
		variance = 0;

		for (j=0; j<test_blocksize; j++) {
			test[j] = sysapi_mips_raw();

			mean += test[j];

			dprintf(D_ALWAYS, "SysAPI: Testblock %d, test %d: Cooked mips: %d\n",
					i, j, test[j]);

			if (test[j] <= 0) {
				dprintf(D_ALWAYS, "SysAPI: ERROR! Cooked mips (%d) is negative!\n", foo);
				return_val = 1;
			}
		}

		mean /= test_blocksize;
		testblocks_mean[i] = mean;
		dprintf(D_ALWAYS, "SysAPI: Testblock %d, mean  : Cooked mips: %.1f\n",
				i, mean);

		/* Test if there were any unusually large jumps in the means of the testblocks */
		num_tests++;
		if ( delta_check( i, testblocks_mean, max_sd_variation_ratio, "Cooked" ) ) {
			num_warnings++;
		}

		for (j=0; j<test_blocksize; j++) {
			variance += (test[j] - mean)*(test[j] - mean);
		}
		variance /= test_blocksize;

		testblocks_sd[i] = sqrt(variance);

		dprintf(D_ALWAYS, "SysAPI: Standard deviation of testblock %d is: %d MIPS\n", i, 
				(int)testblocks_sd[i]);

		num_tests++;
		if ( sd_check( i, mean, testblocks_sd, max_sd_variation_ratio, "Cooked" ) ) {
			num_warnings++;
		}
	}

	if (((double)num_warnings/(double)num_tests) > max_sd_variation_ratio) {
			dprintf(D_ALWAYS,
					"SysAPI: ERROR! Failing because %d cooked MIPS tests failed > %d (%2.2f%%).\n",
					num_warnings, (int)(max_sd_variation_ratio*test_blocksize), max_sd_variation_ratio*100);
			return_val = return_val | 1;
	}
	return return_val;
}
コード例 #2
0
FILE_LIST *open_file_search_by_type(int channel,int year,int month,int day,unsigned int record_type)
{
	int i,j,k;
	int flag = 0;
	int start_minute,end_minute;
	char index_file_name[MAX_PATH];
	FILE_NODE *file_node = NULL;
	FILE_LIST *file_list = NULL;
	RECORD_FILE_INDEX index;
	pthread_mutexattr_t attr;
	int disk_num;
	int temp_end=0;

	struct stat st;
	int size = 0;
	//int m,s;
        char path[MAX_PATH];
        char file_path[MAX_PATH];
        char file_full_name[MAX_PATH];
        char file_name[MAX_FILE_NAME];
        //char file_name_end[MAX_FILE_NAME];
        DIR *dir = NULL;
        struct dirent *ptr;
	char temp[12];
        //int file_start_hour,file_start_minute,file_start_second;
	//int file_end_hour,file_end_minute,file_end_second;
	int file_start_minute;


	start_minute = end_minute = 0;

	file_list = (FILE_LIST *)malloc(sizeof(FILE_LIST));
	if(file_list == NULL)
		return NULL;
	memset(file_list,0,sizeof(file_list));

	//创建互斥变量
	pthread_mutexattr_init(&attr);
	pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_FAST_NP);		//PTHREAD_MUTEX_FAST_NP PTHREAD_MUTEX_RECURSIVE_NP 递归互斥 2005.4.4 [ZHB]
	pthread_mutex_init(&file_list->mutex,&attr);
	pthread_mutexattr_destroy(&attr);

#ifdef SD_STORAGE
	disk_num = sd_check();
	if (disk_num < 0)
	{
		return NULL;
	}
	disk_num = 1;
#else
	disk_num = get_hard_disk_num();
#endif

	for(i=0; i<disk_num; i++)
	{
#ifdef SD_STORAGE
		if (!sd_get_mount_flag())
		{
			continue;
		}
#else
		if (!hd_get_mount_flag(i,0))
		{
			continue;
		}
#endif

		sprintf(path,"/record/hd%02d/%02d/ch%02d/%04d-%02d-%02d",i,0,channel,year,month,day);

		for(j=0; j<24; j++) /* 文件列表中只给出时间段(具体到播放时再根据时间段来找到相应的录像文件) */
		{
#if 1
			sprintf(index_file_name,"/record/hd%02d/%02d/ch%02d/%04d-%02d-%02d/%02d/index.db",
						i,0,channel,year,month,day,j);
			if(read_record_index_file(index_file_name,&index) == -1)
				continue ;
			sprintf(file_path,"%s/%02d",path,j);
			dir = opendir(file_path);
			if(dir == NULL)
			{
				continue;
			}

			// 分析一个小时内同一类型有多少个连续录像文件段 
			flag = 0;
			for(k=0; k<60; k++)
			{
				if((index.file_type[k] & record_type) != 0)
				{
					temp_end = k;
					if(flag == 0)
					{
						start_minute = k;
						flag = 1;
						//size = 0;
					}

					if(flag == 1 && k == 59)
					{
						flag = 0;
						end_minute = k;

						file_node = (FILE_NODE *)malloc(sizeof(FILE_NODE));
						if(file_node == NULL)
							continue;

#ifdef FILESIZE_COMPUTE
						printf("LIB: hour: %d; start_minute: %d;  end_minute: %d\n", j,start_minute, end_minute);
						size = 0;
						rewinddir(dir);
						while((ptr = readdir(dir)) != NULL)
						{
							if(strcmp(ptr->d_name,".") == 0 || strcmp(ptr->d_name,"..") == 0
								|| strcmp(ptr->d_name,"index.db") == 0) // zym 0602
							{
								continue;
							} 
							strcpy(file_name,ptr->d_name);
							memcpy(temp,&file_name[3],2);
							file_start_minute = atoi(temp);

							if(file_start_minute >= start_minute &&
								file_start_minute <= end_minute)
							{
                            	//int ret;
								//printf("LIB: file_start_minute == %d\n", file_start_minute);
								sprintf(file_full_name,"%s/%s",file_path,file_name);

								if(stat(file_full_name, &st) == 0)
								{
									size += st.st_size;
								}
							}
							//if(file_start_minute >= end_minute)
							//      break;
						}

						printf("LIB: finish: size == %d\n", size);
								file_node->size = size /1024; // size k
#endif

						sprintf(file_node->fullname,"%02d:%02d --- %02d:%02d",
									j,start_minute,j,end_minute);
						file_node->start_hour = j;
						file_node->end_hour = j;
						file_node->start_minute = start_minute;
						file_node->end_minute = end_minute;
						file_node->prev = NULL;
						file_node->next = NULL;
						add_file_node_to_list(file_list,file_node);
					}
				}
				else
				{
					if(flag == 1)
					{
						flag = 0;
						end_minute = temp_end;	//k;		//cyg 2005.4.15
						//printf("open_file_search_by_type == %d  %d\n", k, end_minute);
						file_node = (FILE_NODE *)malloc(sizeof(FILE_NODE));
						if(file_node == NULL)
							continue;
#ifdef FILESIZE_COMPUTE
						printf("LIB: hour: %d; start_minute: %d;  end_minute: %d\n", j,start_minute,end_minute);
						size = 0;
						rewinddir(dir);
						while((ptr = readdir(dir)) != NULL)
						{
							if(strcmp(ptr->d_name,".") == 0 || strcmp(ptr->d_name,"..") == 0
								|| strcmp(ptr->d_name,"index.db") == 0) // zym 0602
							{
								continue;
							}
							strcpy(file_name,ptr->d_name);
							memcpy(temp,&file_name[3],2);
							file_start_minute = atoi(temp);

							if(file_start_minute >= start_minute &&
								file_start_minute <= end_minute)
							{
								//int ret;
								//printf("LIB: file_start_minute == %d\n", file_start_minute);
								sprintf(file_full_name,"%s/%s",file_path,file_name);
								
								if(stat(file_full_name, &st) == 0)
								{
									size += st.st_size;
								}
							}
							//if(file_start_minute >= end_minute)
							//	break;
						}

						printf("LIB: finish: size == %d\n", size);
								file_node->size = size /1024; // size k
#endif

						sprintf(file_node->fullname,"%02d:%02d --- %02d:%02d",j,start_minute,j,end_minute);
						file_node->start_hour = j;
						file_node->end_hour = j;
						file_node->start_minute = start_minute;
						file_node->end_minute = end_minute;
						file_node->prev = NULL;
						file_node->next = NULL;
						add_file_node_to_list(file_list,file_node);
					}
				}
			}
		closedir(dir);
	#endif
		}
	}

	return file_list;
}
コード例 #3
0
/******************************************************************************
* 函数名称:open_file_search
* 功能描述:创建搜索文件链表,根据给定的路径,按时间查找录像文件
* 输入参数:int channel			指定通道号
*			int play_backup_files	文件类型:数据、备份文件
*			int year			指定年度	
*			int month			指定月份
*			int day				指定日期
*			int start_hour		开始时间-小时	
*			int start_minute	开始时间-分钟
*			int start_second	开始时间-秒
*			int end_hour		结束时间-小时	
*			int end_minute		结束时间-分钟
*			int end_second		结束时间-秒
* 输出参数:无
* 返 回 值:FILE_LIST * 搜索文件链表
* 修改记录: 无
* 其他说明: 无
********************************************************************************/
FILE_LIST *open_file_search(int channel, int play_backup_files, 
							int year, int month, int day, 
							int start_hour,int start_minute,int start_second,
							int end_hour,int end_minute,int end_second)
{
	int i = 0;
	int hd = 0;				//硬盘
	int disk_num = 0;
	int partition_no = 0;   //分区号: 0: <录像文件> 1: <备份文件>

	int file_start_hour,file_start_minute,file_start_second;
	int file_end_hour,file_end_minute,file_end_second;
	int play_time;
	int second_num;
	char temp[16];
	char path[MAX_PATH];
	char file_path[MAX_PATH];
	char file_name[MAX_FILE_NAME];
	char file_name1[MAX_FILE_NAME];
	char file_full_name[MAX_PATH];
	char file_name_start[MAX_FILE_NAME];
	char file_name_end[MAX_FILE_NAME];
	DIR *dir = NULL;
	FILE_NODE *file_node = NULL;
	FILE_LIST *file_list = NULL;
	FILE_INFO *file_info = NULL;
	struct dirent *ptr = NULL;
	pthread_mutexattr_t attr;

	partition_no = play_backup_files;
	if (partition_no !=0 && partition_no != 1)
	{
		partition_no = 0;
	}

#ifdef SD_STORAGE
	disk_num = sd_check();
	if (disk_num < 0)
	{
		return NULL;
	}
	disk_num = 1;
#else
	disk_num = get_hard_disk_num();
	if (disk_num <= 0)
	{
		return NULL;
	}
#endif

	sprintf(file_name_start, "%02d-%02d-%02d.tds", start_hour, start_minute, start_second);
	sprintf(file_name_end, "%02d-%02d-%02d.tds", end_hour, end_minute, end_second);

	if (strncmp(file_name_start, file_name_end, 20) > 0)
	{
		return NULL;
	}

	file_list = (FILE_LIST *)malloc(sizeof(FILE_LIST));
	if (file_list == NULL)
	{
		return NULL;
	}
	memset(file_list, 0, sizeof(file_list));

	//创建互斥变量
	pthread_mutexattr_init(&attr);
	pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_FAST_NP);	//PTHREAD_MUTEX_FAST_NP PTHREAD_MUTEX_RECURSIVE_NP 递归互斥 2005.4.4 [ZHB]
	pthread_mutex_init(&file_list->mutex, &attr);
	pthread_mutexattr_destroy(&attr);
	
	//遍历所有硬盘
	for (hd=0; hd<disk_num; hd++)
	{
#ifdef SD_STORAGE
		if (!sd_get_mount_flag())
		{
			continue;
		}
#else
		if (!hd_get_mount_flag(hd, partition_no))
		{
			continue;
		}
#endif

		memset(path, 0, MAX_PATH);
		sprintf(path, "/record/hd%02d/%02d/ch%02d/%04d-%02d-%02d", hd, partition_no, channel, year, month, day);
		for (i=start_hour; i<=end_hour; i++)
		{
			sprintf(file_path, "%s/%02d" ,path, i);
			
			//目录不存在
			dir = opendir(file_path);
			if (dir == NULL)
			{
				continue;
			}

			while ((ptr = readdir(dir)) != NULL)
			{
#if 1
				//空目录,没有录像文件
				if (strcmp(ptr->d_name, ".") == 0 
					|| strcmp(ptr->d_name, "..") == 0
					|| strcmp(ptr->d_name, "index.tds") == 0)
				{
					continue;
				}
#endif
				strcpy(file_name, ptr->d_name);
				sprintf(file_full_name, "%s/%s", file_path, file_name);

				// [zhb][add][2006-04-13]
				//sscanf(file_name, "%02d-%02d-%02d.tds", &file_start_hour, &file_start_minute, &file_start_second);
				//printf("search file1 =%s %s %s %s\n", ptr->d_name, file_full_name, file_path, file_name);
				
				//小时
				memcpy(temp, &file_name[0], 2);
				file_start_hour = atoi(temp);
				//分钟
				memcpy(temp, &file_name[3], 2);
				file_start_minute = atoi(temp);
				//秒
				memcpy(temp, &file_name[6], 2);
				file_start_second = atoi(temp);
				
				//获取文件节点信息
				file_info = mp4_record_open_file(file_full_name);
				if (file_info == NULL)
				{
					printf("mp4_record_open_file() Failed!\n");
					continue;
				}
              
				play_time = mp4_record_get_play_time(file_info) / 1000;
				mp4_record_close_file(file_info);
				if (play_time <= 0)
				{
					printf("mp4_record_get_play_time() Failed!\n");
					continue;
				}

				file_end_hour = file_start_hour + play_time/3600;
				file_end_minute = file_start_hour + (play_time%3600)/60;
				file_end_second = file_start_hour + play_time%60;

				/*
				second_num = file_start_hour*60*60 + file_start_minute*60 + file_start_second + play_time;
				//printf("search file2 =%d %d %d %d %d\n", file_start_hour, file_start_minute, file_start_second, play_time, second_num);
				file_end_hour = second_num / (60*60);
				file_end_minute = (second_num - file_end_hour*60*60) / 60;
				file_end_second = second_num - file_end_hour*60*60 - file_end_minute*60;
				
				sprintf(file_name1,"%02d-%02d-%02d.tds",file_end_hour,file_end_minute,file_end_second);
				if (strcmp(file_name1,file_name_start) < 0 
					|| strcmp(file_name, file_name_start) < 0
					|| strcmp(file_name, file_name_end) > 0)
				{
					//printf("search file4 =%s %s %s\n", file_name1, file_name_start, file_name_end);
					continue;
				}
				
				//printf("search file3 =%s %d %d %d\n", file_name1, file_end_hour, file_end_minute, file_end_second);
				*/
				
				file_node = (FILE_NODE *)malloc(sizeof(FILE_NODE));
				if (file_node == NULL)
				{
					printf("Can not allocate memory for FILE_NODE!\n");
					continue;
				}
				
				strcpy(file_node->name,file_name);
				sprintf(file_node->fullname,"%s/%s",file_path,file_name);
				file_node->prev = NULL;
				file_node->next = NULL;
				add_file_node_to_list(file_list,file_node);
			}

			closedir(dir);
		}
	}

	return file_list;
}
コード例 #4
0
FILE_LIST *open_file_search_by_type(int channel,int year,int month,int day,unsigned int record_type)
{
	int i,j,k;
	int flag = 0;
	int start_minute,end_minute;
	char index_file_name[MAX_PATH];
	FILE_NODE *file_node = NULL;
	FILE_LIST *file_list = NULL;
	RECORD_FILE_INDEX index;
	pthread_mutexattr_t attr;
	int disk_num;
	int temp_end=0;

	char file_name[MAX_PATH];
	struct stat st;
	int size = 0;
	int m,s;

	start_minute = end_minute = 0;

	file_list = (FILE_LIST *)malloc(sizeof(FILE_LIST));
	if(file_list == NULL)
		return NULL;
	memset(file_list,0,sizeof(file_list));

	//创建互斥变量
	pthread_mutexattr_init(&attr);
	pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_FAST_NP);		//PTHREAD_MUTEX_FAST_NP PTHREAD_MUTEX_RECURSIVE_NP 递归互斥 2005.4.4 [ZHB]
	pthread_mutex_init(&file_list->mutex,&attr);
	pthread_mutexattr_destroy(&attr);

#ifdef SD_STORAGE
	disk_num = sd_check();
	if (disk_num < 0)
	{
		return NULL;
	}
	disk_num = 1;
#else
	disk_num = get_hard_disk_num();
#endif

	for (i=0; i<disk_num; i++)
	{
#ifdef SD_STORAGE
		if (!sd_get_mount_flag())
		{
			continue;
		}
#else
		if (!hd_get_mount_flag(i, 0))
		{
			continue;
		}
#endif

		// 文件列表中只给出时间段(具体到播放时再根据时间段来找到相应的录像文件) 
		for (j=0; j<24; j++) 
		{
#if 1
			sprintf(index_file_name,"/record/hd%02d/%02d/ch%02d/%04d-%02d-%02d/%02d/index.db",
						i,0,channel,year,month,day,j);

			if (read_record_index_file(index_file_name,&index) == -1)
			{
				continue ;
			}

			// 分析一个小时内同一类型有多少个连续录像文件段 
			flag = 0;
			
			for (k=0; k<60; k++)
			{
				if ((index.file_type[k] & record_type) != 0)
				{
					temp_end = k;
					if (flag == 0)		// 找到第一个文件
					{
						start_minute = k;
						flag = 1;
						size = 0;
					}

					if (flag == 1 && k == 59)
					{
						flag = 0;
						end_minute = k;

						file_node = (FILE_NODE *)malloc(sizeof(FILE_NODE));
						if (file_node == NULL)
						{
							continue;
						}
						
#ifdef FILESIZE_COMPUTE
						for (m=start_minute; m<=end_minute; m++)
						{
							for (s=0; s<60; s++)
							{
								sprintf(file_name, 
									"/record/hd%02d/%02d/ch%02d/%04d-%02d-%02d/%02d/%02d-%2d-%02d.tds",i,0,channel,year,month,day,j,j,m,s);

								#if 0
								if(stat(file_name, &st) < 0)
									printf("LIB: stat error; may the file not exit \n");
								else
								#endif

								if (stat(file_name, &st) == 0)
								{
									size += st.st_size;
									break;
								}
							}
						}

						file_node->size = size /1024; // size k
						size = 0;
#endif
						sprintf(file_node->fullname,"%02d:%02d --- %02d:%02d",
									j,start_minute,j,end_minute);
						file_node->start_hour = j;
						file_node->end_hour = j;
						file_node->start_minute = start_minute;
						file_node->end_minute = end_minute;
						file_node->prev = NULL;
						file_node->next = NULL;
						add_file_node_to_list(file_list,file_node);
					}
				}
				else
				{
					if (flag == 1)
					{
						flag = 0;
						end_minute = temp_end;

						file_node = (FILE_NODE *)malloc(sizeof(FILE_NODE));
						if (file_node == NULL)
						{
							continue;
						}

#ifdef FILESIZE_COMPUTE
						for (m=start_minute; m<=end_minute; m++)
						{
							for (s=0; s<60; s++)
							{
								sprintf(file_name, "/record/hd%02d/%02d/ch%02d/%04d-%02d-%02d/%02d/%02d-%2d-%02d.tds",i,0,channel,year,month,day,j,j,m,s);

								#if 0
                                                                if(stat(file_name, &st) < 0)
                                                                        printf("LIB: stat error; may the file not exit \n");
                                                                else
								#endif

								if(stat(file_name, &st) == 0)
								{
									size += st.st_size;
									break;
								}
							}
						}

						file_node->size = size /1024; // size k
						size = 0;
#endif

						sprintf(file_node->fullname,"%02d:%02d --- %02d:%02d",j,start_minute,j,end_minute);
						file_node->start_hour = j;
						file_node->end_hour = j;
						file_node->start_minute = start_minute;
						file_node->end_minute = end_minute;
						file_node->prev = NULL;
						file_node->next = NULL;
						add_file_node_to_list(file_list,file_node);
					}
				}
			}
#endif
		}
	}

	return file_list;
}
コード例 #5
0
/******************************************************************************
* 函数名称:find_back_file_by_type
* 功能描述:搜索备份文件
* 输入参数:int channel				指定通道号
*			int year				指定年度	
*			int month				指定月份
*			int day					指定日期
*			unsigned int record_type录像类型		
* 输出参数:无
* 返 回 值:成功: 1; 失败: 0
* 修改记录: 无
* 其他说明: 无
********************************************************************************/
int find_back_file_by_type(int channel,int year,int month,int day,unsigned int record_type)
{
        int i,j;
        int ret;
        char index_file_name[MAX_FILE_NAME];
	int  disk_num;

        // 查找所有硬盘 
#ifdef SD_STORAGE
	disk_num = sd_check();
	if (disk_num < 0)
	{
		return -1;
	}
	disk_num = 1;
#else
	disk_num = get_hard_disk_num();
#endif

	for (i=0; i<disk_num; i++)
	{
#ifdef SD_STORAGE
		if (!sd_get_mount_flag())
		{
			continue;
		}
#else
		if (!hd_get_mount_flag(i,0))
		{
			continue;
		}
#endif

		for(j=0; j<24; j++)
		{
			sprintf(index_file_name,"/record/hd%02d/%02d/ch%02d/%04d-%02d-%02d/%02d/index.db", i,1,channel,year,month,day,j);
			//ret = search_record_index_file_by_type(index_file_name,record_type);
			ret = search_record_index_file_by_type_ext(index_file_name,record_type);	// Add the code by lvjh, 2008-04-29
			if (ret == 1)
			{
				return 1;
			}

#if 0
			dir = opendir(file_path);
			if(dir == NULL)
			{
				continue;
			}

			while((ptr = readdir(dir)) != NULL)
			{
				sprintf(file_full_name,"%s/%s",file_path,ptr->d_name);

				type = mp4_record_get_record_type(file_full_name);
				if (type != -1)
				{
					type &= record_type;
					if (type != 0)
						return 1;
				}
			}

        #endif
		}
	}

	return 0;
}