import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import java.io.*;
import java.util.*;
public class Player extends MIDlet implements CommandListener {
private VideoRenderer mRenderer;
private VideoDecoder mDecoder;
private Thread mRendererTask;
public Player() {
Queue queue = new Queue();
mRenderer = new VideoRenderer(queue);
mRenderer.addCommand(new Command("Exit", Command.EXIT, 0));
mRenderer.setCommandListener(this);
mDecoder = new VideoDecoder(queue, mRenderer);
}
public void startApp() {
Displayable display = new TestCanvas();
display.addCommand(new Command("Play", Command.SCREEN, 0));
display.addCommand(new Command("Exit", Command.EXIT, 0));
display.setCommandListener((CommandListener) (CommandListener) (CommandListener) this);
Display.getDisplay(this).setCurrent(display);
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
public void commandAction(Command c, Displayable d) {
if (c.getCommandType() == Command.EXIT) {
notifyDestroyed();
}
else {
mDecoder.start();
mRendererTask = new Thread(mRenderer);
mRendererTask.start();
Display.getDisplay(this).setCurrent(mRenderer);
}
}
private void notifyDestroyed() {
throw new UnsupportedOperationException("Not yet implemented");
}
}
class TestCanvas extends Canvas {
protected void paint(Graphics g) {
int w = getWidth();
int h = getHeight();
g.setColor(0xffffff);
g.fillRect(0, 0, w, h);
}
}
class VideoDecoder extends Thread {
private InputBitStream mInput = null;
private Decoder mDecoder = null;
public VideoDecoder(Queue queue, VideoRenderer renderer) {
try {
mInput = new InputBitStream("/video.mpg");
mDecoder = new Decoder(queue, mInput, renderer);
}
catch (IOException ignore)
{}
}
public void run() {
try {
mDecoder.start();
}
catch (IOException ignore)
{}
finally {
mInput.close();
}
}
}
class VideoRenderer extends Canvas implements Runnable {
private Queue mQueue;
private int mWidth;
private int mHeight;
private int mX = 0;
private int mY = 0;
public VideoRenderer(Queue queue) {
mQueue = queue;
}
void setSize(int width, int height) {
mWidth = width;
mHeight = height;
mX = (getWidth() - mWidth) / 2;
mY = (getHeight() - mHeight) / 2;
}
protected void paint(Graphics g) {
if (mBitmap == null) {
g.setColor(0xffffff);
g.fillRect(0, 0, getWidth(), getHeight());
}
else {
// Display fps every 5th frame
if (mFrameCount % 5 == 0) {
g.setColor(0xffffff);
g.fillRect(0, 0, getWidth(), g.getFont().getHeight());
long fps = (1000 * mFrameCount) / (mEndTime - mStartTime);
g.setColor(0x000000);
g.drawString("fps: " + fps, 0, 0, Graphics.TOP | Graphics.LEFT);
}
g.drawRGB(mBitmap.mRgb, 0, mWidth, mX, mY, mWidth, mHeight, false);
}
}
private Bitmap mBitmap = null;
private int mFrameCount = 0;
private long mStartTime = 0;
private long mEndTime = 0;
public void run() {
mBitmap = null;
Picture stored = null;
mStartTime = System.currentTimeMillis();
while (true) {
Picture current = (Picture) mQueue.get();
if (mBitmap == null)
mBitmap = new Bitmap(mWidth, mHeight);
/*
* Display frames in order
*/
if (current.mType == Picture.I_TYPE || current.mType == Picture.P_TYPE) {
if (mFrameCount == 0) {
mBitmap.transform(current);
}
else {
if (stored != null) {
mBitmap.transform(stored);
}
stored = current;
}
}
else if(current.mType == Picture.B_TYPE) {
mBitmap.transform(current);
}
++mFrameCount;
mEndTime = System.currentTimeMillis();
repaint();
}
}
void setCommandListener(Player aThis) {
throw new UnsupportedOperationException("Not yet implemented");
}
}
问题补充:是一个mpeg4解码器程序里面的一个代码,import javax.microedition.midlet.*; import javax.microedition.lcdui.*;这两个类的引用不对。我把整个代码发上来大家看看。就是里面那个player.java不对
cuiran 写道
是什么问题先描述一下?
问题补充:是不是因为网站维护才不能下载的,我也不能下载,你邮箱多少,我发给你吧
yqin 写道
附件下载不了
相关推荐
【标题】:“随便写的代码,大家随便看看” 在这个标题中,虽然没有明确指出具体的技术细节,但是我们可以推测这可能是一个代码分享或者示例代码集合。作者可能是为了展示某个功能、解决某一问题,或者是进行技术...
"企业通用管理后台"这个压缩包文件很可能包含了一个适用于多种企业管理场景的后台系统代码。这样的代码通常涉及到用户管理、权限控制、数据处理、接口设计等多个关键模块。 首先,让我们探讨一下后台管理系统的一般...
在这个“数独游戏的源代码(三个)大家比较一下”的主题中,我们有三个不同的源代码文件:sudoku2.txt、sudoku3.txt和sudoku1.txt。这些文件很可能是用不同的编程语言或算法实现的数独游戏解决方案。下面我们将深入...
在给定的标题“通讯录源代码 大家共享一下”中,我们可以理解到这是一个关于通讯录功能实现的编程项目。作者提到是根据书本上的指导编写的,这意味着这个源代码可能基于基础的编程教程或者是一些进阶的编程实践。 ...
各位高手帮忙看看,有什么问题啊改进一下,菜鸟非常感谢
通过深入研究《写给大家看的C++书》中的源代码,读者不仅可以巩固理论知识,还能提升编程技能,体验到编程的乐趣和实用性。同时,分享源代码也是开源精神的体现,鼓励大家互相学习、交流,共同进步。
【动软代码生成器】是一种高效实用的软件开发工具,旨在帮助程序员快速生成常见的业务代码,从而节省大量的编码时间,提高开发...总之,动软代码生成器是现代软件开发中的一个强大辅助工具,值得开发者们尝试和掌握。
标题中的"hack代码,大家看功能"暗示了这是一些可能用于探索、调试或者优化系统性能的代码片段。描述提到这些代码涉及服务器的创建,这可能包括了网络服务的搭建、配置和管理。 在这个压缩包文件"黑客编程入门源码...
* 这个错误代码表示系统尝试执行了一个无效的代码,导致系统崩溃。 0x0007:储存体控制区块已毁。 * 这个错误代码表示系统的储存体控制区块已经损坏,导致系统崩溃。 0x0008:储存体空间不足,无法处理这个指令。...
清华大学严蔚敏编写的数据结构语言简洁,讲解透彻,只是算法的源代码给出的过少,其中大部分算法需要自己实现,该书给出的伪代码存在缺陷,现将迷宫问题的实现代码奉上,供大家参考。
用同步对象、自定义计数信号量等四种方法实现生产者消费者共享有限缓冲区问题Vc++源代码。问题描述:一些生产者线程各自找出自己要搜索的范围内的素数,并放到一个有限缓冲区——数组中,另一些消费者线程线程将数组...
本报告是关于代码审核的详细报告,涵盖了代码的编写格式、注释风格、变量命名、常量定义、数据类型、参数定义、注释的重要性、安全性等多个方面。 一、代码编写格式 代码的编写格式是否一致?是否有助于代码的维护...
java算法分析与设计之集装箱装载问题源代码 算法作为计算机专业学生的必修课,同时也是软件开发过程中必备的编程思想,对学习研究计算机专业意义重大;正因为这门课程难,所以除了相关方面的书籍,网络资源少的可怜,...
《旅行商问题与C++实现解析》 旅行商问题(Traveling Salesman Problem,简称TSP)是图论中的一个经典问题,它描述了一个旅行商如何寻找最短的路线,以便...希望这份源代码和解答能够帮助大家在学习过程中取得进步。
哲学家就餐问题的分析与代码,供大家参考吧,很详细
本资源包含了一个关于“魔王密码”问题的C语言源代码,这是在学习C语言过程中常见的一种练习题目,旨在锻炼学生的逻辑思维和程序设计能力。 “魔王密码”问题通常是一个简单的加密解密算法,要求编程实现一个函数,...
Windows操作系统会在死机时显示这些代码,以便用户能够快速地找到问题所在。 死机代码分类 死机代码可以分为多种类型,包括: * 文件系统错误 * 设备驱动程序错误 * 网络错误 * 系统配置错误 * 硬件错误 常见...
10. **代码审查**:定期进行代码审查,可以帮助发现潜在问题,提升团队成员之间的交流,同时也能促使大家写出更好的代码。 11. **版本控制**:使用Git等版本控制系统,能够跟踪代码历史,方便回溯和协同工作。 12....
“方便大家聊天的代码”标签进一步强调了这个代码的易用性和实用性。这可能意味着代码结构清晰,注释详细,便于其他开发者理解和修改,或者包含了一些便捷的功能,如自动重连、消息历史记录、多平台支持等。 至于...
由于演示程序里只是添加了普通的C#控件,目前不是很清楚其他的C#控件,或者一些换肤的东西放上去会不会有问题,不过从原理上来说,这个跟C#的窗口是基本无关的,应该不会有问题。 clayui的源码在项目的根目录中,...