duoduo 发表于 2015-4-29 09:49:34

rk3288硬解jpeg问题

版主好,能否提供硬解码接口的使用说明啊,我写了个demo,调用失败返回负值,也不知道这个值是表示的什么意思,
求解。
谢谢

风之空响 发表于 2015-4-29 14:46:24

你把你写的demo贴一下,我看一下先把

duoduo 发表于 2015-4-29 16:23:31


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

#include <binder/ProcessState.h>

#include "SkBitmap.h"
#include "SkImageDecoder.h"
#include "SkStream.h"
#include "omx_jpeg_decoder.h"

class SkJPEGImageDecoder : public SkImageDecoder {
public:
    virtual Format getFormat() const {
      return kJPEG_Format;
    }

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

int nullObjectReturn(const char msg[]) {
    if (msg) {
      SkDebugf("--- %s\n", msg);
    }
    return -1;
}

static int64_t getNowUs() {
    struct timeval tv;
    gettimeofday(&tv, NULL);

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

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

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

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

    testDecodePixels(decoder, stream, bitmap);
    delete bitmap;

    delete decoder;
   
    return 0;
}

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

    printf("Decoding jpeg with libjpeg...\n");
    SkJPEGImageDecoder* libjpeg = new SkJPEGImageDecoder;
    testDecoder(libjpeg, argv);
   
    return 0;
}

风之空响 发表于 2015-4-29 16:53:46

duoduo 发表于 2015-4-29 16:23


我查了一下系统内的API,你可以去源码里面看一下external/skia/src/images/SkImageDecoder_libjpeg.cpp的代码,这里面有实际的接口使用

duoduo 发表于 2015-4-29 17:06:48

我用的那个demo,是修改的frameworks/base/media/tests/omxjpegdecoder/jpeg_decoder_bench.cpp的这个文件,就是调用的libskia.so库里的SkImageDecoder_libjpeg.cpp文件里的接口啊。你那有rk3288的板子,能否帮我测试下,我这边测试过了,是调用硬解码接口失败的。
谢谢

风之空响 发表于 2015-4-29 17:10:19

duoduo 发表于 2015-4-29 17:06
我用的那个demo,是修改的frameworks/base/media/tests/omxjpegdecoder/jpeg_decoder_bench.cpp的这个文件, ...

那我看一下把,可能需要一点时间,有结果回复你

duoduo 发表于 2015-4-29 17:19:09

好的,多谢版主,期盼你的回复。
谢谢。

风之空响 发表于 2015-4-29 17:31:04

本帖最后由 风之空响 于 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:57

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

版主 这个虽然显示解码成功,但是是软解的. 我在skia/src/images/SkImageDecoder_libjpeg.cpp 加了打印信息,如下
SkDebugf("goingto decode 1 %d %d",bm->width(), bm->height());
if(hw_jpeg_decode(&hwInfo,&outInfo, &reuseBitmap, bm->width(), bm->height()) >= 0){
      SkDebugf("decode 1");
decode 1没有打印出来, 因为硬解出错,倒是打印出了出错分支的这行话
                        HW_DEBUG("execte hw_jpeg_release #2");
请帮忙看一下什么原因
页: [1]
查看完整版本: rk3288硬解jpeg问题