EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
在ARM上对正在播放的视频文件进行截屏时挂掉啦, 但是截取静态图片是成功的。以下是代码, 求高手指教!~2 x* a. G3 `7 {! F% P8 w
1 t, j7 o& j/ N1 g }$ ^
4 [( X( S& l6 k+ D! G8 h+ ` struct fb_fix_screeninfo finfo;9 P# {9 R" [* _/ C& c
struct fb_var_screeninfo vinfo;$ ~( b Q$ L) ~4 y
uchar *frameBuffer = NULL;
- A- t/ }8 Z. D2 Rlong int screensize = 0;
+ m+ ?1 j1 H; J9 k; C, m% c% T% u1 _$ m# V
(fb0里是普通静态画面的缓冲设备, fb1是视频播放时的缓冲设备)' g' P% H5 j4 T" Y# U
qint32 fd = open("/dev/graphics/fb1", O_RDONLY);1 G; r* k5 j2 {
if (fd < 0) {
1 I0 v! n7 ?+ B; y$ j fd = open("/dev/fb", O_RDONLY);$ C" P* f& i7 U# e( v' ^4 Y
if (fd < 0) {) g7 V Z# `" ~! ^6 M
return false;
& P ]( }* P: Z9 ` }
# z0 K* b8 @1 D8 B# b5 l: @: }}# I) A2 w4 f% q% F& w
F3 @- M. o7 E8 |0 Q$ U. x, fif (ioctl(fd, FBIOGET_FSCREENINFO, &finfo)<0) {
6 b0 A0 W- Q( E9 O3 ~ return false;' A# ]) a6 S& C( W/ X- S+ ]
}2 B7 U* F2 ?7 i Q! `
) |; p8 g& n$ c/ u. W4 ]
if (ioctl(fd, FBIOGET_VSCREENINFO, &vinfo)<0) {
2 L T+ X; {1 E$ ] return false;. F# \# [2 n. X0 X' S% c/ d
}1 D N: e: O. _
$ r8 F4 e6 C. N: B
screensize = vinfo.xres * vinfo.yres * vinfo.bits_per_pixel / 8;
' Q0 C1 M4 x; @1 Dint curViewOffset = vinfo.yoffset/480;
( P3 f! I$ p, n. e- e. M U
+ |! { t# O7 N' a) pframeBuffer = (uchar *) mmap(0, /* start */. R! Z1 D7 Q) _- W
screensize, /* bytes */
- u7 z3 F4 z6 Y" f+ I PROT_READ, /* prot */
7 c* M7 V& M) L# P. v' s) b MAP_SHARED, /* flags */
" q0 V1 h# `8 l8 k) j& J1 S, o* N fd, /* fd */; l7 E9 h8 Z) `$ w! |
screensize * curViewOffset /* offset */);- P ` i( w; k- M1 X" e
2 v/ U; S& O1 `! U' @3 z1 J
if (MAP_FAILED == frameBuffer) {6 I9 U( \$ U4 e8 s- Z3 P8 m' A2 S, d
return false;8 `4 Y4 t3 `+ [! \0 R
}
: V: d+ r1 C1 P! i: k
& [5 h3 B! q/ A' Q只要对frameBuffer进行读取就死机! |