|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
在ARM上对正在播放的视频文件进行截屏时挂掉啦, 但是截取静态图片是成功的。以下是代码, 求高手指教!~6 }9 G- v' m& I2 {- A
, h+ T: d/ K9 j6 g
8 J8 @) p; m+ v struct fb_fix_screeninfo finfo;& _: Z. ]- ]. V
struct fb_var_screeninfo vinfo;* J. O d; d' T" J6 U3 e z
uchar *frameBuffer = NULL;* U6 q& v6 j- {/ H
long int screensize = 0;
3 R% b0 j$ x! M8 W: ^0 a [$ n/ I8 h0 I
(fb0里是普通静态画面的缓冲设备, fb1是视频播放时的缓冲设备)5 c4 l7 a! C$ x! W; b5 q
qint32 fd = open("/dev/graphics/fb1", O_RDONLY);
9 d) [# e! e" K# @% B, s: M. M- zif (fd < 0) {5 h/ @) w, i2 X$ o1 T; [
fd = open("/dev/fb", O_RDONLY);8 }- `; A5 w, c1 V7 y
if (fd < 0) {: Y, B! s: y( N, J6 i
return false;) x8 {# u8 ~# k
}. K9 B* @0 C9 N' W
}+ D2 {, w! {$ L) L; {- D" R
7 w" S$ |, s# N* k$ _8 b
if (ioctl(fd, FBIOGET_FSCREENINFO, &finfo)<0) {
6 D( G& `( p0 W# E k; ~8 B return false;5 @9 F# N, K( f$ F) N
}
( O1 m2 Y+ l( _6 I
* ~% G; D8 T1 w, K. H. wif (ioctl(fd, FBIOGET_VSCREENINFO, &vinfo)<0) {: b' G( K" @+ g
return false;
* v$ n% A' F7 b$ t$ g( D' ^}5 h3 d2 _6 V4 \; O8 H
6 T: W T+ b+ ?1 J5 n" b; R4 p4 m
screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;
+ a) a2 P+ I2 D! V" m# Y+ F! Iint curViewOffset = vinfo.yoffset/480;
" U* x) X+ n7 w0 b6 S: D; Z; C# p3 o" K
frameBuffer = (uchar *) mmap(0, /* start */
6 F8 Q7 o+ W4 p7 s2 A( B; ~2 m7 @ screensize, /* bytes */
( M# r/ `; [$ A8 v) P$ z' z& z' Q PROT_READ, /* prot */
6 z. n" T U& q# U MAP_SHARED, /* flags */% e/ Y: q- ^+ }5 w5 P8 ~; i
fd, /* fd */
4 v8 \! j6 Z# `' u, N screensize * curViewOffset /* offset */);
0 M' A% t3 T2 {1 y) j
) q2 m% |$ ^ X' v. T- A* Sif (MAP_FAILED == frameBuffer) {* @; u, d8 r0 [+ E' K
return false; y, S* i/ L& k9 e' u" V% ?( w
}7 ]+ h H/ s F6 j
6 D! g2 M; }; `; }, m. R只要对frameBuffer进行读取就死机! |
|