- 论坛徽章:
- 0
|
本帖最后由 denry39 于 2013-10-15 11:29 编辑
Arch: ARM-LINUX
在我的源程序中有:- static int *buf_pointer[NUM_BUF];
- if(MAP_FAILED == (buf_pointer[i] = mmap(.......))
- ........
- // 断点设置点
- if(v4lconvert_convert(lib, &src_fmt, &dst_fmt, (void*)buf_pointer[cam_buf.index],
- cam_buf.length, current_pic.buffer, YUV420_size) <= 0)
复制代码 in libv4lconvert.c(库函数)
- 947 int v4lconvert_convert(struct v4lconvert_data *data,
- 948 const struct v4l2_format *src_fmt, /* in */
- 949 const struct v4l2_format *dest_fmt, /* in */
- 950 unsigned char *src, int src_size, unsigned char *dest, int dest_size)
- 951 {
- 952 int res, dest_needed, temp_needed, processing, convert = 0;
- 953 int rotate90, vflip, hflip, crop;
- 954 unsigned char *convert1_dest = dest;
- 955 int convert1_dest_size = dest_size;
- 956 unsigned char *convert2_src = src, *convert2_dest = dest;
- 957 int convert2_dest_size = dest_size;
- 958 unsigned char *rotate90_src = src, *rotate90_dest = dest;
- 959 unsigned char *flip_src = src, *flip_dest = dest;
- 960 unsigned char *crop_src = src;
- 961 struct v4l2_format my_src_fmt = *src_fmt; //问题代码
- 962 struct v4l2_format my_dest_fmt = *dest_fmt;
复制代码 GDB调试:- (gdb) b v4lconvert_convert //设置断点
- (gdb) r
- Breakpoint 1, v4lconvert_convert (data=0x19008, src_fmt=0x189b8,
- dest_fmt=0x188ec, src=0x4042b000 <Address 0x4042b000 out of bounds>,
- src_size=0, dest=0x40895008 "", dest_size=460800) at libv4lconvert.c:1004
- 1004 libv4lconvert.c: No such file or directory.
- in libv4lconvert.c
- (gdb) n
- 951 in libv4lconvert.c
- (gdb) n
- 961 in libv4lconvert.c
- (gdb) bt
- #0 v4lconvert_convert (data=0x19008, src_fmt=0x189b8, dest_fmt=0x188ec,
- src=0x4042b000 <Address 0x4042b000 out of bounds>, src_size=0,
- dest=0x40895008 "", dest_size=460800) at libv4lconvert.c:961
- #1 0x000096e8 in camera_get_frame (pic=0xbefffc58) at camera.c:181
- #2 0x00009fd4 in main () at main.c:56
- (gdb) p src
- $7 = (unsigned char *) 0x4042b000 <Address 0x4042b000 out of bounds>
- (gdb) n
- 962 in libv4lconvert.c
- (gdb) p src
- $8 = (unsigned char *) 0x189b8 "\001" //src 值改变
- (gdb) bt
- #0 v4lconvert_convert (data=0x19008, src_fmt=0x0, dest_fmt=0x188ec,
- src=0x189b8 "\001", src_size=0, dest=0x40895008 "", dest_size=460800)
- at libv4lconvert.c:962 //src_fmt, src均改变
- #1 0x000096e8 in camera_get_frame (pic=0xbefffc58) at camera.c:181
- #2 0x00009fd4 in main () at main.c:56
- (gdb)
复制代码 问题:
1. mmap并没有出错,返回的地址在函数调用中怎么会"out of bounds”
2. 在执行了v4lconvert_convert的第961行后,函数的src_fmt,src形参值怎么会发生变化,不解呀。请高人指教。。。。 |
|