浏览代码

update carback for luyuan

luyuan_t440 3 年之前
父节点
当前提交
91c35a1eca

+ 10 - 3
linux/drivers/media/platform/arkmicro/ark1668e_vin.c

@@ -959,7 +959,8 @@ int ark_vin_display_int_handler(void)
 			{
 				frame_id = vin->dvr_dev->frame_finish[i];
 				vin->dvr_dev->scale_in_yphyaddr = vin->dvr_dev->framebuf_phyaddr[frame_id];
-				queue_work(vin->dvr_dev->scale_queue, &vin->dvr_dev->scale_work);
+				if(vin->dvr_dev->is_odd)
+					queue_work(vin->dvr_dev->scale_queue, &vin->dvr_dev->scale_work);
 				if (vin->dvr_dev->framebuf_status[frame_id] == FRAMEBUF_STATUS_BUSY) {
 					vin->dvr_dev->framebuf_status[frame_id] = FRAMEBUF_STATUS_FREE;
 				} else {
@@ -1070,6 +1071,13 @@ static irqreturn_t ark_vin_int_handler(int irq, void *dev_id)
 	//printk(KERN_ALERT "ark_vin_int_handler--intr_stat=0x%0x\n",intr_stat);
 	
 	if (intr_stat & (FIELD_INTERRUPT | FRAME_INTERRUPT_INTERRUPT)) {
+
+		if(intr_stat & (FIELD_INTERRUPT)){
+			dvr_dev->is_odd = 1;
+		}else{
+			dvr_dev->is_odd = 0;
+		}
+
 		if(vin->stream_flag){
 			spin_lock(&vin->ark_queue_lock);
 			if (vin->cur_frm) {
@@ -1545,7 +1553,6 @@ static int vin_async_complete(struct v4l2_async_notifier *notifier)
 		else
 			ark_vin->dvr_dev->buffer_size = ITU656_FRAME_SIZE*ITU656_FRAME_NUM;
 	}
-	
 	ark_vin->dvr_dev->scale_buffer_size = ark_vin->dvr_dev->scale_alloc_width*ark_vin->dvr_dev->scale_alloc_height*2*ark_vin->dvr_dev->scale_framebuf_num;
 
 	vin_alloc_buf(support_max_resolution);
@@ -1600,7 +1607,6 @@ static int vin_async_complete(struct v4l2_async_notifier *notifier)
 			 "video_register_device failed: %d\n", ret);
 		return ret;
 	}
-	
 	return 0;
 }
 
@@ -1627,6 +1633,7 @@ static int vin_driver_init(struct device *dev)
 	vin->dvr_dev->signal_flag = 0;
 	vin->dvr_dev->first_show_flag = 1;
 	vin->dvr_dev->system = NTSC;
+	vin->dvr_dev->is_odd = 0;
 	vin->dvr_dev->cur_buffer = 0;
 	vin->dvr_dev->carback_signal = 0;
 	vin->dvr_dev->frame_finish_count = 0;

+ 2 - 2
linux/drivers/soc/arkmicro/carback/ark1668e_carback.c

@@ -53,6 +53,7 @@ int track_switch_id = 0;
 int first_draw_track = 1;
 
 #endif
+
 //#define TRACK_TEST
 
 static void carback_filter_timer_irq(struct timer_list *t)
@@ -827,8 +828,7 @@ static int  ark_carback_probe(struct platform_device *pdev)
 				printk(KERN_ALERT "%s %d: ,alloc track display buffer failed.\n",__FUNCTION__, __LINE__);  
 			} else {   
 				timer_setup(&carback->context.track_timer, track_timer_handler, 0);
-
-				
+				
 				for(i = 0; i < carback->context.buffer_num; i++){
 					carback->context.tdisplay_virtaddr[i] = carback->context.track_display_virtaddr + carback->context.screen_width * carback->context.screen_height * 4*i;
 					carback->context.tdisplay_phyaddr[i] = carback->context.track_display_phyaddr + carback->context.screen_width * carback->context.screen_height * 4*i;

+ 7 - 4
linux/drivers/soc/arkmicro/carback/ark_track.c

@@ -1690,6 +1690,7 @@ unsigned int track_paint_fill(void *dest, unsigned int width, unsigned int heigh
 	if( !g_carback_context->carback_signal ){
 		if(last_signal_id != p->disp_signal_id)
 			memset(dest,0,g_carback_context->track_display_size);
+		ark_track_no_signal_handle();
 		if(ph->signal_total)    
 			subjoin_signal_pic(dest);
 		if(ph->append2_total)  
@@ -1714,13 +1715,15 @@ unsigned int track_paint_fill(void *dest, unsigned int width, unsigned int heigh
 		}
 	}
 
-	last_track_id = p->disp_track_id;
-	last_car_id   = p->disp_car_id;
-	last_radar_id = p->disp_radar_id;
+	if(g_carback_context->layer_status){
+		last_track_id = p->disp_track_id;
+		last_car_id   = p->disp_car_id;
+		last_radar_id = p->disp_radar_id;
+		last_track2_id= p->disp_track2_id; 
+	}
 	last_signal_id = p->disp_signal_id;
 	last_append1_id = p->disp_append1_id;
 	last_append2_id = p->disp_append2_id;
-	last_track2_id= p->disp_track2_id; 
  
 	return g_carback_context->track_display_size; 
 }

+ 1 - 0
linux/drivers/soc/arkmicro/carback/ark_track.h

@@ -403,5 +403,6 @@ extern int set_disp_append1_id(unsigned int image_id);
 extern int set_disp_append2_id(unsigned int image_id);
 extern int set_disp_track2_id(unsigned int image_id);
 extern int set_disp_mradar_id(unsigned char *pimage_id);
+extern int ark_track_no_signal_handle(void);
 
 #endif