欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

jz2440 ARM9 开发板移植 mplayer

程序员文章站 2022-05-22 19:21:48
...

1 、所需工具

mplayer版本 MPlayer-1.0rc2.tar.bz2 (我试了最新版本 一直出错 便还是选择了这个版本)
libmad版本 libmad-0.15.1b.tar.gz
(libmad)是一个开源的高精度 MPEG 音频解码库,完全是定点计算,非常适合没有浮点支持的平台上使用。

2、编译libmad

先解压libmad
tar xf libmad-0.15.1b.tar.gz
cd libmad-0.15.1b
./configure --prefix=/work/mplayer/mplayer --enable-fpm=arm --host=arm-linux --disable-debugging --enable-shared --enable-static CC=arm-linux-gcc //生成配置文件
–prefix=/work/mplayer/mplayer //是生成 mad.h 和 libmad 库的地方 自定义即可
make && make install

3、编译mplayer

解压再进入解压后的目录

./configure --prefix=/work/mplayer/mplayer --cc=arm-linux-gcc --target=arm-linux --enable-static --disable-win32dll --disable-dvdread --disable-dvdread-internal --disable-dvdnav --disable-libdvdcss-internal --disable-mencoder --disable-mp3lib --disable-armv5te --disable-armv6 --enable-fbdev --enable-mad --enable-libavcodec_a --enable-libavcodec_mpegaudio_hp --disable-iconv --enable-linux-devfs --disable-ivtv --language=zh_CN --enable-cross-compile --enable-real --enable-ossaudio --host-cc=gcc --disable-live --with-extraincdir=/work/mplayer/mplayer/include --with-extralibdir=/work/mplayer/mplayer/lib 2>&1|tee logfile
//生成配置文件

–prefix=/work/mplayer/mplayer //生成可执行程序的路径,自定义即可
–with-extraincdir=/work/mplayer/mplayer/include --with-extralibdir=/work/mplayer/mplayer/lib //libmad 和 //mad.h 所在路径 根据自己情况写
–disable-win32dll //禁用win32动态连接库支持
–disable-mp3lib //这是一个浮点运算解码的 2440 上用不了 所以要禁止
–enable-mad //支持 libmad 解码

make && make install

这时候可能会有错误

jz2440 ARM9 开发板移植 mplayer
如果是这种错误的话
vim libavcodec/armv4l/dsputil_arm_s.S
vim libmpeg2/motion_comp_arm_s.S
在这两个文件开头加上
#ifndef HAVE_PLD
.macro pld reg
.endm
#endif
然后我又遇见了这个错误
jz2440 ARM9 开发板移植 mplayer
不知道是为什么 但是去掉 config.mak 33 行处的-s 参数之后 再次 make && make install 就没错误了
这时候会在目录下生成两个可执行文件 mplayer 和 mencoder
mencoder 是一个格式转换工具 比如我在小破站上直接下载的文件 在开发板上用 mplayer 上播放 就提示
jz2440 ARM9 开发板移植 mplayer
就不支持 ,此时这个工具就可以派上用场了 可以用这个转换成 mp4 或者 avi 格式的 但是我看网上说可以直接用 但我的不可以 还是需要 sudo apt 一下
jz2440 ARM9 开发板移植 mplayer
直接百度就出来的 就可以进行格式转换了
扯远了
在生成可执行文件 mplayer 后 将它复制到开发板的 bin 目录下面 就可以使用了

但会出现没有声音的情况

提示 [AO OSS] 音频设置: 无法打开音频设备 /dev/sound/dsp: No such file or directory
此时
mkdir -p /dev/sound
ln -s /dev/dsp /dev/sound/
或者把这个直接加在 rc.S 文件里 虽然我加了 开机后还是没有
但我这样弄了之后 不光没有声音 连动画画面也没有了
然后我测试了下 音频驱动 cat 1.mp3 > /dev/sound/dsp 差点儿给我震聋
嗯 音频驱动没有问题
而且我装了madplay 播放 MP3 文件完全可以播放

我查了一下 mplayer 使用指南

player -zoom -x <x> -y <y> <somefile>  //指定播放的尺寸
mplayer -fs <somefile> //全屏播放


mplayer -ac mad //用libmad播放
-framedrop //慢系统上播放

我又试了一次 mplayer -ac mad -framedrop -fs 01.avi

