- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想按照此处所述使用 OMX 硬件渲染器: http://www.slideshare.net/RaghavanVenkateswaran/iomx-in-android
操作系统:Android 2.3.4
使用的系统库:libmedia、libbinder、libstagefright、libutils
我设备上的 OMX 组件:
组件名称:OMX.ITTIAM.AAC.decode,组件角色:audio_decoder.aac
组件名称:OMX.ITTIAM.AAC.encode,组件角色:audio_encoder.aac
组件名称:OMX.TI.720P.Decoder,组件角色:video_decoder.mpeg4
组件名称:OMX.TI.720P.Decoder,组件角色:video_decoder.avc
组件名称:OMX.TI.720P.Encoder,组件角色:video_encoder.mpeg4
组件名称:OMX.TI.720P.Encoder,组件角色:video_encoder.avc
组件名称:OMX.TI.AAC.decode,组件角色:audio_decoder.aac
组件名称:OMX.TI.AAC.encode,组件角色:audio_encoder.aac
组件名称:OMX.TI.AMR.decode,组件角色:audio_decoder.amrnb
组件名称:OMX.TI.AMR.encode,组件角色:audio_encoder.amrnb
组件名称:OMX.TI.Camera,组件角色:camera.yuv
组件名称:OMX.TI.JPEG.decoder,组件角色:image_decoder.jpeg
组件名称:OMX.TI.JPEG.encoder,组件角色:image_encoder.jpeg
组件名称:OMX.TI.MP3.decode,组件角色:audio_decoder.mp3
组件名称:OMX.TI.VPP,组件角色:iv_renderer.yuv.overlay
组件名称:OMX.TI.Video.Decoder,组件角色:video_decoder.h263
组件名称:OMX.TI.Video.Decoder,组件角色:video_decoder.avc
组件名称:OMX.TI.Video.Decoder,组件角色:video_decoder.mpeg2
组件名称:OMX.TI.Video.Decoder,组件角色:video_decoder.mpeg4
组件名称:OMX.TI.Video.Decoder,组件角色:video_decoder.wmv
组件名称:OMX.TI.Video.encoder,组件角色:video_encoder.mpeg4
组件名称:OMX.TI.Video.encoder,组件角色:video_encoder.h263
组件名称:OMX.TI.Video.encoder,组件角色:video_encoder.avc
组件名称:OMX.TI.WBAMR.decode,组件角色:audio_decoder.amrwb
组件名称:OMX.TI.WBAMR.encode,组件角色:audio_encoder.amrwb
组件名称:OMX.TI.WMA.decode,组件角色:audio_decoder.wma
我已经完成了这些步骤:
1,以这种方式通过 JNI 传递 Android Surface 对象(与在 native MediaPlayer 中完全一样):
JNI(C++):
static void com_mautilus_media_MMediaPlayer_setVideoSurface(JNIEnv *env, jobject thiz)
{
__android_log_print(ANDROID_LOG_INFO, TAG, "setVideoSurface");
MMediaPlayer *mp = getMediaPlayer(env, thiz);
if (mp == NULL )
{
jniThrowException(env, "java/lang/IllegalStateException", NULL);
return;
}
setVideoSurface(mp, env, thiz);
}
static void setVideoSurface(MMediaPlayer *mp, JNIEnv *env, jobject thiz)
{
__android_log_print(ANDROID_LOG_INFO, TAG, "setVideoSurface");
jobject surface = env->GetObjectField(thiz, fields.surface);
if (surface != NULL && mp != NULL)
{
const android::sp<android::Surface> native_surface = get_surface(env, surface);
mp->setVideoSurface(native_surface);
}
}
MMediaPlayer 中的 Surface 变量声明为:
android::sp<android::Surface> surface;
Java:
private Surface mSurface; // accessed by native methods
private SurfaceHolder mSurfaceHolder;
public void setDisplay(SurfaceHolder sh)
{
mSurfaceHolder = sh;
if (sh != null)
{
mSurface = sh.getSurface();
}
else
{
mSurface = null;
}
setVideoSurface(); // Native function call
}
2、初始化IOMX节点:
注意:硬编码值仅用于简单和测试目的
android::sp<android::IServiceManager> serviceManager = android::defaultServiceManager();
android::sp<android::IBinder> binder = serviceManager>getService(android::String16("media.player"));
android::sp<android::IMediaPlayerService> mediaPlayerService = android::interface_cast<android::IMediaPlayerService>(binder);
android::sp<android::IOMX> iomx = mediaPlayerService->getOMX();
android::IOMX::node_id node;
// observer is instance of class derived from android::BnOMXObserver class
iomx->allocateNode("OMX.TI.VPP", observer, &mRendererNode->node);
OMX_PARAM_PORTDEFINITIONTYPE portDefn;
portDefn.nPortIndex = 1;
iomx->getParameter(node, OMX_IndexParamPortDefinition, &portDefn, sizeof(portDefn));
//portDefn.nBufferCountActual = mInBufCnt; // set some suitable value here or don’t update to
//use default value
portDefn.format.video.nFrameWidth = 256; // width of the video to be played
portDefn.format.video.nFrameHeight = 144; // height of video to be played
portDefn.format.video.nStride = 256;
portDefn.format.video.nSliceHeight = 144;
iomx->setParameter(node, OMX_IndexParamPortDefinition, &portDefn, sizeof(portDefn));
portDefn.nPortIndex = 2;
iomx->getParameter(node, OMX_IndexParamPortDefinition, &portDefn, sizeof(portDefn));
//portDefn.nBufferCountActual = iOutBufCnt; // set suitable value or leave to default.
portDefn.nBufferSize = (256 * 144 * 3) / 2;
portDefn.format.video.nFrameWidth = 256;
portDefn.format.video.nFrameHeight = 144;
portDefn.format.video.nStride = 256;
portDefn.format.video.nSliceHeight = 144;
iomx->setParameter(node, OMX_IndexParamPortDefinition, &portDefn, sizeof(portDefn));
3、尝试创建OMX渲染器:
android::sp<android::IOMXRenderer> mOMXRenderer;
mOMXRenderer = omxContext->iomx->createRenderer(surface, "OMX.TI.VPP", OMX_COLOR_FormatYUV420Planar, 256, 144, displayWidth, displayHeight, 0);
总是返回 NULL。
有人知道这有什么问题吗?我在初始化错误的组件吗?或者必须遵循一些特殊的调用顺序?还是别的?
最佳答案
使用 IOMX.h 中定义的 createRendererFromJavaSurface
关于android - 使用 OpenMAX IL 硬件渲染到 Android Surface,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13730356/
如果我运行 .NET 编译器,它会生成一个包含中间语言代码 (IL) 的文件,并将其放入一个 .exe 文件(例如)。 如果我使用像 ildasm 这样的工具,它会再次显示 IL 代码。 但是,如果我
我正在努力寻找将为对象创建引用的位置以及将在哪个阶段创建它从程序到中间代码或中间代码到 native 代码. 最佳答案 This article might help : Typically, app
我正在尝试将这个简单的类转换为 IL 代码: public class IL { Dictionary props = new Dictionary() { {"1",1} }; } 事实上,在尝
我一直在查看有关 CLR Profiling API 的一些文章,其中许多文章都谈到调用 SetILFunctionBody() 来进行实际的 IL 重写;但是,这些文章都没有真正解释您可以使用什么来
C# 编译成 IL,然后很容易使用 ILSpy 或 dotPeek 反编译回 C#。 是否有任何工具可以将相同的 IL 反编译成 F#? 即是否有一种通过 IL 将 C# 转换为 F# 的偷偷摸摸的方
像 C# 方法 IL 一样发出 IL 但获取 System.InvalidProgramException:公共(public)语言运行时检测到无效程序。 示例: public static
我想为多线程应用程序生成 IL。作为第一步 我编写了一个简单的应用程序并使用 ILSpy 检查并生成了 IL。 public class ThreadTesting { public stat
是否有任何以 VS 插件或独立应用程序形式存在的 IL 级调试器? Visual Studio 的调试器很棒,但它允许您在 HLL 代码级别或汇编语言上进行调试,您无法调试 IL。 在某些情况下,有机
我已经编辑了简化它的问题 我有一个在这样的域中工作的应用程序: http://localhost:8092/myapp 如果我访问 http://localhost:8092/myapp/ticket
我正在使用2个选择标签。它们的内容可以在网页内修改(通过javascript)。 默认情况下,grails仅采用选定的选项(如果启用了多个,则为所有选定的选项),并将其传递给 Controller
您好,我试图通过grails在Windows控制台中运行一些命令。我这个代码 def pruebaMail() { "mkdir C:\\pruebaMail".execute()
这在html中工作正常,但在gsp中却不能。 反馈: GET http://translate.google.com/translate_tts?ie=utf-8&tl=en&q=hello%20w
我一直在研究 IL,我注意到类似 Prefix1 的操作码,文档基本上告诉我不用担心。当然,这让我很好奇这些不同的前缀操作码实际上是做什么的。谷歌快速搜索没有找到任何结果,所以我想我应该问问这里的专家
我是个新手。我现在在我的域类中遇到问题。我有3个域类,患者类,护士类和 NursePatient类, NursePatient类类是一个复合键,您可以在其中查看谁是患者的主治护士,因此,如果您查看其表
当我尝试从参数分配值时,它现在无法正常工作。 System.out.println(params.test) // I see 0 int test = params.test System.ou
如果我有一个程序集,我想更新一些文件,我需要用什么工具来执行此操作? 例如,在 java 中,可以解压缩 jar 文件更新所需的 .class 并重新压缩 jar。我怎样才能在 .NET 中完成同等的
public static class Extensions { public static T Include(this System.Enum type,T value) where T:
因此我需要对 DLL 文件进行非常简单的更改。 我已经使用 Reflector 成功地将 dll 文件导出为 IL 语言,并且找到了我需要进行的更改(它只是更改了一个 URL)。因此,如果我在记事本中
更多地考虑这是一个学术问题而不是实际问题。 在重新发明轮子时,即编写一个迷你 ORM/类型映射器时,我发出了一些 IL 以将对象的属性转换为添加到 SqlCommand 的 SqlParameters
很难学习“ float ”、“溢出”、“清除”和其他一些属性,所以请帮我找到好的在线网站来学习这些属性.. 我打开了一些网站来制作类似我发现的设计 http://wix.com我很欣赏它的导航栏,所以
我是一名优秀的程序员,十分优秀!