#include #include #include #include #include #include #include #include #include #include #include #include #include "pv_jpegdec_api.h" #include "jpeg_global.h" #include "vpu.h" #include "vpu_api.h" int getFileSize(FILE* fp) { int filesize = 0; if(fp == NULL) { printf("fopen jpgFile fail:"); return 0; } fseek(fp, 0, SEEK_END); filesize = ftell(fp); fseek(fp, 0, SEEK_SET); return filesize; } int main(int argc, char** argv){ char* mPath = argv[1]; int srcSize = 0; void* srcData=NULL; void* mDecoder; printf("jpeg_demo: mPath = %s \n", mPath); FILE* fp = fopen(mPath, "rb"); if (fp) { srcSize = getFileSize(fp); srcData = (void*)malloc(srcSize); fread(srcData,1,srcSize,fp); fclose(fp); } printf("srcData=%p srcSize=%d \n", srcData, srcSize); #ifdef DRM_LINUX if (srcData) { int aOutputLength=0; int ret; JPEG_FRAME mFrame; mDecoder = get_class_RkJpegDecoder(); ret = init_class_RkJpegDecoder(mDecoder); printf("get_class_RkJpegDecoder: =%p \n", mDecoder); ret = dec_oneframe_class_RkJpegDecoder(mDecoder, (void*)&mFrame, &aOutputLength, srcData, &srcSize); printf("jpeg_demo: mFrame.jpegmem.vir_addr=0x%x addr=%p mFrame.jpegmem.phy_addr=0x%x size=%d\n", mFrame.jpegmem.vir_addr, mFrame.jpegmem.vir_addr, mFrame.jpegmem.phy_addr, mFrame.jpegmem.size); if (mFrame.jpegmem.vir_addr != NULL) { FILE* outPut = fopen("/data/output.yuv", "wb"); printf("jpeg_demo: fwrite result ret=%s\n", strerror(errno)); if (outPut) { printf("fwrite ************************** mFrame.jpegmem.size =%d\n", mFrame.jpegmem.size); fwrite(mFrame.jpegmem.vir_addr, mFrame.jpegmem.size, 1, outPut); fclose(outPut); outPut = NULL; } } } #else if (srcData) { int aOutputLength=0; int ret; VPU_FRAME mFrame; mDecoder = get_class_RkJpegDecoder(); ret = init_class_RkJpegDecoder(mDecoder); printf("get_class_RkJpegDecoder: =%p \n", mDecoder); ret = dec_oneframe_class_RkJpegDecoder(mDecoder, (void*)&mFrame, &aOutputLength, srcData, &srcSize); printf("jpeg_demo: mFrame.jpegmem.vir_addr=0x%x addr=%p mFrame.jpegmem.phy_addr=0x%x size=%d\n", mFrame.vpumem.vir_addr, mFrame.vpumem.vir_addr, mFrame.vpumem.phy_addr, mFrame.vpumem.size); if (mFrame.vpumem.vir_addr != NULL) { FILE* outPut = fopen("/data/output.yuv", "wb"); printf("jpeg_demo: fwrite result ret=%s\n", strerror(errno)); if (outPut) { printf("fwrite ************************** mFrame.jpegmem.size =%d\n", mFrame.vpumem.size); fwrite(mFrame.vpumem.vir_addr, mFrame.vpumem.size, 1, outPut); fclose(outPut); outPut = NULL; } } if (mFrame.vpumem.vir_addr != NULL) VPUFreeLinear(&mFrame.vpumem); } #endif if (srcData) free(srcData); srcData = NULL; deinit_class_RkJpegDecoder(mDecoder); return 0; }