Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Revert "{Android] Eliminate need for even using a byte array when cop…
…ying assets over."

Turns out Android devs decided to opt for one of the most retarded ways of handling assets. Assets with some specific extensions are not compressed (png, jpeg, etc), and anything else is compressed. The AssetManager is so revolutionary, that you actually can't retrieve valid FileChannel descriptors from these compressed files! To add to this revolutionary system, they actually didn't give you a straightforward way of disabling this compression. Now using FileChannels are not possible, and thus we must use the much slower way of copying everything over. Thank you Android devs. Godforbid someone would like to use a non-array based way of copying things that's actually efficient, considering DMA access is possible with FileChannels.

This reverts commit 0dd3298.
  • Loading branch information
lioncash committed Oct 10, 2013
1 parent 78a4dbc commit 8b6ff7a
Showing 1 changed file with 19 additions and 16 deletions.
35 changes: 19 additions & 16 deletions Source/Android/src/org/dolphinemu/dolphinemu/DolphinEmulator.java
Expand Up @@ -11,12 +11,10 @@
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;

import org.dolphinemu.dolphinemu.gamelist.GameListActivity;
import org.dolphinemu.dolphinemu.settings.UserPreferences;

import java.io.*;
import java.nio.channels.FileChannel;

/**
* The main activity of this emulator front-end.
Expand All @@ -25,29 +23,34 @@ public final class DolphinEmulator extends Activity
{
private void CopyAsset(String asset, String output)
{
InputStream in = null;
OutputStream out = null;

try
{
// Get input file channel.
FileInputStream inStream = getAssets().openFd(asset).createInputStream();
FileChannel in = inStream.getChannel();

// Get output file channel.
FileOutputStream outStream = new FileOutputStream(output);
FileChannel out = outStream.getChannel();

// Copy over
in.transferTo(0, in.size(), out);

// Clean-up
inStream.close();
outStream.close();
in = getAssets().open(asset);
out = new FileOutputStream(output);
copyFile(in, out);
in.close();
out.close();
}
catch (IOException e)
{
Log.e("DolphinEmulator", "Failed to copy asset file: " + asset, e);
}
}

private void copyFile(InputStream in, OutputStream out) throws IOException
{
byte[] buffer = new byte[1024];
int read;

while ((read = in.read(buffer)) != -1)
{
out.write(buffer, 0, read);
}
}

@Override
public void onCreate(Bundle savedInstanceState)
{
Expand Down

0 comments on commit 8b6ff7a

Please sign in to comment.