mplayer移植到S3C2440(二)
2013-10-31 14:12
357 查看
相信大家在前面弄了下会发现在开发板上还是不能播放文件,这里还得修改下内核:
内核版本:2.6.12
编译器版本:arm-linux-gcc 3.4.1
1 修改/arch/arm/mach-s3c2410/devs.c
解决文件系统大于30M无法烧到板上的问题:
struct mtd_partition gec24xx_default_nand_part_b[] = {
[0] = {
.name = "Bootload",
.size = 0x00030000,
.offset = 0
},
[1] = {
.name = "Kernel",
.size = 0x001d0000,
.offset = 0x00030000,
},
[2] = {
.name = "RootFileSystem",
.size = 0x03e00000,
.offset = 0x00200000,
}
};
struct s3c2410_nand_set nandset ={
nr_partitions: 3 ,
partitions: gec24xx_default_nand_part_b, //partition_info ,
};
2 修改/sound/oss/s3c2410-oss.c文件,解决mplayer无法使用oss播放音频
音频无法播放的原因及解决:
这个问题产生的根源最终追溯到音频的驱动部分。现在大部分的嵌入式板子都使用菲利普uda1341音频芯片,
因而也都使用了相同一个音频驱动,即MIZI 公司拥有版权的linux uda1341音频驱动,这个驱动基本上符合了oss的规范,
但是当使用到多段DMA音频数据传输时,出现了一个问题,即DMA缓冲的建立发生在第一次调用write()函数
将音频数据传送到设备描述符的时候,然而oss驱动的调用者通常要在打开音频设备描述时候,就期望获取DMA缓冲的信息,
然而因为缓冲尚未建立,因而返回缓冲大小为0这个结果。
解决的办法是在音频驱动源码的smdk2410_audio_open()函数体,加上如下一段代码,
if (!output_stream .buffers && audio_setup_buf(&output_stream))
return -ENOMEM;
添加的位置具体见以下代码的粗体部分:
static int smdk2410_audio_open(struct inode *inode, struct file *file)
{
int cold = !audio_active;
DPRINTK("audio_open\n");
if ((file->f_flags & O_ACCMODE) == O_RDONLY) {
if (audio_rd_refcount || audio_wr_refcount)
return -EBUSY;
audio_rd_refcount++;
} else if ((file->f_flags & O_ACCMODE) == O_WRONLY) {
if (audio_wr_refcount)
return -EBUSY;
audio_wr_refcount++;
} else if ((file->f_flags & O_ACCMODE) == O_RDWR) {
if (audio_rd_refcount || audio_wr_refcount)
return -EBUSY;
audio_rd_refcount++;
audio_wr_refcount++;
} else
return -EINVAL;
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);
}
}
MOD_INC_USE_COUNT;
return 0;
}
改完驱动后,重新编译内核。
重新烧下zImage吧,相信大家照这样下来基本上都能播放文件了。
阅读(596) | 评论(1) | 转发(0) |
0
上一篇:mplayer移植记录(一)
下一篇:mplayer移植到S3C2440(三)制作皮肤
相关热门文章
uboot移植第一课
常州同城好易购 加盟代理 加盟...
LC
4000
D驱动移植
s3c6410 arm移植实验四:qte4...
网卡AX88796(NE2000兼容网卡...
linux守护进程的几个关键地方...
stagefright与opencore对比
嵌入式Linux之我行——u-boot-...
嵌入式Linux之我行——内核、...
CodeNavigator -- 程序员必备...
ChinaUnix & ITPUB社区12周年...
ssh连接出现以下提示,求解...
如何扩展MYSQL
准备做一个大型门户,用户什么...
gbk or utf8
给主人留下些什么吧!~~
chinaunix网友2011-03-02 20:30:55
请问smdk2410_audio_open()函数是在哪个文件里面?
回复 | 举报
评论热议
内核版本:2.6.12
编译器版本:arm-linux-gcc 3.4.1
1 修改/arch/arm/mach-s3c2410/devs.c
解决文件系统大于30M无法烧到板上的问题:
struct mtd_partition gec24xx_default_nand_part_b[] = {
[0] = {
.name = "Bootload",
.size = 0x00030000,
.offset = 0
},
[1] = {
.name = "Kernel",
.size = 0x001d0000,
.offset = 0x00030000,
},
[2] = {
.name = "RootFileSystem",
.size = 0x03e00000,
.offset = 0x00200000,
}
};
struct s3c2410_nand_set nandset ={
nr_partitions: 3 ,
partitions: gec24xx_default_nand_part_b, //partition_info ,
};
2 修改/sound/oss/s3c2410-oss.c文件,解决mplayer无法使用oss播放音频
音频无法播放的原因及解决:
这个问题产生的根源最终追溯到音频的驱动部分。现在大部分的嵌入式板子都使用菲利普uda1341音频芯片,
因而也都使用了相同一个音频驱动,即MIZI 公司拥有版权的linux uda1341音频驱动,这个驱动基本上符合了oss的规范,
但是当使用到多段DMA音频数据传输时,出现了一个问题,即DMA缓冲的建立发生在第一次调用write()函数
将音频数据传送到设备描述符的时候,然而oss驱动的调用者通常要在打开音频设备描述时候,就期望获取DMA缓冲的信息,
然而因为缓冲尚未建立,因而返回缓冲大小为0这个结果。
解决的办法是在音频驱动源码的smdk2410_audio_open()函数体,加上如下一段代码,
if (!output_stream .buffers && audio_setup_buf(&output_stream))
return -ENOMEM;
添加的位置具体见以下代码的粗体部分:
static int smdk2410_audio_open(struct inode *inode, struct file *file)
{
int cold = !audio_active;
DPRINTK("audio_open\n");
if ((file->f_flags & O_ACCMODE) == O_RDONLY) {
if (audio_rd_refcount || audio_wr_refcount)
return -EBUSY;
audio_rd_refcount++;
} else if ((file->f_flags & O_ACCMODE) == O_WRONLY) {
if (audio_wr_refcount)
return -EBUSY;
audio_wr_refcount++;
} else if ((file->f_flags & O_ACCMODE) == O_RDWR) {
if (audio_rd_refcount || audio_wr_refcount)
return -EBUSY;
audio_rd_refcount++;
audio_wr_refcount++;
} else
return -EINVAL;
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);
}
}
MOD_INC_USE_COUNT;
return 0;
}
改完驱动后,重新编译内核。
重新烧下zImage吧,相信大家照这样下来基本上都能播放文件了。
阅读(596) | 评论(1) | 转发(0) |
0
上一篇:mplayer移植记录(一)
下一篇:mplayer移植到S3C2440(三)制作皮肤
相关热门文章
uboot移植第一课
常州同城好易购 加盟代理 加盟...
LC
4000
D驱动移植
s3c6410 arm移植实验四:qte4...
网卡AX88796(NE2000兼容网卡...
linux守护进程的几个关键地方...
stagefright与opencore对比
嵌入式Linux之我行——u-boot-...
嵌入式Linux之我行——内核、...
CodeNavigator -- 程序员必备...
ChinaUnix & ITPUB社区12周年...
ssh连接出现以下提示,求解...
如何扩展MYSQL
准备做一个大型门户,用户什么...
gbk or utf8
给主人留下些什么吧!~~
chinaunix网友2011-03-02 20:30:55
请问smdk2410_audio_open()函数是在哪个文件里面?
回复 | 举报
评论热议
相关文章推荐
- mplayer移植记录(一)
- u-boot移植记录
- Qt界面的一些技巧和实现笔记
- qt移植到s3c2440开发板上
- Qt/e输入法程序设计指南
- QtEmbedded软键盘输入法实战
- Qt实现大图片快速缩小的算法
- Qt资料下载网站
- UNIX下c语言的图形编程
- 拷贝构造函数遇到指针的问题
- C语言常见的几个排序
- const注意的几个事项
- 自适应图片宽度的jQuery焦点幻灯轮播代码
- 教你如何将ARM的代码直接拷到驱动程序中
- 制作.jffs2文件系统
- 通过NFS挂载使LINUX挂载到S3C2440开发板
- 制作.cramfs文件系统
- 【PAT Advanced Level】1013. Battle Over Cities (25)
- <s:select ></s:select>使用
- Darling Divas Tot Terrors In Tiaras