android mjpg格式,android下mjpeg格式硬解码
附件需要在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格式硬解码相关推荐
- Android 利用V4L2 预览MJPEG格式 USB camera
介绍 上一篇文章Android 利用V4L2 调用camera介绍了使用V4L2 接口预览camera的基本方法.目前接触过的usb camera支持的图像格式基本上只包括3种: YUV MJPEG ...
- Android使用MediaCodec硬解码播放H264格式视频文件
前些时间,通过各种搜索加请教了好几个同行的朋友,在他们的指点下实现: RTSP+H264实时视频播放播放及把实时视频流保存到手机SD卡中,再对保存的H264格式文件进行播放等基本功能.非常感谢这些朋友 ...
- EasyPusher安卓Android手机直播推送之MediaCodec 硬编码H264格式
EasyPusher安卓Android手机直播推送之MediaCodec 硬编码H264格式 最近在研究EasyDarwin的Push库EasyPusher,EasyPusher可以推送H264视频到 ...
- android无法播放视频文件格式,基于Android引入IjkPlayer无法播放mkv格式视频的解决方法...
写在前面 项目中直接引用或者直接编译源码得到的ijkplayer在播放mkv文件时出现(-10000)的错误,去项目github查看了才知道,默认是不支持mkv和rmvb格式视频的播放的. 用了一天时 ...
- Android视频录制并转GIF格式
一.概述 我们在学习Android时候,往往需要查阅很多的资料教程,这时候经常会发现大神写的博客往往都是图文并茂的,充满可能性,效果直观的,所以自己个人记录一些日常工作中遇到的问题以及见解,也希望能够 ...
- Android MediaPlayer支持的音视频格式和协议
Android MediaPlayer支持的音视频格式和协议 2018年04月18日 18:33:42 阅读数:11127 标签: MediaplayerIjkPlayerAndroid音视频Andr ...
- android视频播放格式,Android视频以及视频播放器实例
首先我们来看一下 Android N 支持的视频文件有哪些.Android N 支持的视频格式下表所示. Android N 支持的视频文件 格式/编码 支持的文件类型 H.263 3GPP(.3gp ...
- android判断是否json格式,Android判断json格式将错误信息提交给服务器
开发中发现, 服务器偶尔会发送错误格式 json 给 Android 客户端, 导致 Android 客户端 json解析失败, 应用异常. 并非服务器有意坑客户端, 而是客户端请求服务器数据时, 除 ...
- android xml文件格式,android xml 资源文件中几个格式(@ ? @* @+)的含义
一.@代表引用资源 1.引用自定义资源.格式:@[package:]type/name android:text="@string/hello" 2.引用系统资源.格式:@andr ...
最新文章
- python学习第四课
- TSNE算法是什么?该算法有什么缺陷?
- autosar架构详细介绍_【技术】基于AUTOSAR的电机驱动系统分析
- python32-python32和
- java纯粹面向对象_Java的面向对象特征
- 每日简单小妙招:使用python自动登录CSDN等各大网站
- python︱ collections模块(namedtuple/defaultdict/OrderedDict等)
- 模板---函数模板,类模板等
- Mybatis-学习笔记(3)mapper配置文件
- android模拟器设置静态ip,安卓模拟器多开窗口挂手游切换不同IP防封号技术讲解...
- TCP和UDP对比的优势和劣势
- excel因为文件格式或文件扩展名无效,请确定文件未损坏(Excel文件格式或文件扩展名无效)...
- 重装系统后如何恢复oracle10g数据…
- 《程序员的职业修养》读后感(一):专业主义
- 视频截帧:javacv实现视频截帧功能
- 【重磅】清华大学法学院教授何海波:以数据推动法治(视频+PPT)
- 视频格式转换方法(不用下载任何软件)
- php赵普,赵普辞职央视主播一年多 自己创办了“东家守艺”
- 深度:保健产品市场正在经历深度震荡与变革转型,新时代环境下孕育哪些创新发展机会?
- .NET Core 性能监控