hverkuil/go7007: staging: media: go7007: Add Framesizes
Subsystems (2)
PATCH 1/7 hverkuil/go7007: staging: media: go7007: Add Framesizes
--- drivers/staging/media/go7007/go7007-v4l2.c | 76 ++++++++++++++++++++++++++++ 1 files changed, 76 insertions(+), 0 deletions(-)
drivers/staging/media/go7007/go7007-v4l2.c +76 -0
@@ -612,6 +612,82 @@ static int vidioc_enum_framesizes(struct file *filp, void *priv, {struct go7007 *go =video_drvdata (filp); +if (go->board_id ==GO7007_BOARDID_ADLINK_MPG24 ) { +switch (go->standard) { +case GO7007_STD_NTSC : +switch (fsize->pixel_format) { +case V4L2_PIX_FMT_MJPEG : +case V4L2_PIX_FMT_MPEG : +case V4L2_PIX_FMT_H263 : +switch (fsize->index) { +case 0 : + fsize->type =V4L2_FRMSIZE_TYPE_DISCRETE ; + fsize->discrete.width =720 ; + fsize->discrete.height =480 ; +break ; +case 1 : + fsize->type =V4L2_FRMSIZE_TYPE_DISCRETE ; + fsize->discrete.width =640 ; + fsize->discrete.height =480 ; +break ; +case 2 : + fsize->type =V4L2_FRMSIZE_TYPE_DISCRETE ; + fsize->discrete.width =352 ; + fsize->discrete.height =240 ; +break ; +case 3 : + fsize->type =V4L2_FRMSIZE_TYPE_DISCRETE ; + fsize->discrete.width =320 ; + fsize->discrete.height =240 ; +break ; +case 4 : + fsize->type =V4L2_FRMSIZE_TYPE_DISCRETE ; + fsize->discrete.width =176 ; + fsize->discrete.height =112 ; +break ; +default : +return -EINVAL ; + } +break ; +default : +return -EINVAL ; + } +break ; +case GO7007_STD_PAL : +switch (fsize->pixel_format) { +case V4L2_PIX_FMT_MJPEG : +case V4L2_PIX_FMT_MPEG : +case V4L2_PIX_FMT_H263 : +switch (fsize->index) { +case 0 : + fsize->type =V4L2_FRMSIZE_TYPE_DISCRETE ; + fsize->discrete.width =720 ; + fsize->discrete.height =576 ; +break ; +case 1 : + fsize->type =V4L2_FRMSIZE_TYPE_DISCRETE ; + fsize->discrete.width =352 ; + fsize->discrete.height =288 ; +break ; +case 2 : + fsize->type =V4L2_FRMSIZE_TYPE_DISCRETE ; + fsize->discrete.width =176 ; + fsize->discrete.height =144 ; +break ; +default : +return -EINVAL ; + } +break ; +default : +return -EINVAL ; + } +break ; +default : +return -EINVAL ; + } +return 0 ; + } +if (fsize->index >0 )return -EINVAL ;
Signature · 1 line
1.7.7.6
PATCH 2/7 hverkuil/go7007: staging: media: go7007: Add Frameintervals
--- drivers/staging/media/go7007/go7007-v4l2.c | 123 ++++++++++++++++++++++++++++ 1 files changed, 123 insertions(+), 0 deletions(-)
drivers/staging/media/go7007/go7007-v4l2.c +123 -0
@@ -703,6 +703,129 @@ static int vidioc_enum_frameintervals(struct file *filp, void *priv, {struct go7007 *go =video_drvdata (filp); +if (go->board_id ==GO7007_BOARDID_ADLINK_MPG24 ) { +switch (fival->pixel_format) { +case V4L2_PIX_FMT_MJPEG : +case V4L2_PIX_FMT_MPEG : +case V4L2_PIX_FMT_H263 : +switch (go->standard) { +case GO7007_STD_NTSC : +switch (fival->index) { +case 0 : + fival->type =V4L2_FRMIVAL_TYPE_DISCRETE ; + fival->discrete.numerator =1001 *1 ; + fival->discrete.denominator = go->sensor_framerate; +break ; +case 1 : + fival->type =V4L2_FRMIVAL_TYPE_DISCRETE ; + fival->discrete.numerator =1001 *2 ; + fival->discrete.denominator = go->sensor_framerate; +break ; +case 2 : + fival->type =V4L2_FRMIVAL_TYPE_DISCRETE ; + fival->discrete.numerator =1001 *3 ; + fival->discrete.denominator = go->sensor_framerate; +break ; +case 3 : + fival->type =V4L2_FRMIVAL_TYPE_DISCRETE ; + fival->discrete.numerator =1001 *4 ; + fival->discrete.denominator = go->sensor_framerate; +break ; +case 4 : + fival->type =V4L2_FRMIVAL_TYPE_DISCRETE ; + fival->discrete.numerator =1001 *5 ; + fival->discrete.denominator = go->sensor_framerate; +break ; +case 5 : + fival->type =V4L2_FRMIVAL_TYPE_DISCRETE ; + fival->discrete.numerator =1001 *6 ; + fival->discrete.denominator = go->sensor_framerate; +break ; +case 6 : + fival->type =V4L2_FRMIVAL_TYPE_DISCRETE ; + fival->discrete.numerator =1001 *7 ; + fival->discrete.denominator = go->sensor_framerate; +break ; +case 7 : + fival->type =V4L2_FRMIVAL_TYPE_DISCRETE ; + fival->discrete.numerator =1001 *10 ; + fival->discrete.denominator = go->sensor_framerate; +break ; +case 8 : + fival->type =V4L2_FRMIVAL_TYPE_DISCRETE ; + fival->discrete.numerator =1001 *15 ; + fival->discrete.denominator = go->sensor_framerate; +break ; +case 9 : + fival->type =V4L2_FRMIVAL_TYPE_DISCRETE ; + fival->discrete.numerator =1001 *30 ; + fival->discrete.denominator = go->sensor_framerate; +break ; +default : +return -EINVAL ; + } +break ; +case GO7007_STD_PAL : +switch (fival->index) { +case 0 : + fival->type =V4L2_FRMIVAL_TYPE_DISCRETE ; + fival->discrete.numerator =1001 *1 ; + fival->discrete.denominator = go->sensor_framerate; +break ; +case 1 : + fival->type =V4L2_FRMIVAL_TYPE_DISCRETE ; + fival->discrete.numerator =1001 *2 ; + fival->discrete.denominator = go->sensor_framerate; +break ; +case 2 : + fival->type =V4L2_FRMIVAL_TYPE_DISCRETE ; + fival->discrete.numerator =1001 *3 ; + fival->discrete.denominator = go->sensor_framerate; +break ; +case 3 : + fival->type =V4L2_FRMIVAL_TYPE_DISCRETE ; + fival->discrete.numerator =1001 *4 ; + fival->discrete.denominator = go->sensor_framerate; +break ; +case 4 : + fival->type =V4L2_FRMIVAL_TYPE_DISCRETE ; + fival->discrete.numerator =1001 *5 ; + fival->discrete.denominator = go->sensor_framerate; +break ; +case 5 : + fival->type =V4L2_FRMIVAL_TYPE_DISCRETE ; + fival->discrete.numerator =1001 *6 ; + fival->discrete.denominator = go->sensor_framerate; +break ; +case 6 : + fival->type =V4L2_FRMIVAL_TYPE_DISCRETE ; + fival->discrete.numerator =1001 *8 ; + fival->discrete.denominator = go->sensor_framerate; +break ; +case 7 : + fival->type =V4L2_FRMIVAL_TYPE_DISCRETE ; + fival->discrete.numerator =1001 *13 ; + fival->discrete.denominator = go->sensor_framerate; +break ; +case 8 : + fival->type =V4L2_FRMIVAL_TYPE_DISCRETE ; + fival->discrete.numerator =1001 *25 ; + fival->discrete.denominator = go->sensor_framerate; +break ; +default : +return -EINVAL ; + } +break ; +default : +return -EINVAL ; + } +break ; +default : +return -EINVAL ; + } +return 0 ; + } +if (fival->index >0 )return -EINVAL ;
Signature · 1 line
1.7.7.6
PATCH 3/7 hverkuil/go7007: staging: media: go7007: Restore b_frame control
In reply to Volokh Konstantin--- drivers/staging/media/go7007/go7007-priv.h | 1 + drivers/staging/media/go7007/go7007-v4l2.c | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-)
drivers/staging/media/go7007/go7007-priv.h +1 -0
@@ -174,6 +174,7 @@ struct go7007 {struct v4l2_ctrl *mpeg_video_gop_size;struct v4l2_ctrl *mpeg_video_gop_closure;struct v4l2_ctrl *mpeg_video_bitrate; +struct v4l2_ctrl *mpeg_video_b_frames; };struct v4l2_ctrl *mpeg_video_aspect_ratio;enum {STATUS_INIT ,STATUS_ONLINE ,STATUS_SHUTDOWN } status;
drivers/staging/media/go7007/go7007-v4l2.c +5 -2
@@ -155,7 +155,7 @@ static void set_formatting(struct go7007 *go) go->gop_header_enable =1 ; go->repeat_seqhead =0 ; go->dvd_mode =0 ; - go->ipb =0 ; + go->ipb =v4l2_ctrl_g_ctrl (go->mpeg_video_b_frames);switch (v4l2_ctrl_g_ctrl (go->mpeg_video_aspect_ratio)) {default :
@@ -1143,7 +1143,7 @@ int go7007_v4l2_ctrl_init(struct go7007 *go)struct v4l2_ctrl *ctrl;int rv; -v4l2_ctrl_handler_init (hdl,12 ); +v4l2_ctrl_handler_init (hdl,24 ); go->mpeg_stream_type = v4l2_ctrl_new_std_menu(hdl, &go7007_ctrl_ops, V4L2_CID_MPEG_STREAM_TYPE, V4L2_MPEG_STREAM_TYPE_MPEG2_DVD,
@@ -1160,6 +1160,9 @@ int go7007_v4l2_ctrl_init(struct go7007 *go) go->mpeg_video_bitrate =v4l2_ctrl_new_std (hdl, &go7007_ctrl_ops,V4L2_CID_MPEG_VIDEO_BITRATE ,64000 ,10000000 ,1 ,1500000 ); + go->mpeg_video_b_frames =v4l2_ctrl_new_std (hdl, &go7007_ctrl_ops, +V4L2_CID_MPEG_VIDEO_B_FRAMES , +0 ,2 ,1 ,0 ); go->mpeg_video_aspect_ratio = v4l2_ctrl_new_std_menu(hdl, &go7007_ctrl_ops, V4L2_CID_MPEG_VIDEO_ASPECT, V4L2_MPEG_VIDEO_ASPECT_16x9, 0,
Signature · 1 line
1.7.7.6
PATCH 4/7 hverkuil/go7007: staging: media: go7007: Add Modet controls
In reply to Volokh Konstantin--- drivers/staging/media/go7007/go7007-v4l2.c | 95 ++++++++++++++++++++++++++++ drivers/staging/media/go7007/go7007.h | 18 +++++ 2 files changed, 113 insertions(+), 0 deletions(-)
drivers/staging/media/go7007/go7007-v4l2.c +95 -0
@@ -1137,6 +1137,101 @@ static struct video_device go7007_template = { .tvnorms = V4L2_STD_ALL, }; +static struct v4l2_ctrl_config md_configs[] = { + { + .ops = &go7007_ctrl_ops + ,.id =V4L2_CID_USER_MODET_REGION_NUMBER + ,.name ="Region MD" + ,.type =V4L2_CTRL_TYPE_INTEGER + ,.min =0 + ,.max =3 + ,.step =1 + ,.def =0 + } + ,{ + .ops = &go7007_ctrl_ops + ,.id =V4L2_CID_USER_MODET_PIXEL_THRESOLD + ,.name ="Pixel Thresold" + ,.type =V4L2_CTRL_TYPE_INTEGER + ,.min =0 + ,.max =65535 + ,.step =1 + ,.def =32767 + } + ,{ + .ops = &go7007_ctrl_ops + ,.id =V4L2_CID_USER_MODET_MOTION_THRESOLD + ,.name ="Motion Thresold" + ,.type =V4L2_CTRL_TYPE_INTEGER + ,.min =0 + ,.max =65535 + ,.step =1 + ,.def =32767 + } + ,{ + .ops = &go7007_ctrl_ops + ,.id =V4L2_CID_USER_MODET_TRIGGER + ,.name ="Trigger" + ,.type =V4L2_CTRL_TYPE_INTEGER + ,.min =0 + ,.max =65535 + ,.step =1 + ,.def =32767 + } + ,{ + .ops = &go7007_ctrl_ops + ,.id =V4L2_CID_USER_MODET_CLIP_LEFT + ,.name ="Left of Region" + ,.type =V4L2_CTRL_TYPE_INTEGER + ,.min =0 + ,.step =1 + ,.def =0 + } + ,{ + .ops = &go7007_ctrl_ops + ,.id =V4L2_CID_USER_MODET_CLIP_TOP + ,.name ="Top of Region" + ,.type =V4L2_CTRL_TYPE_INTEGER + ,.min =0 + ,.step =1 + ,.def =0 + } + ,{ + .ops = &go7007_ctrl_ops + ,.id =V4L2_CID_USER_MODET_CLIP_WIDTH + ,.name ="Width of Region" + ,.type =V4L2_CTRL_TYPE_INTEGER + ,.min =0 + ,.step =1 + ,.def =0 + } + ,{ + .ops = &go7007_ctrl_ops + ,.id =V4L2_CID_USER_MODET_CLIP_HEIGHT + ,.name ="Height of Region" + ,.type =V4L2_CTRL_TYPE_INTEGER + ,.min =0 + ,.step =1 + ,.def =0 + } + ,{ + .ops = &go7007_ctrl_ops + ,.id =V4L2_CID_USER_MODET_REGION_CONTROL + ,.name ="Region Control" + ,.type =V4L2_CTRL_TYPE_MENU + ,.min = rcAdd + ,.max = rcClear + ,.step =0 + ,.def = rcClear + ,.qmenu = (const char *const []){ +"Add" + ,"Delete" + ,"Clear" + ,NULL + } + } +}; +int go7007_v4l2_ctrl_init (struct go7007 *go) {struct v4l2_ctrl_handler *hdl = &go->hdl;
drivers/staging/media/go7007/go7007.h +18 -0
@@ -38,3 +38,21 @@ struct go7007_md_region { struct go7007_md_params)#define GO7007IOC_S_MD_REGION _IOW('V', BASE_VIDIOC_PRIVATE + 8, \ struct go7007_md_region) + +#define V4L2_CID_USER_GO7007_BASE (V4L2_CID_USER_BASE + 0x1000) +#define V4L2_CID_USER_MODET_REGION_NUMBER (V4L2_CID_USER_GO7007_BASE + 0x01) +#define V4L2_CID_USER_MODET_PIXEL_THRESOLD (V4L2_CID_USER_GO7007_BASE + 0x02) +#define V4L2_CID_USER_MODET_MOTION_THRESOLD (V4L2_CID_USER_GO7007_BASE + 0x03) +#define V4L2_CID_USER_MODET_TRIGGER (V4L2_CID_USER_GO7007_BASE + 0x04) +#define V4L2_CID_USER_MODET_REGION_CONTROL (V4L2_CID_USER_GO7007_BASE + 0x05) +#define V4L2_CID_USER_MODET_CLIP_LEFT (V4L2_CID_USER_GO7007_BASE + 0x06) +#define V4L2_CID_USER_MODET_CLIP_TOP (V4L2_CID_USER_GO7007_BASE + 0x07) +#define V4L2_CID_USER_MODET_CLIP_WIDTH (V4L2_CID_USER_GO7007_BASE + 0x08) +#define V4L2_CID_USER_MODET_CLIP_HEIGHT (V4L2_CID_USER_GO7007_BASE + 0x09) +#define V4L2_CID_USER_MODET_ALARM (V4L2_CID_USER_GO7007_BASE + 0x09) + +enum RegionControl { + rcAdd =0 + ,rcDelete =1 + ,rcClear =2 +};
Signature · 1 line
1.7.7.6
PATCH 5/7 hverkuil/go7007: staging: media: go7007: Functionality for modet controls
In reply to Volokh KonstantinThe idea of modet controls through userspace is:
The first of all need select region number (0..3) (it value stores) And then config thresolds (pixel,motion,trigger) for that region. Also it`s available setup regions controls (each of 16x16 rects of the frame, where detection will be approve).
In user space need only add/delete or clear some rect (set top,left,width,height) and system automaticaly set up each 16x16 rects for that.
Clear buttom/menu clears all modet region for detection. (idle work)
--- drivers/staging/media/go7007/go7007-priv.h | 9 ++- drivers/staging/media/go7007/go7007-v4l2.c | 120 ++++++++++++++++++++++++++++ 2 files changed, 128 insertions(+), 1 deletions(-)
drivers/staging/media/go7007/go7007-priv.h +8 -1
@@ -226,7 +226,14 @@ struct go7007 { } modet[4 ];unsigned char modet_map[1624 ];unsigned char active_map[216 ]; - +struct {/* modet type control cluster */ +struct v4l2_ctrl *modet_clip_left; +struct v4l2_ctrl *modet_clip_top; +struct v4l2_ctrl *modet_clip_width; +struct v4l2_ctrl *modet_clip_height; +struct v4l2_ctrl *modet_region_number; +//struct v4l2_ctrl *mpeg_video_b_frames; + };/* Video streaming */ struct mutex queue_lock;struct vb2_queue vidq;
drivers/staging/media/go7007/go7007-v4l2.c +120 -0
138 lines not on this page · raw message
Signature · 1 line
1.7.7.6
PATCH 6/7 hverkuil/go7007: staging: media: go7007: Cleanup Unused modet code
In reply to Volokh Konstantin--- drivers/staging/media/go7007/go7007-v4l2.c | 94 ---------------------------- 1 files changed, 0 insertions(+), 94 deletions(-)
drivers/staging/media/go7007/go7007-v4l2.c +0 -94
@@ -292,64 +292,6 @@ static int set_capture_size(struct go7007 *go, struct v4l2_format *fmt, int try)return 0 ; } -#if 0 -static int clip_to_modet_map (struct go7007 *go,int region, -struct v4l2_clip *clip_list) -{ -struct v4l2_clip clip, *clip_ptr; -int x, y, mbnum; - -/* Check if coordinates are OK and if any macroblocks are already -* used by other regions (besides 0) */ - clip_ptr = clip_list; -while (clip_ptr) { -if (copy_from_user (&clip, clip_ptr,sizeof (clip))) -return -EFAULT ; -if (clip.c.left <0 || (clip.c.left &0xF ) || - clip.c.width <=0 || (clip.c.width &0xF )) -return -EINVAL ; -if (clip.c.left + clip.c.width > go->width) -return -EINVAL ; -if (clip.c.top <0 || (clip.c.top &0xF ) || - clip.c.height <=0 || (clip.c.height &0xF )) -return -EINVAL ; -if (clip.c.top + clip.c.height > go->height) -return -EINVAL ; -for (y =0 ; y < clip.c.height; y +=16 ) -for (x =0 ; x < clip.c.width; x +=16 ) { - mbnum = (go->width >>4 ) * - ((clip.c.top + y) >>4 ) + - ((clip.c.left + x) >>4 ); -if (go->modet_map[mbnum] !=0 && - go->modet_map[mbnum] != region) -return -EBUSY ; - } - clip_ptr = clip.next; - } - -/* Clear old region macroblocks */ -for (mbnum =0 ; mbnum <1624 ; ++mbnum) -if (go->modet_map[mbnum] == region) - go->modet_map[mbnum] =0 ; - -/* Claim macroblocks in this list */ - clip_ptr = clip_list; -while (clip_ptr) { -if (copy_from_user (&clip, clip_ptr,sizeof (clip))) -return -EFAULT ; -for (y =0 ; y < clip.c.height; y +=16 ) -for (x =0 ; x < clip.c.width; x +=16 ) { - mbnum = (go->width >>4 ) * - ((clip.c.top + y) >>4 ) + - ((clip.c.left + x) >>4 ); - go->modet_map[mbnum] = region; - } - clip_ptr = clip.next; - } -return 0 ; -} -#endif -static int go7007_s_ctrl (struct v4l2_ctrl *ctrl) { struct go7007 *go =
@@ -1045,42 +987,6 @@ static int vidioc_log_status(struct file *file, void *priv)return call_all (&go->v4l2_dev, core, log_status); } -/* FIXME: -Those ioctls are private, and not needed, since several standard -extended controls already provide streaming control. -So, those ioctls should be converted into vidioc_g_ext_ctrls() -and vidioc_s_ext_ctrls() -*/ - -#if 0 -case GO7007IOC_S_MD_PARAMS : - { -struct go7007_md_params *mdp = arg; - -if (mdp->region >3 ) -return -EINVAL ; -if (mdp->trigger >0 ) { - go->modet[mdp->region].pixel_threshold = - mdp->pixel_threshold >>1 ; - go->modet[mdp->region].motion_threshold = - mdp->motion_threshold >>1 ; - go->modet[mdp->region].mb_threshold = - mdp->trigger >>1 ; - go->modet[mdp->region].enable =1 ; - }else - go->modet[mdp->region].enable =0 ; -/* fall-through */ - } -case GO7007IOC_S_MD_REGION : - { -struct go7007_md_region *region = arg; - -if (region->region <1 || region->region >3 ) -return -EINVAL ; -return clip_to_modet_map (go, region->region, region->clips); - } -#endif -static struct v4l2_ctrl_ops go7007_ctrl_ops = { .s_ctrl = go7007_s_ctrl, };
Signature · 1 line
1.7.7.6
PATCH 7/7 hverkuil/go7007: staging: media: go7007: Clean trivial
In reply to Volokh Konstantin--- drivers/staging/media/go7007/go7007-priv.h | 1 - 1 files changed, 0 insertions(+), 1 deletions(-)
drivers/staging/media/go7007/go7007-priv.h +0 -1
@@ -232,7 +232,6 @@ struct go7007 {struct v4l2_ctrl *modet_clip_width;struct v4l2_ctrl *modet_clip_height;struct v4l2_ctrl *modet_region_number; -//struct v4l2_ctrl *mpeg_video_b_frames; };/* Video streaming */ struct mutex queue_lock;
Signature · 1 line
1.7.7.6