Ensure memory file descriptor is available.

This commit is contained in:
Alan Evans 2019-08-24 17:54:29 +01:00 committed by Greyson Parrelli
parent c6287547a3
commit 2141f1073e
2 changed files with 26 additions and 2 deletions

View file

@ -6,13 +6,13 @@ import android.os.Build;
import android.util.Pair;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import org.thoughtcrime.securesms.attachments.Attachment;
import org.thoughtcrime.securesms.logging.Log;
import org.thoughtcrime.securesms.util.BitmapDecodingException;
import org.thoughtcrime.securesms.util.BitmapUtil;
import org.thoughtcrime.securesms.util.MediaUtil;
import org.thoughtcrime.securesms.util.MemoryFileDescriptor;
import java.io.IOException;
import java.io.InputStream;
@ -76,6 +76,6 @@ public abstract class MediaConstraints {
}
public static boolean isVideoTranscodeAvailable() {
return Build.VERSION.SDK_INT >= 26;
return Build.VERSION.SDK_INT >= 26 && MemoryFileDescriptor.supported();
}
}

View file

@ -22,9 +22,33 @@ public final class MemoryFileDescriptor implements Closeable {
private static final String TAG = Log.tag(MemoryFileDescriptor.class);
private static Boolean supported;
private final ParcelFileDescriptor parcelFileDescriptor;
private final AtomicLong sizeEstimate;
/**
* Does this device support memory file descriptor.
*/
public synchronized static boolean supported() {
if (supported == null) {
try {
int fileDescriptor = FileUtils.createMemoryFileDescriptor("CHECK");
if (fileDescriptor < 0) {
supported = false;
Log.w(TAG, "MemoryFileDescriptor is not available.");
} else {
supported = true;
ParcelFileDescriptor.adoptFd(fileDescriptor).close();
}
} catch (IOException e) {
Log.w(TAG, e);
}
}
return supported;
}
/**
* memfd files do not show on the available RAM, so we must track our allocations in addition.
*/