EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
在ARM上对正在播放的视频文件进行截屏时挂掉啦, 但是截取静态图片是成功的。以下是代码, 求高手指教!~- L* T- X8 Y/ }, G/ o3 a$ x$ w
S. J/ b* b1 h' C
; X* x& ?7 L7 X6 g/ t, i- L
struct fb_fix_screeninfo finfo;5 P% F; O! R: S( h9 ?3 U, W+ D
struct fb_var_screeninfo vinfo;8 ^9 A$ N$ h% Q7 h
uchar *frameBuffer = NULL;2 E6 i1 ?% s* c! b$ k
long int screensize = 0;
; v" H9 e% N9 U1 n- f. c% L9 u5 H! Q1 L% ~1 H u# z# r
(fb0里是普通静态画面的缓冲设备, fb1是视频播放时的缓冲设备)
8 Y- H$ x4 H* f6 o4 B7 t! S" G; kqint32 fd = open("/dev/graphics/fb1", O_RDONLY);
9 z% q: O# K" f; k0 X# d. w% t, uif (fd < 0) {
( K) P3 m( K; D* P; D7 l' j! X/ x# D fd = open("/dev/fb", O_RDONLY);
& t, i1 G- [! O: f' l if (fd < 0) {
6 R" X( ` H5 P5 m4 m return false;' j! j- R, w' q$ c! s
}
) B& c; r- O4 T}# U. a: | J, T' |
. l3 q) h. n! I& ^
if (ioctl(fd, FBIOGET_FSCREENINFO, &finfo)<0) {
* e( E7 C% c4 m/ d return false;2 Z/ {- D& Z, c" ^% ]
}
/ l/ Z; A3 U: U' U3 G( r' } W0 U, p! x" [/ `) r' ]
if (ioctl(fd, FBIOGET_VSCREENINFO, &vinfo)<0) {
. }6 ~8 e [3 C, _9 L a" m3 f return false;
$ l, k9 w6 T) L/ f( w}
+ I. j6 L. ^2 \# o- @' G. }
2 I6 B$ e" m' R" D/ Q zscreensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;6 A4 p# M# D# P3 P* V( g: K
int curViewOffset = vinfo.yoffset/480;! |( p7 q7 o6 w- b. f3 Y0 C0 U
1 X$ Y1 `% S7 l% Z" d, P
frameBuffer = (uchar *) mmap(0, /* start */5 r# v- i8 ~8 N1 K% u; S
screensize, /* bytes */
7 W+ F/ x( T; x$ O/ X) r) x PROT_READ, /* prot */1 q3 Z3 Q7 r) c" i1 f7 N
MAP_SHARED, /* flags */7 i) m3 _6 l2 ]
fd, /* fd */- y" e$ ]" R; X" q' E9 X- C1 `
screensize * curViewOffset /* offset */);8 e+ H6 H7 Z+ b3 ^
3 l) e4 W- e* c3 @9 ~
if (MAP_FAILED == frameBuffer) {
. t! a! J. ?0 [ return false;9 x' t# x1 o( c( O& O
}9 u3 a& }# ]8 ~5 n5 n
9 V; L8 f7 Q, B0 N8 U2 Y只要对frameBuffer进行读取就死机! |