EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
在ARM上对正在播放的视频文件进行截屏时挂掉啦, 但是截取静态图片是成功的。以下是代码, 求高手指教!~! V% O9 H; T4 u& L6 U8 O; \
) R2 k0 a$ C( _4 C9 z; |
* K7 E8 @1 d' n( n- c% `
struct fb_fix_screeninfo finfo;
9 b+ Q" F8 M* N8 N c2 d, rstruct fb_var_screeninfo vinfo;
4 y- t- I6 d: j3 Z& ] j$ yuchar *frameBuffer = NULL;
, w: u3 b# K" W* R, M6 M6 {! D- F/ K1 }long int screensize = 0;
; C4 A$ T0 T5 @# _( v: X8 p! B* M: P$ v2 |" U
(fb0里是普通静态画面的缓冲设备, fb1是视频播放时的缓冲设备)1 b8 {7 ]6 [1 j4 G3 G* S/ |/ `8 j
qint32 fd = open("/dev/graphics/fb1", O_RDONLY);3 ?2 r) O7 P' x2 _8 w
if (fd < 0) {2 C2 _' }% X6 Z
fd = open("/dev/fb", O_RDONLY);9 H$ ~$ l u# W' c! F0 C5 _
if (fd < 0) {" h( T* j, j1 y9 f5 U+ m6 w1 u
return false;
2 i( W) }+ y9 @7 m3 o9 v }) q; A- P& u5 W0 m& @* L7 l* \
}7 D8 z7 M) ~: k# d9 n
& J/ I* E; e2 h9 H: i$ Qif (ioctl(fd, FBIOGET_FSCREENINFO, &finfo)<0) {
, |0 o1 p1 y1 [# S5 e% Z3 _0 ] return false;; q' G o9 P% a7 J& d* f3 H& D
}
% G! |+ j$ O- k
) I6 v, E( f1 Xif (ioctl(fd, FBIOGET_VSCREENINFO, &vinfo)<0) {
) G5 R. l n3 } return false;
9 h' o6 B. U6 P6 ?8 g. R4 J}8 U8 j. g5 T) O3 x$ l
: z4 W+ f' [: z Z' u; x3 X) Oscreensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;
; @& @, i, W& T4 Q" t7 pint curViewOffset = vinfo.yoffset/480;
" W$ O+ P' n5 k4 I% _1 m1 N, J: B$ C+ L* R
frameBuffer = (uchar *) mmap(0, /* start */+ b) c& Z/ l3 _( l: l* ^, D0 I. p1 s
screensize, /* bytes */% a0 X! G+ j% j1 {% `- `$ s# l
PROT_READ, /* prot */
$ p# s* b$ X5 [# w& o MAP_SHARED, /* flags */
# h" b) `! v2 o8 t9 v& ^3 ] fd, /* fd */
0 ?6 g1 P% \* Y& ^ screensize * curViewOffset /* offset */);
* `( S( b7 G! b/ W
0 P9 N5 Q2 U+ X& zif (MAP_FAILED == frameBuffer) {4 A f/ L3 w- I" z
return false;' Z0 E6 v1 E. z" ]9 g
}
- b' y. Q7 S8 y5 o$ N! e0 E( |# ?
+ v3 ~9 U* h9 Y! i8 F只要对frameBuffer进行读取就死机! |