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; }
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); } } }