Lines Matching defs:itv

25 static int ivtv_yuv_prep_user_dma(struct ivtv *itv, struct ivtv_user_dma *dma,
30 struct yuv_playback_info *yi = &itv->yuv_info;
116 dma->SG_length = pci_map_sg(itv->pdev, dma->SGlist, dma->page_count, PCI_DMA_TODEVICE);
132 ivtv_udma_sync_for_device(itv);
137 int ivtv_yuv_filter_check(struct ivtv *itv)
151 static void ivtv_yuv_filter(struct ivtv *itv, int h_filter, int v_filter_1, int v_filter_2)
211 static void ivtv_yuv_handle_horizontal(struct ivtv *itv, struct yuv_frame_info *f)
213 struct yuv_playback_info *yi = &itv->yuv_info;
368 ivtv_yuv_filter(itv, h_filter, -1, -1);
373 static void ivtv_yuv_handle_vertical(struct ivtv *itv, struct yuv_frame_info *f)
375 struct yuv_playback_info *yi = &itv->yuv_info;
640 ivtv_yuv_filter(itv, -1, v_filter_1, -1);
646 ivtv_yuv_filter(itv, -1, -1, v_filter_2);
652 static u32 ivtv_yuv_window_setup(struct ivtv *itv, struct yuv_frame_info *f)
654 struct yuv_frame_info *of = &itv->yuv_info.old_frame_info;
731 if (itv->yuv_info.track_osd) {
733 f->dst_x += itv->yuv_info.osd_x_offset;
734 f->dst_y += itv->yuv_info.osd_y_offset;
797 void ivtv_yuv_work_handler(struct ivtv *itv)
799 struct yuv_playback_info *yi = &itv->yuv_info;
822 if (!(yuv_update = ivtv_yuv_window_setup(itv, &f)))
831 ivtv_yuv_handle_horizontal(itv, &f);
834 ivtv_yuv_handle_vertical(itv, &f);
839 static void ivtv_yuv_init(struct ivtv *itv)
841 struct yuv_playback_info *yi = &itv->yuv_info;
900 if (!itv->osd_info) {
923 yi->blanking_dmaptr = pci_map_single(itv->pdev, yi->blanking_ptr, 720*16, PCI_DMA_TODEVICE);
932 set_bit(IVTV_F_I_DECODING_YUV, &itv->i_flags);
937 static void ivtv_yuv_next_free(struct ivtv *itv)
940 struct yuv_playback_info *yi = &itv->yuv_info;
943 ivtv_yuv_init(itv);
960 static void ivtv_yuv_setup_frame(struct ivtv *itv, struct ivtv_dma_frame *args)
962 struct yuv_playback_info *yi = &itv->yuv_info;
1053 void ivtv_yuv_frame_complete(struct ivtv *itv)
1055 atomic_set(&itv->yuv_info.next_fill_frame,
1056 (itv->yuv_info.draw_frame + 1) % IVTV_YUV_BUFFERS);
1059 static int ivtv_yuv_udma_frame(struct ivtv *itv, struct ivtv_dma_frame *args)
1065 mutex_lock(&itv->udma.lock);
1067 if ((rc = ivtv_yuv_prep_user_dma(itv, &itv->udma, args)) != 0) {
1068 mutex_unlock(&itv->udma.lock);
1072 ivtv_udma_prepare(itv);
1073 prepare_to_wait(&itv->dma_waitq, &wait, TASK_INTERRUPTIBLE);
1076 while (test_bit(IVTV_F_I_UDMA_PENDING, &itv->i_flags) ||
1077 test_bit(IVTV_F_I_UDMA, &itv->i_flags)) {
1081 if (got_sig && test_and_clear_bit(IVTV_F_I_UDMA_PENDING, &itv->i_flags))
1086 finish_wait(&itv->dma_waitq, &wait);
1089 ivtv_udma_unmap(itv);
1093 mutex_unlock(&itv->udma.lock);
1097 ivtv_yuv_frame_complete(itv);
1099 mutex_unlock(&itv->udma.lock);
1104 void ivtv_yuv_setup_stream_frame(struct ivtv *itv)
1106 struct yuv_playback_info *yi = &itv->yuv_info;
1109 ivtv_yuv_next_free(itv);
1123 ivtv_yuv_setup_frame(itv, &dma_args);
1125 if (!itv->dma_data_req_offset)
1126 itv->dma_data_req_offset = yuv_offset[yi->draw_frame];
1130 int ivtv_yuv_udma_stream_frame(struct ivtv *itv, void __user *src)
1132 struct yuv_playback_info *yi = &itv->yuv_info;
1136 ivtv_yuv_setup_stream_frame(itv);
1144 mutex_unlock(&itv->serialize_lock);
1145 res = ivtv_yuv_udma_frame(itv, &dma_args);
1146 mutex_lock(&itv->serialize_lock);
1151 int ivtv_yuv_prep_frame(struct ivtv *itv, struct ivtv_dma_frame *args)
1156 ivtv_yuv_next_free(itv);
1157 ivtv_yuv_setup_frame(itv, args);
1161 mutex_unlock(&itv->serialize_lock);
1162 res = ivtv_yuv_udma_frame(itv, args);
1163 mutex_lock(&itv->serialize_lock);
1167 void ivtv_yuv_close(struct ivtv *itv)
1169 struct yuv_playback_info *yi = &itv->yuv_info;
1173 mutex_unlock(&itv->serialize_lock);
1174 ivtv_waitq(&itv->vsync_waitq);
1175 mutex_lock(&itv->serialize_lock);
1255 ivtv_yuv_filter(itv, h_filter, v_filter_1, v_filter_2);
1267 pci_unmap_single(itv->pdev, yi->blanking_dmaptr, 720*16, PCI_DMA_TODEVICE);
1277 clear_bit(IVTV_F_I_DECODING_YUV, &itv->i_flags);