首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android开发笔记(一百三十)截图和录屏

getSurface : 获取图像渲染表面。在实现截图功能,这里表面对象要作为createVirtualDisplay方法输入参数。...configure : 设置媒体编码参数,包括视频格式、视频宽高、视频位率、视频帧率等等。 createInputSurface : 创建一个用于输入表面对象。...在实现录屏功能,这里表面对象要作为createVirtualDisplay方法输入参数。 start : 开始编码。 dequeueOutputBuffer : 给输出缓冲区排队。...返回该输出缓冲区索引位置。 getOutputFormat : 获取输出格式。 getOutputBuffer : 根据索引位置获取输出缓冲区数据。...Log.d(TAG, "缓冲区索引为" + index); if (index == MediaCodec.INFO_OUTPUT_FORMAT_CHANGED) { //输出格式发生变化

2.9K40

LiTr:适用于Android轻量级视频音频转码器

客户端连续在MediaCodec上向缓冲区加载数据并接收回缓冲区,使用缓冲区队列与MediaCodec实例进行交互: 客户端从MediaCodec中使输入缓冲区出队,并在可用时接收。...客户端使MediaCodec输出缓冲区出队,并在可用时接收一个缓冲区。 客户端使用输出数据并将缓冲区释放回MediaCodec。...在其他情况下(例如调整视频大小),必须引入渲染层以将解码器输出转换为编码器输入。 在处理视频,我们可以将MediaCodec配置为与ByteBuffer或Surface一起用作输入/输出。...它在Surface模式下同时运行编码器和解码器编解码器,并使用OpenGL将解码器输出渲染编码器输入上。 音轨转码器只能更改比特率(目前)。...解码编码源数据。 将解码器输出渲染编码器输入上。 编码渲染数据。 编写编码目标数据。 每个步骤执行特定功能,并且与上一个和/或下一个步骤具有明确定义交互。

2.4K20
您找到你想要的搜索结果了吗?
是的
没有找到

LiTr:适用于Android轻量级视频音频转码器

客户端连续在MediaCodec上向缓冲区加载数据并接收回缓冲区,使用缓冲区队列与MediaCodec实例进行交互: 客户端从MediaCodec中使输入缓冲区出队,并在可用时接收。...客户端使MediaCodec输出缓冲区出队,并在可用时接收一个缓冲区。 客户端使用输出数据并将缓冲区释放回MediaCodec。 重复该过程,直到处理完所有帧。...客户端不拥有缓冲区,使用完缓冲区后必须将其释放回MediaCodec。否则,在某些时候,所有出队尝试将始终失败。不再需要MediaCodec实例,它将停止并释放它。...在其他情况下(例如调整视频大小),必须引入渲染层以将解码器输出转换为编码器输入。 在处理视频,我们可以将MediaCodec配置为与ByteBuffer或Surface一起用作输入/输出。...它在Surface模式下同时运行编码器和解码器编解码器,并使用OpenGL将解码器输出渲染编码器输入上。 音轨转码器只能更改比特率(目前)。

3.3K20

基础渲染系列(十三)——延迟着色

最终延迟通道将中间状态转换为最终正确颜色。 ? (反色) 当场景以低动态范围-LDR-颜色(默认设置)渲染,Unity执行此操作。在这种情况下,颜色将写入ARGB32纹理。...因此,最终会直接着色结果而不是将几何数据写入G缓冲区。这个流程是不正确。我们必须输出几何数据,而不要直接计算照明。...(反照率和遮挡关系) 你可以使用场景视图或帧调试器检查第一个G缓冲区内容,以验证我们是否正确填充了它。这会向你显示其RGB通道。但是,不会显示A通道。要检查遮挡数据,可以将其临时分配给RGB通道。...打开场景后,请确保用于镜像球体和地板材质“Metallic ”和“Smoothness”设置为1。此外,还必须使用我们着色器。 ? ? (场景和反射探针) 该场景具有三个反射探测器。...G缓冲区已满,你可以通过帧调试器检查第四个缓冲区RT 3来看到这一点。 ? ?

2.7K20

让光学3D传感器「看见」透明杯子,这是来自谷歌、哥大新研究

让机器更好地感知透明表面,不仅能提高安全性,还能在非结构化应用中开辟新交互——比如处理厨房用具或对塑料进行回收分类机器人,或是在室内环境中导航或在玻璃桌面上生成增强现实 (AR) 可视化效果。...遮挡删除跟透明对象有关所有像素,以便填充其正确深度。然后,使用一个全局优化模块,从已知表面开始扩展深度,并使用预测表面法线来指导重建形状,然后使用预测遮挡边界来保持不同对象之间分离。...点云是基于其相应深度图像生成生成,用其表面法线着色。 最重要是,ClearGrasp 输出深度可以直接用作使用 RGB-D 图像最先进操作算法输入。...使用平行颌夹持器,成功率从基线 12% 提高 74%,吸物从 64% 提高 86%。 使用 ClearGrasp 操作新透明对象。...值得注意是,这些条件是有挑战性:没有纹理背景,复杂物体形状和定向光,同样有令人困惑阴影和焦散(光线从表面反射或折射产生模式)。

53820

「Android音视频编码那点破事」第四章,使用MediaCodec实现H264编码

这个类使用很简单,只需要给定一个Surface(输入)和一个File(输出),它就给你生成一个标准mp4文件。   但越是简单东西便意味着越难以控制,MediaRecorder缺点很明显。...难点在于running状态,也就是上图右侧绿色部分流程。   MediaCodec处于Running状态,内部会持有两个缓冲区队列,一个输入缓冲区,一个输出缓冲区。...当我们向输入缓冲区输入数据后,MediaCodec从中取出数据,送到硬件进行编码,编码结束后送到缓冲区,这是一个异步过程,这时候我们可以从输出缓冲区取出编码后数据。...Surface作为输入,所以不需要直接操作输入缓冲区,只需要把MediaCodec生成Surface绑定OpenGL即可,所以这里使用了一个纹理封装CodecTextureWrapper,请参考前几章...* 这里必须把outputFormat设置给MediaMuxer,而不能不能用inputFormat代替,它们不一样,不然无法正确生成mp4文件 */

67220

商汤提出手机端实时单目三维重建系统,实现逼真AR效果和交互

在深度估计方面,提出结合多视图半全局匹配算法和深度神经网络优化后处理过程鲁棒地估计场景深度。在表面网格生成过程,本文提出在线网格生成算法可以实时增量地融合关键帧深度稠密网格中,从而重建场景表面。...通过定性和定量实验验证,所研制单目三维重建系统能够正确处理虚拟物体与真实场景之间遮挡和碰撞,在手机端实现逼真的 AR 效果和交互。...该位姿经过后端全局优化后进入深度估计模块,对于新增每个关键帧,首先基于多视图半全局匹配方法计算关键帧初始深度图,然后采用置信度和深度神经网络优化深度图噪声,优化后深度图输入增量式网格生成模块后实时构建场景表面稠密网格...和高阶感知损失 ? 三个部分。 ? 网络第二个阶段输入为原始深度图和一阶段深度图噪声预测结果,使用 U-Net 残差深度优化网络优化原始输入深度,得到更高质量深度输出。...Mobile3DRecon 系统能够正确处理虚拟物体与真实场景之间遮挡和碰撞,从而达到逼真的AR效果。

2.1K30

第5章-着色基础-5.3-实现着色模型

正如我们前面提到,在大多数实现中,顶点着色器负责非着色操作,例如几何变换和变形。生成几何表面属性,转换为适当坐标系,由顶点着色器写出,在三角形上线性插值,并作为不同着色器输入传递像素着色器。...这将产生不正确结果,如图5.11所示。 图5.11. 两个光向量之间插值。在左侧,插值前对其进行归一化导致插值后方向不正确。在右侧,对非归一化向量进行插值产生正确结果。...此实现将使用着色器动态分支功能来循环所有光源。虽然这种简单方法可以很好地适用于相当简单场景,但它不能很好地扩展具有许多光源大型和几何复杂场景。第20章将介绍有效处理大量灯光数量渲染技术。...像素着色器输入与顶点着色器输出相匹配,这些输出输入像素着色器之前在三角形上进行插值。这个像素着色器有两个不同输入表面位置和表面法线,都在应用程序世界空间坐标系中。...例如,每个变体都可以在完全了解最终着色器程序情况下进行优化。然而,随着变体数量增加,这种方法很快变得不切实际。考虑所有不同部分和选项,可能不同着色器变体数量是巨大

3.7K10

第3章-图形处理单元-3.8-像素着色器

跨三角形执行插值类型由像素着色器程序指定。通常我们使用透视校正插值,这样像素表面位置之间世界空间距离随着物体距离缩小而增加。一个例子是渲染延伸到地*线铁轨。...有了输入,像素着色器通常会计算并输出片元颜色。它还可能产生不透明度值并可选择修改其z深度。在合并阶段,这些值用于修改存储在像素中内容。光栅化阶段生成深度值也可以通过像素着色器进行修改。...像素着色器局限性在于它通常只能在交给它片元位置写入渲染目标,而不能从相邻像素读取当前结果。也就是说,像素着色器程序执行时,它不能将其输出直接发送到相邻像素,也不能访问其他人最*更改。...像素着色器请求梯度值,返回相邻片段之间差异。参见图3.15。统一着色器核心具有访问相邻数据能力——保存在同一warp不同线程中——因此可以计算用于像素着色器梯度。...DirectX 11.3中引入了光栅化顺序视图(ROV)以强制执行顺序。这些就像UAV一样;它们可以由着色器以相同方式读取和写入。关键区别在于ROV保证以正确顺序访问数据。

2.1K10

Android MediaCodec 使用说明

MediaCodec 可以用来获得安卓底层多媒体编码,可以用来编码和解码,它是安卓 low-level 多媒体基础框架重要组成部分。 ? MediaCodec 作用是处理输入数据生成输出数据。...首先生成一个输入数据缓冲区,将数据填入缓冲区提供给 codec,codec 采用异步方式处理这些输入数据,然后将填满输出缓冲区提供给消费者,消费者消费完后将缓冲区返还给 codec。...但是使用原始视频数据,最好采用 Surface 作为输入源来替代 ByteBuffer,这样效率更高,因为 Surface 使用更底层视频数据,不会映射或复制 ByteBuffer 缓冲区。...原始视频数据 原始视频数据也是编码器输入数据,解码器输出数据。...,MediaCodec 使用输入输出缓存,异步处理数据。

1.6K20

进阶渲染系列(七)——三向贴图(任意表面纹理化)【进阶篇完结】

我们将当前方法保留为默认方法,但是在定义NO_DEFAULT_UV将切换为不使用UV方法。 1.1 不使用默认UV 网格数据不包含UV,则没有任何UV从顶点传递片段程序。...轴对齐立方体在所有方面都看起来不错,但其中一半以镜像映射结尾。 ? (纹理在另一侧镜像纹理被镜像,这并不总是一个问题,但是使用带有数字测试纹理,这很明显。因此,请确保纹理不要被镜像。...(具有混合偏移材质) 在权重归一化之前,先从权重中减去偏移量,然后看会是什么样子。 ? ? (不正确偏移) 混合权重保持为正时看起来不错,但是负权重从最终数据中消除。...另外,仅在需要才包括UV坐标。 ? 7.3 三向光贴图 剩下要做就是声明我们三向着色器在其元通道中需要法线和位置数据。完成后,照明再次恢复,反照率将正确显示在场景视图中。 ? ?...是的,进行光照贴图,我们最终使用对象空间而不是世界空间。发生这种情况是因为Unity没有为meta pass设置对象世界转换矩阵。

2.2K30

三维图形渲染显示全过程

输出数据为顶点着色器所应输出数据,但是是批量(可编程) 几何着色器:输入是1个图元,输出是N个图元(N>=0) 通过Shader程序可以指定Geometry Shader对顶点信息进行增减。...另外逐像素光照可以在渲染添加并不存在表面细节。如通过bump贴图或normal贴图,在原本平坦表面表现出近似的凹凸效果。 当然,逐像素计算量要比逐顶点要大 ?...如果一个片元通过了所有的测试,新生成片元才能和颜色缓冲区中已存在像素颜色进行Alpha混合,并写入颜色缓冲区 • Alpha测试: ?...在开启了VSync垂直同步,若游戏FPS低于显示器刷新频率,三重缓冲可缓解卡顿现象,然而由于存在2个后备缓冲区,三重缓冲导致画面有一帧延迟。...电子枪换到新一行,准备进行扫描,显示器会发出一个水平同步信号(horizonal synchronization),简称 HSync; 而一帧画面绘制完成后,电子枪回复原位,准备画下一帧前,显示器会发出一个垂直同步信号

3.9K41

3D渲染史诗级级增强!ICCV2021华人作者提出RtS,渲染速度提升128倍

由于着色和飞溅计算复杂性受像素数量限制,而不是曲面的复杂性,因此RtS能够扩展特别复杂场景。 可微着色函数一个例子是神经辐射场NeRF网络:给定空间中位置和观察方向,它输出相应辐射。...使用体渲染对NeRF进行训练,提出方法可以将预训练NeRF转换为表面光场,而无需成本较高光线推进(raymarching)。...光栅化可以表示为一个函数,该函数采用场景参数θ(包含几何属性,如位置、法线或纹理坐标)以及相机参数,并生成屏幕空间几何缓冲区(G-buffers),缓冲区包含距离摄影机最近K个光线交点处插值属性。...为了使这个过程既可微又有效,研究人员将光栅化分为两个阶段:采样函数生成不可微曲面参数,以及求值函产生缓冲区,并且参数随表面类型而变化。...着色步骤输出是一组RGBA缓冲区。 3、多层喷溅Depth-Aware Splatting 着色颜色具有与曲面属性相关导数,但由于它们是使用点采样生成,因此它们在遮挡边界没有导数。

46010

MediaCodec基本原理及使用「建议收藏」

通过上图可以看出,mediacodec作用是处理输入数据生成输出数据。...首先生成一个输入数据缓冲区,将数据填入缓冲区提供给codec,codec采用异步方式处理这些输入数据,然后将填满输出缓冲区提供给消费者,消费者消费完后将缓冲区返还给codec。...所有的同步模式 MediaCodec API都遵循一个模式: 创建并配置一个 MediaCodec 对象 循环直到完成: 如果输入缓冲区就绪,读取一个输入块,并复制输入缓冲区中 如果输出缓冲区就绪...我们知道编解码器被启动后,每个编解码器都会拥有一组输入输出缓存区,但是这些缓存区暂时无法被使用,只有通过MediaCodecdequeueInputBuffer/dequeueOutputBuffer...start后,进入一个for(;;)循环,该循环是一个死循环,以实现不断地去从编解码器输入缓存池中获取包含数据一个缓存区,然后再从输出缓存池中获取编解码好输出数据。

1.9K20

同时使用多个相机流 — Android 相机介绍

一个流用于预览,另一个用于条形码检测 计算摄影学:一个流用于预览,另一个用于人脸或场景检测 正如我们在之前文章中讨论那样,当我们处理帧,存在较大性能成本,并且这些成本在并行流 / 流水线处理中还会成倍增长...(), null, null) 复制代码 如果你正确配置了目标 surfaces,则此代码将仅生成满足 StreamComfigurationMap.GetOutputMinFrameDuration(...为了获取到正确预览尺寸,我们需要对比可用输出尺寸和显示尺寸,同时考虑可以旋转显示。...现在我们已经掌握了在框架支持下使用两个并发流所需知识,我们可以更深入了解目标输出缓冲区配置。...ImageReader 这样阻塞目标缓冲区,我们需要在使用后丢弃这些帧: imageReader.setOnImageAvailableListener({ val frame =

2.3K40

「Android音视频编码那点破事」第五章,使用MediaCodec编码AAC音频数据

封面出自:板栗懒得很 本章仅对部分代码进行讲解,以帮助读者更好理解章节内容。 本系列文章涉及项目HardwareVideoCodec已经开源Github,支持软编和硬编。...上一章我们利用MediaCodec编码视频,使用了Surface,所以可以不直接操作输入缓冲区队列。但是编码音频时候,由于无法使用Surface,所以需要直接操作输入缓冲区队列。   ...最后通过循环从编码器输出缓冲区中拿出AAC数据。这里通过回调把AAC数据送进MediaMuxer进行音视频混合,最后生成mp4文件。...inputBuffers /** * 输入输出缓存队列 */ outputBuffers = codec!!....,很重要 * 这里必须把outputFormat设置给MediaMuxer,而不能不能用inputFormat代替,它们不一样,不然无法正确生成mp4文件

42730

Unity通用渲染管线(URP)系列(四)——方向阴影(Cascaded Shadow Maps)

(防止光线到达它不应该到达地方) 1 渲染阴影 进行物体渲染表面和灯光信息足以计算光照。但是在两者之间可能存在某些阻碍光线东西,导致在我们需要渲染表面上投射了阴影。...这有很多种方法可以实现, 最常见方法是生成一个阴影贴图,该贴图存储光在击中表面之前离开其源距离。任何在同一个方向上更远距离都不能被同一个光源照亮。UnityRP使用这种方法,我们也这样做。...这些是输入参数,其余三个是输出参数。首先是视图矩阵,然后是投影矩阵,最后一个参数是ShadowSplitData结构。 ? 拆分数据包含有关应如何剔除投射对象信息,我们需要将其复制阴影设置中。...我们一直观察伪影被称为暗疮粉刺,这是由于与光方向不完全对齐表面的不正确自阴影引起。随着表面越来越接近平行于光方向,粉刺变得更糟。 ?...因此,对于正面照亮表面,该值为零;光线在至少两个维度中至少一个以45°角入射,该值为1;而表面法线和光方向点积达到零,则为无穷大。因此,需要更多时,偏差自动增加,但没有上限。

6.4K40

Android MediaCodec 硬编码 H264 文件

使用解析 MediaCodec 工作模型 下图展示了 MediaCodec 工作方式,一个典型生产者消费者模型,两边 Client 分别代表输入端和输出端,输入端将数据交给 MediaCodec...输入端和输出端是通过输入队列缓冲区输出队列缓冲区,两条缓冲区队列形式来和 MediaCodec 传递数据。...Running 状态,入队缓冲区带有 EOS 标志, 就会切换到 End of Stream 状态, MediaCodec 不再接受入队缓冲区,但是仍然会对已入队且没有进行编解码操作缓冲区进行操作...另外,调用 reset 方法也进入 Uninitialized 状态。 不再需要 MediaCodec ,调用 release 方法将它释放掉,进入 Released 状态。... MediaCodec 工作发生异常进入 Error 状态,此时还是可以通过 reset 方法恢复过来,进入 Uninitialized 状态。

3.3K12

一文看完 WWDC 2022 音视频相关更新要点丨音视频工程示例

以前,在使用它时有一个严格限制:输入输出 RGB 颜色值都在 0-1 范围内。...通过添加第二个 AVCaptureVideoDataOutput 能力可以扩展内容采集,从而优化视频数据输出:一个输出可以使用较小缓冲区用于预览,另一个可以使用全尺寸 4K 缓冲区进行录制。...完成扫描后,RoomCaptureView 显示最终后处理结果。...包括如何将人们引导正确环境、如何合理利用屏幕空间、怎样对持续移动场景设计 AR 交互、如何考虑人体工程学和有限视野限制、如何使用深度提示以及对体验时长加以限制避免性能问题和用户疲倦。...还介绍了使用 ARKit、RealityKit 和 Object Capture 最佳实践。 要做好对象捕获,有几点需要注意: 选择具有正确特征对象: 物体表面要有足够纹理。

2.5K10

Unity3D-优化设置

一般来说存在纹理都是经过Gamma矫正了,也就是说纹理被采样一个材质上,颜色值已经不是线性了。如果这些纹理用通常计算方式去计算光照和图片效果,在非线性空间计算,这将导致轻微偏差。...即使这些值是在Gamma空间中,所有shader计算对待他们输入都当做在线性空间,此外,把shader输出写到内存中,没有对最终像素应用Gamma矫正。...两种情况: 线性输入 输入颜色值在线性空间下,而在shader中按照线性空间下计算,这些都是正确,但最终输出时候也没有做任何处理(主要Gamma矫正),所以在屏幕显示,屏幕进行了一次display...非线性输入 输入颜色值在非线性空间下(通常表现为纹理),而在shader中把该值当成是线性空间下计算(产生了偏差),这是不正确,在最终输出时候也没有做任何处理,但在屏幕显示,进行了display...Linear与Gamma 混合 混合是在帧缓冲区发生使用Gamma Rendering,这表示颜色之间混合是在非线性空间下计算。然而这是不正确

86510
领券