赞
踩
编译命令:
arm-linux-gcc showchar.c libfont.a -o showchar
函数介绍:
int Init_Font(void); //显示字体库前先调用本函数进行初始化
void UnInit_Font(void); //程序退出前,调用本函数
int Clean_Area( int X, //x坐标起始点
int Y, //y坐标起始点
int width, //背景绘制的宽度 像素
int height,//背景绘制的高度
unsigned long color); //往屏幕指定区域填充颜色
int Display_characterX( unsigned int x, //x坐标起始点
unsigned int y, //y坐标起始点
unsigned char *string, //GB2312 中文字符串
unsigned int color , //字体颜色值
int size); //字体放大倍数 1~8
需要注意的地方:在用notepad++编写代码的时候,必须将你的中文编码设置为GB2312(在编码–》编码字符集中选择中文)
CRT设置:
如何进行中文设置:
Options—>Session options–>Appearance—>Character encoding(选择ANSI/OEM-简体中文GBK)
#include<stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <unistd.h> #include <linux/input.h> int main(void) { struct input_event info; int x1,y1,x2,y2; //打开触摸屏 int tsfd = open("/dev/input/event0",O_RDWR); if(tsfd == -1) { perror("open event0 error"); return -1; } while(1) { x1=0,x2=0,y1=0,y2=0; //获取x1,y1的坐标 while(1) { //读取触摸屏的坐标 read(tsfd,&info,sizeof(info)); //获取X轴的坐标 if(info.type == EV_ABS && info.code == ABS_X) x1 = info.value; if(info.type == EV_ABS && info.code == ABS_Y) y1 = info.value; if(x1 !=0 && y1 != 0) break; } //获取x2,y2的坐标 while(1) { //读取触摸屏的坐标 read(tsfd,&info,sizeof(info)); //获取X轴的坐标 if(info.type == EV_ABS && info.code == ABS_X) x2 = info.value; if(info.type == EV_ABS && info.code == ABS_Y) y2 = info.value; //检测手松开的时候,才打印坐标 if(info.type == EV_KEY && info.code == BTN_TOUCH && info.value == 0) break; } if(x2-x1>50 && (y1-y2<30 || y2-y1<30)) printf("向右划屏\n"); if(x1-x2>50 && (y1-y2<30 || y2-y1<30)) printf("向左划屏\n"); } close(tsfd); return 0; }
cp mplayer /bin
查看用法
mplayer -help
MPlayer 1.0rc2-4.5.1 © 2000-2007 MPlayer Team
CPU: ARM
用法: mplayer [选项] [URL|路径/]文件名
基本选项: (完整列表参见手册页)
-vo <drv> 选择视频输出驱动 (查看驱动列表用“-vo help”)
-ao <drv> 选择音频输出驱动 (查看驱动列表用“-ao help”)
vcd://<trackno> 播放 (S)VCD 轨迹号 (原始设备, 无需安挂)
dvd://<titleno> 从设备而不是普通文件上播放 DVD 标题号
-alang/-slang 选择 DVD 音轨/字幕的语言(使用两字符的国家代号)
-ss <position> 寻找到给定(多少秒或时分秒 hh:mm:ss 的)位置
-nosound 不播放声音
-fs 全屏播放 (或者用 -vm, -zoom, 详见于手册页)
-x <x> -y <y> 设置显示的分辨率(提供给 -vm 或者 -zoom 使用)
-sub <file> 指定字幕文件 (参见 -subfps, -subdelay)
-playlist <file> 指定播放列表文件
-vid x -aid y 选择用于播放的 x 视频流和 y 音频流通道号
-fps x -srate y 改变视频率为 x 帧秒(fps)和音频率为 y 赫兹(Hz)
-pp <quality> 使用后期处理过滤器/滤镜 (详见于手册页)
-framedrop 使用丢帧(用于慢机器)
基本控制键: (完整的列表参见于手册页, 同时也请核查 input.conf)
<- or -> 后退/快进 10 秒
down or up 后退/快进 1 分钟
pgdown or pgup 后退/快进 10 分钟
< or > 跳到播放列表中的前一个/后一个
p or SPACE 暂停播放(按任意键继续)
q or ESC 停止播放并退出程序
+ or - 调整音频延迟增加/减少 0.1 秒
o 循环 OSD 模式: 无/搜索条/搜索条加计时器
* or / 增加或减少 PCM 音量
x or z 调整字幕延迟增加/减少 0.1 秒
r or t 上/下调整字幕位置, 参见“-vf expand”
1、使用键盘
2、使用slave命令
查询slave的用法
mplayer -input cmdlist
seek Float [Integer] 快进 : "seek +10\n" 快退: "seek -10\n"
quit [Integer] 停止
pause 暂停、继续播放
mute [Integer] 静音
volume Float [Integer] 音量+ : "volume +1000\n" 音量-:"volume -1000\n"
mkfifo
#include <sys/types.h>
#include <sys/stat.h>
int mkfifo(const char *pathname, mode_t mode);
函数功能:新建一个管道文件
参数:pathname ----》你要创建管道文件的路径名 ---比如: /tmp/fifo
mode ---->文件的权限 0777 0666
返回值:成功 0
失败 -1
-geometry 100:50 ----指定视频播放的起始位置在 x == 100 y == 50 的位置播放
-zoom -x -y 比如 -zoom -x 600 -y 400
system("mplayer -slave -quiet -input file=/tmp/fifo -geometry 100:50 -zoom -x 600 -y 400 faded.avi &");
练习1:制作一个视频播放器
1、要有主界面,触摸控制状态
2、实现的功能:暂停、播放、停止、音量±、快进、快退、静音
扩展:上一段视频、下一段视频
sprintf
jpg格式 yuv格式(你们手中拿到的摄像头)
当摄像头开始工作的时候,会拍摄出一张张指定格式的图片,在内部编程形成视频流播放出来
/usr/include/linux/videodev2.h
//初始化摄像头
linux_v4l2_yuyv_init("/dev/video7"); —/dev/video7 是摄像头的设备驱动文件
如何检测摄像头的设备驱动文件
rm video*
//开启摄像头捕捉
linux_v4l2_start_yuyv_capturing();
//获取摄像头捕捉的画面
linux_v4l2_get_yuyv_data(&video_buf);
//显示摄像头捕捉的画面
show_video_data(0, 0, video_buf.jpg_data , video_buf.jpg_size);
//摄像头解除初始化
linux_v4l2_yuyv_quit();
1)将C:\Users\STU01\Desktop\linuxshare\yuv_v4l2\jpeg文件夹中两个库文件下载到开发版中/lib
libapi_v4l2_arm1.so
libjpeg.so.8
make
1)在开发板的根目录下新建一个目录
mkdir video_jpg
video_jpg ---这个目录用来存储拍摄出来的图片
chmod 777 jpeg_show
./jpeg_show 0.jpg
#include <sys/types.h>
#include <dirent.h>
DIR *opendir(const char *name);
函数功能:打开指定的目录
参数:name ---你想要打开哪个目录
返回值:成功返回目录指针
失败 NULL
#include <dirent.h>
struct dirent *readdir(DIR *dirp);
参数:dirp ---你要读取哪个目录,将该目录指针传递进来
返回值:成功返回 目录项指针,存储读取到的文件信息
失败 或者读取完毕返回 NULL
struct dirent {
unsigned char d_type; /* 文件类型 */
char d_name[256]; /* 文件名 */
};
注意:每一次调用readdir函数,只能读取该目录中一个文件的信息
#include <sys/types.h>
#include <dirent.h>
int closedir(DIR *dirp);
应用程序和驱动程序之间进行数据交换的时候,是以块(1block=1024B)为单位的。这些数据传递的顺序是不固定的。块设备是有缓存的。块设备是有文件系统的。
块设备:大容量的存储设备:U盘、移动硬盘、SD卡、eMMC、.....
应用程序:挂载--->标准IO函数:fopen()/fread()/fwrite()/.....
例:
[root@GEC6818 /]#df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/root 352756 273244 79512 77% / ---->存放rootfs的电子硬盘分区:352756*1kB = 350MB
devtmpfs 405404 0 405404 0% /dev
tmpfs 413720 0 413720 0% /dev/shm
tmpfs 413720 0 413720 0% /tmp
tmpfs 413720 0 413720 0% /run
[root@GEC6818 /]#cat /proc/partitions
major minor #blocks name
179 0 7634944 mmcblk0
179 1 65536 mmcblk0p1
179 2 772096 mmcblk0p2 ----->rootfs
179 3 438272 mmcblk0p3
179 4 1 mmcblk0p4
179 5 8192 mmcblk0p5
179 6 22528 mmcblk0p6
179 7 6324224 mmcblk0p7 ---->没有使用,我们可以把数据放在这个分区。
179 16 4096 mmcblk0boot1
179 8 4096 mmcblk0boot0
[root@GEC6818 /]#mkfs.vfat /dev/mmcblk0p7
在开发板的根目录下创建一个目录
mkdir mdata
[root@GEC6818 /]#mount -t vfat /dev/mmcblk0p7 /mdata
[root@GEC6818 /]#df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 344.5M 344.5M 0 100% /
devtmpfs 395.9M 0 395.9M 0% /dev
tmpfs 404.0M 0 404.0M 0% /dev/shm
tmpfs 404.0M 0 404.0M 0% /tmp
tmpfs 404.0M 0 404.0M 0% /run
/dev/mmcblk0p7 6.0G 61.9M 6.0G 1% /mdata
//这一步不需要执行
[root@GEC6818 /]#umount /mdata
注意重启后挂在会还原,如果需要开机自动挂载的话需要把步骤<2>写到/etc/profile中,该分区内资料并不会被清除可放心使用
vi /etc/profile
在文本最后输入挂载命令
mount -t vfat /dev/mmcblk0p7 /mdata
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。