Mercurial > pt1
comparison recpt1/recpt1.c @ 88:59065b569eec
improve stability on changing channel
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Wed, 27 Jan 2010 14:36:47 +0900 |
parents | 0b00d22b0d1c |
children | d74bcf2d255d |
comparison
equal
deleted
inserted
replaced
87:0b00d22b0d1c | 88:59065b569eec |
---|---|
94 // fprintf(stderr, "ch=%d time=%d extend=%d\n", ch, recsec, time_to_add); | 94 // fprintf(stderr, "ch=%d time=%d extend=%d\n", ch, recsec, time_to_add); |
95 | 95 |
96 if(ch && tdata->ch != ch) { | 96 if(ch && tdata->ch != ch) { |
97 /* stop stream */ | 97 /* stop stream */ |
98 ioctl(tdata->tfd, STOP_REC, 0); | 98 ioctl(tdata->tfd, STOP_REC, 0); |
99 | |
100 /* flush remainder? */ | |
101 | |
102 #if 0 | 99 #if 0 |
103 /* re-initialize decoder */ | 100 /* re-initialize decoder */ |
104 if(tdata->decoder) { | 101 if(tdata->decoder) { |
105 // b25_finish(tdata->decoder); | 102 // b25_finish(tdata->decoder); |
106 b25_shutdown(tdata->decoder); | 103 b25_shutdown(tdata->decoder); |
112 } | 109 } |
113 #endif | 110 #endif |
114 /* tune to new channel */ | 111 /* tune to new channel */ |
115 if(close_tuner(tdata) != 0) | 112 if(close_tuner(tdata) != 0) |
116 return NULL; | 113 return NULL; |
114 | |
115 /* wait for remainder */ | |
116 while(tdata->queue->num_used > 0) { | |
117 usleep(10000); | |
118 } | |
119 | |
117 tune(channel, tdata, NULL); | 120 tune(channel, tdata, NULL); |
118 | 121 |
119 /* restart recording */ | 122 /* restart recording */ |
120 if(ioctl(tdata->tfd, START_REC, 0) < 0) { | 123 if(ioctl(tdata->tfd, START_REC, 0) < 0) { |
121 fprintf(stderr, "Tuner cannot start recording\n"); | 124 fprintf(stderr, "Tuner cannot start recording\n"); |
1035 if(f_exit) | 1038 if(f_exit) |
1036 break; | 1039 break; |
1037 | 1040 |
1038 time(&cur_time); | 1041 time(&cur_time); |
1039 bufptr = malloc(sizeof(BUFSZ)); | 1042 bufptr = malloc(sizeof(BUFSZ)); |
1043 if(!bufptr) { | |
1044 f_exit = TRUE; | |
1045 break; | |
1046 } | |
1040 bufptr->size = read(tdata.tfd, bufptr->buffer, MAX_READ_SIZE); | 1047 bufptr->size = read(tdata.tfd, bufptr->buffer, MAX_READ_SIZE); |
1041 if(bufptr->size <= 0) { | 1048 if(bufptr->size <= 0) { |
1042 if((cur_time - tdata.start_time) >= tdata.recsec && !tdata.indefinite) { | 1049 if((cur_time - tdata.start_time) >= tdata.recsec && !tdata.indefinite) { |
1043 f_exit = TRUE; | 1050 f_exit = TRUE; |
1044 enqueue(p_queue, NULL); | 1051 enqueue(p_queue, NULL); |
1055 if((cur_time - tdata.start_time) >= tdata.recsec && !tdata.indefinite) { | 1062 if((cur_time - tdata.start_time) >= tdata.recsec && !tdata.indefinite) { |
1056 ioctl(tdata.tfd, STOP_REC, 0); | 1063 ioctl(tdata.tfd, STOP_REC, 0); |
1057 /* read remaining data */ | 1064 /* read remaining data */ |
1058 while(1) { | 1065 while(1) { |
1059 bufptr = malloc(sizeof(BUFSZ)); | 1066 bufptr = malloc(sizeof(BUFSZ)); |
1067 if(!bufptr) { | |
1068 f_exit = TRUE; | |
1069 break; | |
1070 } | |
1060 bufptr->size = read(tdata.tfd, bufptr->buffer, MAX_READ_SIZE); | 1071 bufptr->size = read(tdata.tfd, bufptr->buffer, MAX_READ_SIZE); |
1061 if(bufptr->size <= 0) { | 1072 if(bufptr->size <= 0) { |
1062 f_exit = TRUE; | 1073 f_exit = TRUE; |
1063 enqueue(p_queue, NULL); | 1074 enqueue(p_queue, NULL); |
1064 break; | 1075 break; |