Bitmap的释放流程


      上篇文章谈到了Bitmap的生成,现在说说Bitmap的释放,要不总是有种没说完的感觉。

      Bitmap的释放相对来说,比较简单,还是先上张时序图吧!


一些说明:
1,AndroidPixelRef的设置是在Bitmap生成的GraphicsJNI::setJavaPixelRef里完成的,这里可以参见文章《Bitmap的生成流程之BitmapFactory.decodeResource VS BitmapFactory.decodeStream》。具体代码如下:

[cpp]  view plain copy
  1. bool GraphicsJNI::setJavaPixelRef(JNIEnv* env, SkBitmap* bitmap,  
  2.                                   SkColorTable* ctable, bool reportSizeToVM) {  
  3. ......  
  4.     SkPixelRef* pr = reportSizeToVM ?  
  5.                         new AndroidPixelRef(env, addr, size, ctable) :  
  6.                         new SkMallocPixelRef(addr, size, ctable);  
  7.   
  8.   
  9. ......  
  10. }  
2,VMRuntime.trackExternalFree把Bitmap占用的虚拟机heap内存归还。如果你有兴趣的话,请具体参见dalvik\vm\native\dalvik_system_VMRuntime.c。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
视频 MediaCodec 解码流程通常分为以下几个步骤: 1. 创建 MediaCodec 对象:使用相应的解码器名称创建 MediaCodec 对象,例如 H.264 视频解码可以创建 MediaCodec 对象 `MediaCodec.createDecoderByType("video/avc")`。 2. 配置解码器:设置解码器的输入格式和输出格式,输入格式可以是容器格式(如 mp4、flv 等)或者裸流格式(如 H.264、H.265 等),输出格式可以是 Surface、ByteBuffer 等。 3. 启动解码器:调用 MediaCodec 的 start() 方法启动解码器,此时解码器进入执行状态。 4. 推送数据:将需要解码的数据输入到解码器中,可以是视频流、音频流等。对于视频流,通常是将 H.264 等压缩格式的数据进行解码,得到原始的 YUV 数据。 5. 获取解码数据:调用 MediaCodec 的 dequeueOutputBuffer() 方法获取解码后的数据,返回一个输出缓冲区的索引,通过该索引可以获取输出缓冲区中的数据。 6. 处理解码数据:根据输出缓冲区的格式,将数据转化为可显示的格式,如将 YUV 数据转化为 Bitmap 或者 Surface 中的图像。 7. 释放输出缓冲区:使用完输出缓冲区后,需要调用 MediaCodec 的 releaseOutputBuffer() 方法释放输出缓冲区。 8. 停止解码器:当解码完成或者需要停止解码器时,调用 MediaCodec 的 stop() 方法停止解码器。 以上是 MediaCodec 解码流程的主要步骤,具体实现时需要根据不同的需求和情况进行调整。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值