正在播放 01.mp4。
检测到 Quicktime/MOV 文件格式。
[mov] 找到音频流,-aid 0
[mov] 找到视频流,-vid 1
VIDEO:  [avc1]  544x960  24bpp  29.079 fps    0.0 kbps ( 0.0 kbyte/s)
==========================================================================
打开视频解码器: [ffmpeg] FFmpeg's libavcodec codec family
已选视频编解码器: [ffh264] vfm: ffmpeg (FFmpeg H.264)
==========================================================================
==========================================================================
打开音频解码器: [faad] AAC (MPEG2/4 Advanced Audio Coding)
AUDIO: 44100 Hz, 2 ch, s16le, 64.2 kbit/4.55% (ratio: 8026->17640s3c2410-uda1341-superlp: audio_set_dsp_speed:44100 prescaler:66
s3c2410-uda1341-superlp: audio_set_dsp_speed:44100 prescaler:66
0)
已选音频编解码器: [faad] afm: faad (FAAD AAC (MPEG-2/MPEG-4 Audio) decoder)
==========================================================================
AO: [oss] 44100Hz 2ch s16le (2 bytes per sample)
开始播放...
VDec: vo 配置请求 - 544 x 960 (色彩空间首选项: Planar YV12)
找不到匹配的色彩空间 - 重新尝试 -vf scale...
打开视频滤镜: [scale]
VDec: 使用 Planar YV12 作为输出 csp (没有 0)
电影宽高比未定义 - 没使用预放大。
[swscaler @ 0x80b184]No accelerated colorspace conversion found
[swscaler @ 0x80b184]SwScaler: using unscaled yuv420p -> bgr565 special converter
VO: [fbdev] 544x960 => 544x960 BGR 16-bit
A:   0.0 V:   0.0 A-V:  0.000 ct:  0.000   1/  1 ??% ??% ??,?% 0 0

会一直卡在这里不会播放动画 也没有声音 但我点了一下快进键 发现动画 可以快进后退
但还是会卡住
这便很显然 是声卡驱动有问题
我在网上找 发现了一位大神的解决办法 链接

在声卡驱动里 smdk2410_audio_open 函数里修改

if (cold) {
			audio_rate = AUDIO_RATE_DEFAULT;
			audio_channels = AUDIO_CHANNELS_DEFAULT;
			audio_fragsize = AUDIO_FRAGSIZE_DEFAULT;
			audio_nbfrags = AUDIO_NBFRAGS_DEFAULT;
			if ((file->f_mode & FMODE_WRITE)){
				init_s3c2410_iis_bus_tx();
				audio_clear_buf(&output_stream);
			}
			if (!output_stream .buffers && audio_setup_buf(&output_stream))
                  return -ENOMEM;
			
			if ((file->f_mode & FMODE_READ)){
				init_s3c2410_iis_bus_rx();
				audio_clear_buf(&input_stream);
			}
		}

这个问题产生的根源最终追溯到音频的驱动部分。现在大部分的嵌入式板子都使用菲利普 uda1341 音频芯片,因而也都使用了相同一个音频驱动,即 MIZI 公司拥有版权的 linux uda1341 音频驱动,这个驱动基本上符合了 oss 的规范,但是当使用到多段 DMA 音频数据传输时,出现了一个问题,即 DMA 缓冲的建立发生在第一次调用 write()函数将音频数据传送到设备描述符的时候,然而 oss 驱动的调用者通常要在打开音频设备描述时候,就期望获取 DMA 缓冲的信息,然而因为缓冲尚未建立,因而返回缓冲大小为 0 这个结果。

按以上的方法做了,但是还是出现同样的提示,仔细的看了驱动,在驱动上加了大量的调试信息最后发现在smdk2410_audio_ioctl 中调用的一个函数老是返回错误,这个函数是
access_ok(VERIFY_WRITE, inf, sizeof(*inf)),查了这个函数的代码发现返回1的时候是表示可以访问,而不是错误,所以导致下面代码老是出错,其实运行都是对的:
int err = access_ok(VERIFY_WRITE, inf, sizeof(*inf));
if (err)
return err;
于是改成 int err = !access_ok(VERIFY_WRITE, inf, sizeof(*inf));
重新编译内核,就可以了

但是 在我播放一次视频 准备再播放一次的时候 又出现了新的问题 (是不是有毒 所有能碰见的问题都给我遇见了呗 -_-!!!)
jz2440 ARM9 开发板移植 mplayer

无法初始化视频驱动 !

我的运行的命令是 mplayer -ac mad -framedrop -fs
但我播放另外一个视频就可以
于是我去掉 -fs 命令 OK

上一篇: QT播放视频

下一篇: 进程基础知识