JNIEXPORT jbyteArray JNICALL
Java_com_parrot_arsdk_armedia_ARMediaVideoAtoms_nativeGetAtom(JNIEnv *env, jclass clazz, jstring fileName, jstring atom)
{
    const char *fname = (*env)->GetStringUTFChars(env, fileName, NULL);
    const char *atomName = (*env)->GetStringUTFChars(env, atom, NULL);

    jbyteArray retArray = NULL;

    FILE *file = fopen (fname, "rb");
    if (file != NULL)
    {
        int ret = flock(fileno(file), LOCK_EX);

        uint32_t size;
        uint8_t *data = createDataFromFile (file, atomName, &size);

        ret = flock(fileno(file), LOCK_UN);
        fclose(file);

        if (data != NULL)
        {
            retArray = (*env)->NewByteArray(env, size);
            (*env)->SetByteArrayRegion(env, retArray, 0, size, (jbyte*)data);

            free(data);
        }
    }

    (*env)->ReleaseStringUTFChars(env, fileName, fname);
    (*env)->ReleaseStringUTFChars(env, atom, atomName);

    return retArray;
}
Example #2
0
int main(int argc, char **argv) {
    
    if (argc != 3) {
        printf("Usage: plconvert <in file> <out file>\nIf the in file is an XML property list, convert to binary property list in out file. If the in file is a binary property list, convert to XML property list in out file.\n");
    } else {
        CFMutableDataRef plistData = createDataFromFile(argv[1]);
        if (!plistData) {
            printf("Unable to create data from file name: %s", argv[1]);
        } else {
            CFPropertyListFormat fmt;
            CFErrorRef err;
            CFPropertyListRef plist = CFPropertyListCreateWithData(kCFAllocatorSystemDefault, (CFDataRef)plistData, 0, &fmt, &err);
            if (!plist) {
                logIt(CFSTR("Unable to create property list from data: %@"), err);
            } else {
                logIt(CFSTR("Property list contents:\n%@"), plist);
                if (fmt == kCFPropertyListBinaryFormat_v1_0) {
                    logIt(CFSTR("Converting to XML property list at: %s"), argv[2]);
                    fmt = kCFPropertyListXMLFormat_v1_0;
                } else if (fmt == kCFPropertyListXMLFormat_v1_0) {
                    logIt(CFSTR("Converting to binary property list at: %s"), argv[2]);
                    fmt = kCFPropertyListBinaryFormat_v1_0;
                } else {
                    logIt(CFSTR("Unknown property list format! Not converting output format."));
                }
                
                CFDataRef outputData = CFPropertyListCreateData(kCFAllocatorSystemDefault, plist, fmt, 0, &err);
                if (!outputData) {
                    logIt(CFSTR("Unable to write property list to data: %@"), err);
                } else {
                    bool success = writeDataToFile(outputData, argv[2]);
                    if (!success) {
                        logIt(CFSTR("Unable to write data to file"));
                    }
                    CFRelease(outputData);
                }
                CFRelease(plist);
            }
            CFRelease(plistData);
        }
    }
}