Lines Matching refs: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;
115 dma->SG_length = dma_map_sg(&itv->pdev->dev, dma->SGlist,
138 ivtv_udma_sync_for_device(itv);
143 int ivtv_yuv_filter_check(struct ivtv *itv)
157 static void ivtv_yuv_filter(struct ivtv *itv, int h_filter, int v_filter_1, int v_filter_2)
217 static void ivtv_yuv_handle_horizontal(struct ivtv *itv, struct yuv_frame_info *f)
219 struct yuv_playback_info *yi = &itv->yuv_info;
374 ivtv_yuv_filter(itv, h_filter, -1, -1);
379 static void ivtv_yuv_handle_vertical(struct ivtv *itv, struct yuv_frame_info *f)
381 struct yuv_playback_info *yi = &itv->yuv_info;
646 ivtv_yuv_filter(itv, -1, v_filter_1, -1);
652 ivtv_yuv_filter(itv, -1, -1, v_filter_2);
658 static u32 ivtv_yuv_window_setup(struct ivtv *itv, struct yuv_frame_info *f)
660 struct yuv_frame_info *of = &itv->yuv_info.old_frame_info;
737 if (itv->yuv_info.track_osd) {
739 f->dst_x += itv->yuv_info.osd_x_offset;
740 f->dst_y += itv->yuv_info.osd_y_offset;
803 void ivtv_yuv_work_handler(struct ivtv *itv)
805 struct yuv_playback_info *yi = &itv->yuv_info;
828 if (!(yuv_update = ivtv_yuv_window_setup(itv, &f)))
837 ivtv_yuv_handle_horizontal(itv, &f);
840 ivtv_yuv_handle_vertical(itv, &f);
845 static void ivtv_yuv_init(struct ivtv *itv)
847 struct yuv_playback_info *yi = &itv->yuv_info;
906 if (!itv->osd_info) {
929 yi->blanking_dmaptr = dma_map_single(&itv->pdev->dev,
940 set_bit(IVTV_F_I_DECODING_YUV, &itv->i_flags);
945 static void ivtv_yuv_next_free(struct ivtv *itv)
948 struct yuv_playback_info *yi = &itv->yuv_info;
951 ivtv_yuv_init(itv);
968 static void ivtv_yuv_setup_frame(struct ivtv *itv, struct ivtv_dma_frame *args)
970 struct yuv_playback_info *yi = &itv->yuv_info;
1061 void ivtv_yuv_frame_complete(struct ivtv *itv)
1063 atomic_set(&itv->yuv_info.next_fill_frame,
1064 (itv->yuv_info.draw_frame + 1) % IVTV_YUV_BUFFERS);
1067 static int ivtv_yuv_udma_frame(struct ivtv *itv, struct ivtv_dma_frame *args)
1073 mutex_lock(&itv->udma.lock);
1075 if ((rc = ivtv_yuv_prep_user_dma(itv, &itv->udma, args)) != 0) {
1076 mutex_unlock(&itv->udma.lock);
1080 ivtv_udma_prepare(itv);
1081 prepare_to_wait(&itv->dma_waitq, &wait, TASK_INTERRUPTIBLE);
1084 while (test_bit(IVTV_F_I_UDMA_PENDING, &itv->i_flags) ||
1085 test_bit(IVTV_F_I_UDMA, &itv->i_flags)) {
1089 if (got_sig && test_and_clear_bit(IVTV_F_I_UDMA_PENDING, &itv->i_flags))
1094 finish_wait(&itv->dma_waitq, &wait);
1097 ivtv_udma_unmap(itv);
1101 mutex_unlock(&itv->udma.lock);
1105 ivtv_yuv_frame_complete(itv);
1107 mutex_unlock(&itv->udma.lock);
1112 void ivtv_yuv_setup_stream_frame(struct ivtv *itv)
1114 struct yuv_playback_info *yi = &itv->yuv_info;
1117 ivtv_yuv_next_free(itv);
1131 ivtv_yuv_setup_frame(itv, &dma_args);
1133 if (!itv->dma_data_req_offset)
1134 itv->dma_data_req_offset = yuv_offset[yi->draw_frame];
1138 int ivtv_yuv_udma_stream_frame(struct ivtv *itv, void __user *src)
1140 struct yuv_playback_info *yi = &itv->yuv_info;
1144 ivtv_yuv_setup_stream_frame(itv);
1152 mutex_unlock(&itv->serialize_lock);
1153 res = ivtv_yuv_udma_frame(itv, &dma_args);
1154 mutex_lock(&itv->serialize_lock);
1159 int ivtv_yuv_prep_frame(struct ivtv *itv, struct ivtv_dma_frame *args)
1164 ivtv_yuv_next_free(itv);
1165 ivtv_yuv_setup_frame(itv, args);
1169 mutex_unlock(&itv->serialize_lock);
1170 res = ivtv_yuv_udma_frame(itv, args);
1171 mutex_lock(&itv->serialize_lock);
1175 void ivtv_yuv_close(struct ivtv *itv)
1177 struct yuv_playback_info *yi = &itv->yuv_info;
1181 mutex_unlock(&itv->serialize_lock);
1182 ivtv_waitq(&itv->vsync_waitq);
1183 mutex_lock(&itv->serialize_lock);
1263 ivtv_yuv_filter(itv, h_filter, v_filter_1, v_filter_2);
1275 dma_unmap_single(&itv->pdev->dev, yi->blanking_dmaptr,
1286 clear_bit(IVTV_F_I_DECODING_YUV, &itv->i_flags);