LVC (videolan) 播放高清surface 出错解决方法

LVC (videolan) 播放高清节目采用OMX解码时,重新进入播放会导致surface 出错,造成采用软解卡顿的问题,错误信息如下:

10-28 04:25:25.069 E/BufferQueueProducer( 1465): <span style="color:#FF0000;">[SurfaceView] connect(P): already connected (cur=2 req=3)</span>
10-28 04:25:25.069 E/MediaCodec( 4912): <span style="color:#FF0000;">native_window_api_connect returned an error: Invalid argument (-22)</span>
10-28 04:25:25.070 E/MediaCodec( 4912): configure failed with err 0xffffffea, resetting...

出现这个问题的原因是播放切换推出时,surfaceView仍然 被占用,导致第二次进去时出错,解决的方法是

重新构建SurfaceView:       

gSurfaceView.setVisibility(ViewStub.GONE)
gSurfaceView.setVisibility(ViewStub.VISIBLE);

播放前重新attachViews 给AWindow;实现代码如下:

if(gSurfaceView.getVisibility() != View.GONE)
		{
		  gSurfaceView.setVisibility(View.GONE);
		}
		
		if(gSurfaceView.getVisibility() != View.VISIBLE)
		{
		  gSurfaceView.setVisibility(View.VISIBLE);
		}
		
	    IVLCVout vout = mVlcPlayer.getVLCVout();
	    vout.setVideoView(gSurfaceView);
	    if(vout.areViewsAttached())
	    {
	      vout.detachViews();
	    }
	    vout.attachViews();
可能某些版本会出现类似的问题,所以正常播放并不需要调用类似的方法,期望下个版本没有这个问题。


<think>好的,用户想知道如何用单片机控制双74LVC245APW芯片的方法。首先,我需要回忆一下SN74LVC245A这个芯片的功能和引脚定义。根据引用内容,这个芯片是双向总线驱动器,用于电平转换和驱动,引脚包括方向控制DIR和输出使能OE。还有另一个引用提到74LVC4245的DIR和OE控制传输方向和使能,这可能和LVC245类似。 用户提到使用双芯片,也就是两个74LVC245APW,需要同时控制它们。首先,我需要确定每个芯片的连接方式。每个LVC245有DIR和OE引脚,这两个信号需要由单片机控制。假设单片机需要同时驱动两个芯片,可能需要为每个芯片单独设置DIR和OE,或者共享控制线,具体取决于应用需求。 接下来,硬件连接方面,需要考虑电源部分。根据引用3,如果是双电源芯片,需要注意VCCA和VCCB的电压,但LVC245APW可能不是双电源,需要确认数据手册。假设这里用的是单电源,比如3.3V或5V,那么VCC连接到相应的电压,GND接地。 然后,数据总线的连接。每个芯片的A端连接到单片机,B端连接到外部设备。如果是双向通信,DIR需要根据数据传输方向切换。例如,当单片机发送数据到外部设备时,DIR置高;接收时置低。OE引脚控制输出使能,当OE为低时芯片工作,高电平时高阻态,防止总线冲突。 对于两个芯片的控制,可能需要分别控制它们的DIR和OE,或者将它们并联使用。如果两个芯片处理不同的数据总线,比如一个是数据总线,另一个是地址总线,那么它们的控制信号可能独立。如果两个芯片用于扩展驱动能力,可能共享DIR和OE,但需要确保总线负载在允许范围内。 软件控制方面,单片机需要通过GPIO控制DIR和OE的电平状态。例如,初始化时将OE置低使能芯片,DIR根据传输方向设置。在数据传输前设置正确的方向,然后进行读写操作。需要注意的是,切换方向时可能需要短暂延时,确保信号稳定。 可能遇到的问题包括总线冲突,比如两个芯片同时输出导致冲突,所以OE的控制时机很重要。另外,电平匹配需要确保单片机的IO电压与芯片的VCC兼容,比如如果单片机是3.3V,而外部设备是5V,LVC245可以进行电平转换,这时需要确认芯片的电源是否正确连接。 总结步骤:1. 确定每个芯片的电源和地连接正确;2. 连接数据总线A到单片机,B到外部设备;3. 使用单片机的GPIO控制每个芯片的DIR和OE;4. 根据数据传输方向设置DIR电平;5. 在需要通信时使能OE,结束后禁用防止冲突。此外,需要注意总线的负载能力和信号完整性,可能需要上拉电阻或缓冲器。 现在需要将这些思路整理成结构化的回答,分步骤说明硬件连接和软件控制,并提醒注意事项。同时,根据用户提供的引用内容,确保引用正确的部分,比如DIR和OE的功能来自引用3。还要生成相关问题,比如如何防止总线冲突、如何扩展更多芯片等。</think>### 如何用单片机控制双74LVC245APW芯片 #### 一、芯片功能与引脚定义 74LVC245APW是双向总线驱动器,支持3.3V/5V电平转换,主要控制引脚为: - **DIR**:方向控制,高电平时数据从A→B传输,低电平时B→A传输[^3]。 - **OE**(输出使能):低电平有效,高电平时总线高阻态[^4]。 #### 二、硬件连接方法 1. **电源与地**: - 单片机的VCC(3.3V或5V)连接到两个芯片的VCC引脚(需与目标设备电平匹配)[^1]。 - 所有GND引脚连接到共地。 2. **数据总线连接**: - **A端**:每个芯片的A0-A7连接到单片机的GPIO(如P0-P7)。 - **B端**:每个芯片的B0-B7连接到外部设备总线。 3. **控制信号连接**: - **DIR控制**:单片机的两个GPIO分别连接两个芯片的DIR引脚(独立控制方向)。 - **OE控制**:单片机的两个GPIO分别连接两个芯片的OE引脚(独立使能)。 #### 三、软件控制逻辑 1. **初始化设置**: ```c // 假设DIR1、DIR2、OE1、OE2为单片机GPIO void Init_74LVC245() { DIR1 = 0; // 默认B→A输入 DIR2 = 0; OE1 = 1; // 初始禁用 OE2 = 1; } ``` 2. **数据传输流程**: - **发送数据(单片机→外部设备)**: ```c OE1 = 0; // 使能芯片1 DIR1 = 1; // A→B方向 PORT0 = data; // 数据写入A端 // 延时等待信号稳定 OE1 = 1; // 禁用芯片1 ``` - **接收数据(外部设备→单片机)**: ```c OE1 = 0; // 使能芯片1 DIR1 = 0; // B→A方向 data = PORT0; // 读取B端数据 OE1 = 1; // 禁用芯片1 ``` #### 四、双芯片配置方案 - **方案1:独立控制** 每个芯片单独控制DIR和OE,适用于需要分时操作不同总线的场景(如分时复用数据与地址总线)。 - **方案2:并联扩展** 两个芯片的A端并联连接到单片机,B端并联到外部总线,共享DIR和OE信号,增强驱动能力(需确保总线负载在芯片允许范围内)。 #### 五、注意事项 1. **电平匹配**:若单片机为3.3V,外部设备为5V,需将芯片VCC接5V以实现电平转换[^1]。 2. **总线冲突**:同一时刻只能有一个芯片处于输出使能状态(OE=0),否则会导致总线冲突。 3. **信号延时**:切换DIR或OE后,需添加短暂延时(如1-10μs)确保电平稳定。 #### 引用说明 - DIR和OE的控制逻辑基于74LVC4245的典型应用。 - 电平转换功能参考SN74LVC245A的特性。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值