附件需要在android目录下编译,生成的so可以在ndk使用,支持yuyv/nv12/rgba3种格式

external/skia也需要略作修改

diff --git a/include/core/SkStream.h b/include/core/SkStream.h

index 43c3c8c..eb504bb 100755

--- a/include/core/SkStream.h

+++ b/include/core/SkStream.h

@@ -351,6 +351,7 @@ public:

virtual size_t getLength() const SK_OVERRIDE;

virtual const void* getMemoryBase() SK_OVERRIDE;

+       virtual bool markSupport() SK_OVERRIDE;

private:

SkData* fData;

diff --git a/src/core/SkStream.cpp b/src/core/SkStream.cpp

index ceb30d5..2972343 100755

--- a/src/core/SkStream.cpp

+++ b/src/core/SkStream.cpp

@@ -314,6 +314,7 @@ static SkData* newFromParams(const void* src, size_t size, bool copyData) {

}

}

+

SkMemoryStream::SkMemoryStream() {

fData = SkData::NewEmpty();

fOffset = 0;

@@ -343,6 +344,12 @@ SkMemoryStream::~SkMemoryStream() {

fData->unref();

}

+bool SkMemoryStream::markSupport(){

+    //for show whether support reset() or mark() in java, add by WH

+    return true;

+}

+

+

void SkMemoryStream::setMemoryOwned(const void* src, size_t size) {

fData->unref();

fData = SkData::NewFromMalloc(src, size);

diff --git a/src/images/SkHwJpegUtility.cpp b/src/images/SkHwJpegUtility.cpp

index 9c7b434..5e9c5ae 100755

--- a/src/images/SkHwJpegUtility.cpp

+++ b/src/images/SkHwJpegUtility.cpp

@@ -13,13 +13,16 @@

* See the License for the specific language governing permissions and

* limitations under the License.

*/

+

+//#define DEBUG_HW_JPEG

#include "SkHwJpegUtility.h"

#include "SkCanvas.h"

#ifdef DEBUG_HW_JPEG

#include "utils/Log.h"

#undef LOG_TAG

#define LOG_TAG "SkHwJpegUtility"

-#define WHLOG LOGE

+#define WHLOG ALOGD

+#define WHREDLOG ALOGE

#endif

/

@@ -514,6 +517,7 @@ SkJpegVPUMemStream::SkJpegVPUMemStream(SkStream * stream, size_t *len){

hw_jpeg_VPUMallocLinear(&vpuMem, mallocSize);

if(vpuMem.vir_addr != NULL)

{

+               WHLOG("SkJpegVPUMemStream virtual addr: %p ", vpuMem.vir_addr);

stream->rewind();

bool readApp1 = false, readApp0 = false, readSof = false, error = false;

unsigned short twoBytes = 0;

@@ -524,7 +528,7 @@ SkJpegVPUMemStream::SkJpegVPUMemStream(SkStream * stream, size_t *len){

break;

}

size_t readBytes = stream->read(&twoBytes,2);//FIX ME if big edian

-                       WHLOG("meet mark : 0x%x, readBytes: %d", twoBytes, readBytes);

+                       WHLOG("meet mark : 0x%x, readBytes: %d, bytesInStream:%d", twoBytes, readBytes, bytesInStream);

error = (readBytes<=0);

if(error){

break;

@@ -533,6 +537,10 @@ SkJpegVPUMemStream::SkJpegVPUMemStream(SkStream * stream, size_t *len){

memcpy(mem, &twoBytes, sizeof(unsigned short));

mem += readBytes;

switch(twoBytes){

+                               case 0xDAFF:

+                                       readApp1 = true;

+                                       readApp0 = true;

+                                       break;

case 0xD9FF://EOI

readApp1 = true;

readApp0 = true;

@@ -546,6 +554,8 @@ SkJpegVPUMemStream::SkJpegVPUMemStream(SkStream * stream, size_t *len){

case 0xC2FF://SOF2

if(twoBytes == 0xC0FF || twoBytes == 0xC2FF){

readSof = true;

+                                               //fix error

+                                               //readApp0 = true;

} else if(twoBytes == 0xE0FF){

readApp0 = true;

}else if(twoBytes == 0xE1FF){

diff --git a/src/images/SkImageDecoder_libjpeg.cpp b/src/images/SkImageDecoder_libjpeg.cpp

index 003a77e..a8513c1 100755

--- a/src/images/SkImageDecoder_libjpeg.cpp

+++ b/src/images/SkImageDecoder_libjpeg.cpp

@@ -30,7 +30,9 @@ extern "C" {

#include "jerror.h"

}

-//#define HW_JPEG_DEBUG

+//extern "C" void *memcpy_kernel(void *dest, const void *src, size_t n);

+

+#define HW_JPEG_DEBUG

#ifdef HW_JPEG_DEBUG

#define HW_DEBUG SkDebugf

#else

@@ -596,6 +598,7 @@ do{

if (SkImageDecoder::kDecodeBounds_Mode != mode) {

//use hardvpu mem sometimes when it is not decodeBounds_Mode

bool markSupport = stream->markSupport();

+                       //markSupport = true;

WHLOG("markSupport: %d", markSupport);

if(markSupport){//only markSupport and not justcalwh

#ifdef WH_DEBUG_JPEG

@@ -613,6 +616,7 @@ do{

goto __SOFT_DEC;

}

}

+

HwJpegInputInfo hwInfo;

HwJpegOutputInfo outInfo;

hwInfo.justcaloutwh = SkImageDecoder::kDecodeBounds_Mode != mode? 0:1;

@@ -650,6 +654,8 @@ do{

if(reuseBitmap > 0 && colorType != bm->colorType()){

HW_DEBUG("bitmap is not null, but its config is not according with require.");

}

+

+               HW_DEBUG("bitmap width:%d, height:%d, rowptr:%p", bm->width(), bm->height(), rowptr);

if(hw_jpeg_decode(&hwInfo,&outInfo, &reuseBitmap, bm->width(), bm->height()) >= 0){

if(reuseBitmap < 0){

HW_DEBUG("REUSE BITMAP FAILED.");

@@ -680,9 +686,10 @@ do{

JSAMPLE * rowptr = (JSAMPLE*)bm->getPixels();

char *srcAddr = outInfo.outAddr;

HW_DEBUG("bpr: %d, rowptr: %x, srcAddr: %x, reuseBitmap: %d\n",bpr, rowptr, srcAddr, reuseBitmap);

-                               WHLOG("bpr: %d, rowptr: %x, srcAddr: %x",bpr, rowptr, srcAddr);

+                               HW_DEBUG("bpr: %d, rowptr: %x, srcAddr: %x, ppscale width:%d\n",bpr, rowptr, srcAddr);

while(height < outInfo.outHeight){

memcpy(rowptr, srcAddr, bpr);

+                                       //memcpy_kernel(rowptr, srcAddr, bpr);

rowptr += bpr;

srcAddr += outInfo.ppscalew * pixelBytes;

height++;

2018-10-18 16:02 上传

点击文件名下载附件

下载积分: 灯泡 -1 , 经验 -1

2.29 KB, 下载次数: 30, 下载积分: 灯泡 -1 , 经验 -1

android mjpg格式,android下mjpeg格式硬解码相关推荐

  1. Android 利用V4L2 预览MJPEG格式 USB camera

    介绍 上一篇文章Android 利用V4L2 调用camera介绍了使用V4L2 接口预览camera的基本方法.目前接触过的usb camera支持的图像格式基本上只包括3种: YUV MJPEG ...

  2. Android使用MediaCodec硬解码播放H264格式视频文件

    前些时间,通过各种搜索加请教了好几个同行的朋友,在他们的指点下实现: RTSP+H264实时视频播放播放及把实时视频流保存到手机SD卡中,再对保存的H264格式文件进行播放等基本功能.非常感谢这些朋友 ...

  3. EasyPusher安卓Android手机直播推送之MediaCodec 硬编码H264格式

    EasyPusher安卓Android手机直播推送之MediaCodec 硬编码H264格式 最近在研究EasyDarwin的Push库EasyPusher,EasyPusher可以推送H264视频到 ...

  4. android无法播放视频文件格式,基于Android引入IjkPlayer无法播放mkv格式视频的解决方法...

    写在前面 项目中直接引用或者直接编译源码得到的ijkplayer在播放mkv文件时出现(-10000)的错误,去项目github查看了才知道,默认是不支持mkv和rmvb格式视频的播放的. 用了一天时 ...

  5. Android视频录制并转GIF格式

    一.概述 我们在学习Android时候,往往需要查阅很多的资料教程,这时候经常会发现大神写的博客往往都是图文并茂的,充满可能性,效果直观的,所以自己个人记录一些日常工作中遇到的问题以及见解,也希望能够 ...

  6. Android MediaPlayer支持的音视频格式和协议

    Android MediaPlayer支持的音视频格式和协议 2018年04月18日 18:33:42 阅读数:11127 标签: MediaplayerIjkPlayerAndroid音视频Andr ...

  7. android视频播放格式,Android视频以及视频播放器实例

    首先我们来看一下 Android N 支持的视频文件有哪些.Android N 支持的视频格式下表所示. Android N 支持的视频文件 格式/编码 支持的文件类型 H.263 3GPP(.3gp ...

  8. android判断是否json格式,Android判断json格式将错误信息提交给服务器

    开发中发现, 服务器偶尔会发送错误格式 json 给 Android 客户端, 导致 Android 客户端 json解析失败, 应用异常. 并非服务器有意坑客户端, 而是客户端请求服务器数据时, 除 ...

  9. android xml文件格式,android xml 资源文件中几个格式(@ ? @* @+)的含义

    一.@代表引用资源 1.引用自定义资源.格式:@[package:]type/name android:text="@string/hello" 2.引用系统资源.格式:@andr ...

最新文章

  1. python学习第四课
  2. TSNE算法是什么?该算法有什么缺陷?
  3. autosar架构详细介绍_【技术】基于AUTOSAR的电机驱动系统分析
  4. python32-python32和
  5. java纯粹面向对象_Java的面向对象特征
  6. 每日简单小妙招:使用python自动登录CSDN等各大网站
  7. python︱ collections模块(namedtuple/defaultdict/OrderedDict等)
  8. 模板---函数模板,类模板等
  9. Mybatis-学习笔记(3)mapper配置文件
  10. android模拟器设置静态ip,安卓模拟器多开窗口挂手游切换不同IP防封号技术讲解...
  11. TCP和UDP对比的优势和劣势
  12. excel因为文件格式或文件扩展名无效,请确定文件未损坏(Excel文件格式或文件扩展名无效)...
  13. 重装系统后如何恢复oracle10g数据…
  14. 《程序员的职业修养》读后感(一):专业主义
  15. 视频截帧:javacv实现视频截帧功能
  16. 【重磅】清华大学法学院教授何海波:以数据推动法治(视频+PPT)
  17. 视频格式转换方法(不用下载任何软件)
  18. php赵普,赵普辞职央视主播一年多 自己创办了“东家守艺”
  19. 深度:保健产品市场正在经历深度震荡与变革转型,新时代环境下孕育哪些创新发展机会?
  20. .NET Core 性能监控

热门文章

  1. 数学打比方(张量积和笛卡尔积)
  2. 基于字符函数和字符串函数的研究
  3. 基于计算机视觉的智慧养老系统
  4. [简明C语言]分支和循环P_2:分支 - swtich语句
  5. 鼠标点击响应双击问题修复
  6. 【计算机图形学】期末考试课后习题重点复习(第3-4章)
  7. tkinter的容器组件Frame讲解
  8. 域名重定向的解决方案(2)
  9. 使用ObjectARX在AutoCAD2002中画直线
  10. 如何用纯 CSS 创作一个极品飞车 loader 1