77aded6ba5
Previously, all yuv data written to /dev/video48 had only basic support with no double buffering to avoid display tearing. With this patch, yuv frames written to video48 are now handled by the existing IVTV_IOC_DMA_FRAME framework. As such, the frames are hardware buffered to avoid tearing, and honour scaling mode & field order options. Unlike the proprietary IVTV_IOC_DMA_FRAME ioctl, all parameters are controlled by the V4L2 API. Due to mpeg & yuv output restrictions being different, their V4L2 output controls have been separated. To control the yuv output, the V4L2 calls must be done via video48. If the ivtvfb module is loaded, there will be one side effect to this merge. The yuv output window will be constrained to the visible framebuffer area. In the event that a virtual framebuffer size is being used, the limit to the output size will be the virtual dimensions, but only the portion that falls within the currently visible area of the framebuffer will be shown. Like the IVTV_IOC_DMA_FRAME ioctl, the supplied frames must be padded to 720 pixels wide. However the height must only be padded up the nearest multiple of 32. This would mean an image of 102 lines must be padded to 128. As long as the true source image size is given, the padding will not be visible in the final output. Signed-off-by: Ian Armstrong <ian@iarmst.demon.co.uk> Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
45 lines
1.6 KiB
C
45 lines
1.6 KiB
C
/*
|
|
yuv support
|
|
|
|
Copyright (C) 2007 Ian Armstrong <ian@iarmst.demon.co.uk>
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
*/
|
|
|
|
#ifndef IVTV_YUV_H
|
|
#define IVTV_YUV_H
|
|
|
|
#define IVTV_YUV_BUFFER_UV_OFFSET 0x65400 /* Offset to UV Buffer */
|
|
|
|
/* Offset to filter table in firmware */
|
|
#define IVTV_YUV_HORIZONTAL_FILTER_OFFSET 0x025d8
|
|
#define IVTV_YUV_VERTICAL_FILTER_OFFSET 0x03358
|
|
|
|
#define IVTV_YUV_UPDATE_HORIZONTAL 0x01
|
|
#define IVTV_YUV_UPDATE_VERTICAL 0x02
|
|
#define IVTV_YUV_UPDATE_INVALID 0x04
|
|
|
|
extern const u32 yuv_offset[IVTV_YUV_BUFFERS];
|
|
|
|
int ivtv_yuv_filter_check(struct ivtv *itv);
|
|
void ivtv_yuv_setup_stream_frame(struct ivtv *itv);
|
|
int ivtv_yuv_udma_stream_frame(struct ivtv *itv, void *src);
|
|
void ivtv_yuv_frame_complete(struct ivtv *itv);
|
|
int ivtv_yuv_prep_frame(struct ivtv *itv, struct ivtv_dma_frame *args);
|
|
void ivtv_yuv_close(struct ivtv *itv);
|
|
void ivtv_yuv_work_handler(struct ivtv *itv);
|
|
|
|
#endif
|