EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
在ARM上对正在播放的视频文件进行截屏时挂掉啦, 但是截取静态图片是成功的。以下是代码, 求高手指教!~4 l+ Z" y+ J2 A) x# G G. S, s
7 l1 k- c8 i* f7 V; k
3 s( o+ s0 {; M+ r. C
struct fb_fix_screeninfo finfo;
, D9 i0 N( O1 O8 T% V9 Fstruct fb_var_screeninfo vinfo;1 Z% n* ?+ t6 i s: c2 c
uchar *frameBuffer = NULL;
! c. x; `5 C q8 c# A+ tlong int screensize = 0;. V. H# R) z, y& S% ^
8 @( H1 O% r1 h- A7 z- [# X
(fb0里是普通静态画面的缓冲设备, fb1是视频播放时的缓冲设备)" y5 G7 h, R! J3 H0 o+ Y$ y
qint32 fd = open("/dev/graphics/fb1", O_RDONLY);3 ]* j( t( X9 p, j1 s* y$ Z. X
if (fd < 0) {
! q& }" o6 A+ g* e) |3 U fd = open("/dev/fb", O_RDONLY);
+ x l; b3 l1 {3 c3 e; V9 ?, @ if (fd < 0) {
# \& Z, y9 k8 C& R' z return false;
% G. H, p% L6 j; p! \; r4 Y }
% T1 ~& K$ K* ~; M% S/ s! B+ `}5 p, ~; i3 \8 L, p( I: z/ f1 x' H
+ P. ]7 d6 S: @+ }2 e6 ?! wif (ioctl(fd, FBIOGET_FSCREENINFO, &finfo)<0) {1 D/ j- p% k" D! `( v- a
return false;" a% z- T( L+ T1 r5 M3 d
}0 E' v, N4 e2 a/ L$ `0 d
6 p+ h/ p. Y$ Z/ Z. @" Q9 e/ e0 \if (ioctl(fd, FBIOGET_VSCREENINFO, &vinfo)<0) {
5 g2 e4 p, u$ e5 A9 V8 y$ e' n% N+ N return false;' ^) s j- |: n
}
. M2 y0 j5 D* t; \/ f6 k2 [4 x# [ j& I
screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;# r7 ?+ V$ ?% n2 q* S
int curViewOffset = vinfo.yoffset/480;
- {6 j' I. U, x* ^
7 y# b$ q& F; G" Y$ AframeBuffer = (uchar *) mmap(0, /* start */% @; b2 X/ \( d, `; g9 s6 }& `
screensize, /* bytes */
, c; s H2 {/ H9 O3 m6 j. k, M PROT_READ, /* prot */1 H7 z, e5 W5 D7 A6 j
MAP_SHARED, /* flags */# f) l* Y3 N; ]7 X- n
fd, /* fd */) M1 Y7 L2 c. Q& k$ c
screensize * curViewOffset /* offset */);
3 C; V3 x9 z O6 g/ H g( s: |% l" B0 y, S! X. t. M* v
if (MAP_FAILED == frameBuffer) {
; ^, ~% m: R! Z4 t7 O E( n return false;
5 d$ u+ i6 x. H}' d9 j2 }$ M8 a7 R' e; @1 F
% c, n+ O8 J9 m6 t+ {$ q7 H
只要对frameBuffer进行读取就死机! |