Firefly开源社区

标题: rk3288硬解jpeg问题 [打印本页]

作者: duoduo    时间: 2015-4-29 09:49
标题: rk3288硬解jpeg问题
版主好,能否提供硬解码接口的使用说明啊,我写了个demo,调用失败返回负值,也不知道这个值是表示的什么意思,
求解。
谢谢
作者: 风之空响    时间: 2015-4-29 14:46
你把你写的demo贴一下,我看一下先把
作者: duoduo    时间: 2015-4-29 16:23

  1. #define LOG_TAG "OmxJpegDecoder"
  2. #include <sys/time.h>
  3. #include <utils/Log.h>

  4. #include <binder/ProcessState.h>

  5. #include "SkBitmap.h"
  6. #include "SkImageDecoder.h"
  7. #include "SkStream.h"
  8. #include "omx_jpeg_decoder.h"

  9. class SkJPEGImageDecoder : public SkImageDecoder {
  10. public:
  11.     virtual Format getFormat() const {
  12.         return kJPEG_Format;
  13.     }

  14. protected:
  15.     virtual bool onDecode(SkStream* stream, SkBitmap* bm, Mode);
  16. };

  17. int nullObjectReturn(const char msg[]) {
  18.     if (msg) {
  19.         SkDebugf("--- %s\n", msg);
  20.     }
  21.     return -1;
  22. }

  23. static int64_t getNowUs() {
  24.     struct timeval tv;
  25.     gettimeofday(&tv, NULL);

  26.     return tv.tv_usec + (int64_t) tv.tv_sec * 1000000;
  27. }

  28. int testDecodePixels(SkImageDecoder* decoder, SkStream* stream,
  29.         SkBitmap* bitmap) {
  30.     int64_t startTime = getNowUs();
  31.     SkBitmap::Config prefConfig = SkBitmap::kARGB_8888_Config;
  32.     SkImageDecoder::Mode decodeMode = SkImageDecoder::kDecodePixels_Mode;

  33.     // Decode the input stream and then use the bitmap.
  34.     if (!decoder->decode(stream, bitmap, prefConfig, decodeMode)) {
  35.         return nullObjectReturn("decoder->decode returned false");
  36.     } else {
  37.         int64_t delay = getNowUs() - startTime;
  38.         printf("Decoding Time in PixelsMode %.1f msec.\n", delay / 1000.0f);
  39.         const char* filename = "/sdcard/omxJpegDecodedBitmap.rgba";
  40.         return storeBitmapToFile(bitmap, filename);
  41.     }
  42. }

  43. int testDecoder(SkImageDecoder* decoder, char* filename) {
  44.     // test DecodeMode == Pixels
  45.     SkStream* stream = new SkFILEStream(filename);
  46.     SkBitmap* bitmap = new SkBitmap;

  47.     testDecodePixels(decoder, stream, bitmap);
  48.     delete bitmap;

  49.     delete decoder;
  50.    
  51.     return 0;
  52. }

  53. int main(int argc, char** argv) {
  54.     android::ProcessState::self()->startThreadPool();

  55.     printf("Decoding jpeg with libjpeg...\n");
  56.     SkJPEGImageDecoder* libjpeg = new SkJPEGImageDecoder;
  57.     testDecoder(libjpeg, argv[1]);
  58.    
  59.     return 0;
  60. }
复制代码

作者: 风之空响    时间: 2015-4-29 16:53
duoduo 发表于 2015-4-29 16:23

我查了一下系统内的API,你可以去源码里面看一下external/skia/src/images/SkImageDecoder_libjpeg.cpp的代码,这里面有实际的接口使用
作者: duoduo    时间: 2015-4-29 17:06
我用的那个demo,是修改的frameworks/base/media/tests/omxjpegdecoder/jpeg_decoder_bench.cpp的这个文件,就是调用的libskia.so库里的SkImageDecoder_libjpeg.cpp文件里的接口啊。你那有rk3288的板子,能否帮我测试下,我这边测试过了,是调用硬解码接口失败的。
谢谢
作者: 风之空响    时间: 2015-4-29 17:10
duoduo 发表于 2015-4-29 17:06
我用的那个demo,是修改的frameworks/base/media/tests/omxjpegdecoder/jpeg_decoder_bench.cpp的这个文件, ...

那我看一下把,可能需要一点时间,有结果回复你
作者: duoduo    时间: 2015-4-29 17:19
好的,多谢版主,期盼你的回复。
谢谢。
作者: 风之空响    时间: 2015-4-29 17:31
本帖最后由 风之空响 于 2015-4-29 17:33 编辑
duoduo 发表于 2015-4-29 17:06
我用的那个demo,是修改的frameworks/base/media/tests/omxjpegdecoder/jpeg_decoder_bench.cpp的这个文件, ...

话说你的qq为啥没反应呢,有些具体的问题,我想问下你.因为在我这边的话139|root@rk3288:/system/bin # jpeg_bench /sdcard/1.jpg                        
Decoding jpeg with libjpeg...
Decoding Time in PixelsMode 19.8 msec.
WidthxHeight: 800x480
Decoding Time in BoundsMode 1.0 msec
是可以解码的啊



作者: nystorm    时间: 2015-8-2 12:00
风之空响 发表于 2015-4-29 17:31
话说你的qq为啥没反应呢,有些具体的问题,我想问下你.因为在我这边的话139|root@rk3288:/system/bin # j ...

版主 这个虽然显示解码成功,但是是软解的. 我在skia/src/images/SkImageDecoder_libjpeg.cpp 加了打印信息,如下
  1. SkDebugf("going  to decode 1 %d %d",bm->width(), bm->height());
  2. if(hw_jpeg_decode(&hwInfo,&outInfo, &reuseBitmap, bm->width(), bm->height()) >= 0){
  3.         SkDebugf("decode 1");
复制代码

decode 1没有打印出来, 因为硬解出错,倒是打印出了出错分支的这行话
                       
  1. HW_DEBUG("execte hw_jpeg_release #2");
复制代码

请帮忙看一下什么原因




欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1