Home | History | Annotate | Download | only in rs
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #include "rsContext.h"
     18 #include "rsFileA3D.h"
     19 
     20 using namespace android;
     21 using namespace android::renderscript;
     22 
     23 RsObjectBase rsaFileA3DGetEntryByIndex(RsContext con, uint32_t index, RsFile file) {
     24     FileA3D *fa3d = static_cast<FileA3D *>(file);
     25     if (!fa3d) {
     26         ALOGE("Can't load entry. No valid file");
     27         return nullptr;
     28     }
     29 
     30     ObjectBase *obj = fa3d->initializeFromEntry(index);
     31     //ALOGV("Returning object with name %s", obj->getName());
     32 
     33     return obj;
     34 }
     35 
     36 
     37 void rsaFileA3DGetNumIndexEntries(RsContext con, int32_t *numEntries, RsFile file) {
     38     FileA3D *fa3d = static_cast<FileA3D *>(file);
     39 
     40     if (fa3d) {
     41         *numEntries = fa3d->getNumIndexEntries();
     42     } else {
     43         *numEntries = 0;
     44     }
     45 }
     46 
     47 void rsaFileA3DGetIndexEntries(RsContext con, RsFileIndexEntry *fileEntries, uint32_t numEntries, RsFile file) {
     48     FileA3D *fa3d = static_cast<FileA3D *>(file);
     49 
     50     if (!fa3d) {
     51         ALOGE("Can't load index entries. No valid file");
     52         return;
     53     }
     54 
     55     uint32_t numFileEntries = fa3d->getNumIndexEntries();
     56     if (numFileEntries != numEntries || numEntries == 0 || fileEntries == nullptr) {
     57         ALOGE("Can't load index entries. Invalid number requested");
     58         return;
     59     }
     60 
     61     for (uint32_t i = 0; i < numFileEntries; i ++) {
     62         const FileA3D::A3DIndexEntry *entry = fa3d->getIndexEntry(i);
     63         fileEntries[i].classID = entry->getType();
     64         fileEntries[i].objectName = rsuCopyString(entry->getObjectName());
     65     }
     66 }
     67 
     68 RsFile rsaFileA3DCreateFromMemory(RsContext con, const void *data, uint32_t len) {
     69     if (data == nullptr) {
     70         ALOGE("File load failed. Asset stream is nullptr");
     71         return nullptr;
     72     }
     73 
     74     Context *rsc = static_cast<Context *>(con);
     75     FileA3D *fa3d = new FileA3D(rsc);
     76     fa3d->incUserRef();
     77 
     78     fa3d->load(data, len);
     79     return fa3d;
     80 }
     81 
     82 RsFile rsaFileA3DCreateFromAsset(RsContext con, void *_asset) {
     83 #if !defined(__RS_PDK__)
     84     Context *rsc = static_cast<Context *>(con);
     85     Asset *asset = static_cast<Asset *>(_asset);
     86     FileA3D *fa3d = new FileA3D(rsc);
     87     fa3d->incUserRef();
     88 
     89     fa3d->load(asset);
     90     return fa3d;
     91 #else
     92     return nullptr;
     93 #endif
     94 }
     95 
     96 RsFile rsaFileA3DCreateFromFile(RsContext con, const char *path) {
     97     if (path == nullptr) {
     98         ALOGE("File load failed. Path is nullptr");
     99         return nullptr;
    100     }
    101 
    102     Context *rsc = static_cast<Context *>(con);
    103     FileA3D *fa3d = nullptr;
    104 
    105     FILE *f = fopen(path, "rb");
    106     if (f) {
    107         fa3d = new FileA3D(rsc);
    108         fa3d->incUserRef();
    109         fa3d->load(f);
    110         fclose(f);
    111     } else {
    112         ALOGE("Could not open file %s", path);
    113     }
    114 
    115     return fa3d;
    116 }
    117