Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用jcodec SequenceEncoder提供ArrayListOutOfBoundsException_Android_Jcodec - Fatal编程技术网

Android 使用jcodec SequenceEncoder提供ArrayListOutOfBoundsException

Android 使用jcodec SequenceEncoder提供ArrayListOutOfBoundsException,android,jcodec,Android,Jcodec,我正在尝试从我的应用程序中的一些图像编码视频 我正在使用jcodec库来实现我的任务 这是我的代码: public class Encoder extends AsyncTask<String, Integer, Integer> { private static final String TAG = "ENCODER"; private Context context; private ArrayList<PresentationItem > m

我正在尝试从我的应用程序中的一些图像编码视频

我正在使用jcodec库来实现我的任务

这是我的代码:

public class Encoder extends AsyncTask<String, Integer, Integer> {
    private static final String TAG = "ENCODER";
    private Context context;
    private ArrayList<PresentationItem > mData;


    public Encoder(Context context, ArrayList<PresentationItem> mData) {
        this.context = context;
        this.mData = mData;
    }

    protected Integer doInBackground(String... params) {


        File gallery_folder = new File(Environment.getExternalStorageDirectory(),
                    "Test" );

        SequenceEncoder se = null;
        try {
            se = new SequenceEncoder(new File(gallery_folder,
                    "jcodec_enc.mp4"));


            for (int i = 0; i<mData.size(); i++) {

                Bitmap frame = Utils.getBitmap(mData.get(i).getImagePath(), 100, 100);
                se.encodeImage(frame);

              //  publishProgress(i);

            }
            se.finish();
        } catch (IOException e) {
            Log.e(TAG, "IO", e);
        }

        return 0;
    }

    @Override
    protected void onPostExecute(Integer integer) {
        super.onPostExecute(integer);
    }
}
这是我的logcat输出:

04-27 07:20:14.315: E/AndroidRuntime(2743): FATAL EXCEPTION: AsyncTask #2
04-27 07:20:14.315: E/AndroidRuntime(2743): java.lang.RuntimeException: An error occured while executing doInBackground()
04-27 07:20:14.315: E/AndroidRuntime(2743):     at android.os.AsyncTask$3.done(AsyncTask.java:278)
04-27 07:20:14.315: E/AndroidRuntime(2743):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
04-27 07:20:14.315: E/AndroidRuntime(2743):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
04-27 07:20:14.315: E/AndroidRuntime(2743):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
04-27 07:20:14.315: E/AndroidRuntime(2743):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)
04-27 07:20:14.315: E/AndroidRuntime(2743):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)
04-27 07:20:14.315: E/AndroidRuntime(2743):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
04-27 07:20:14.315: E/AndroidRuntime(2743):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
04-27 07:20:14.315: E/AndroidRuntime(2743):     at java.lang.Thread.run(Thread.java:856)
04-27 07:20:14.315: E/AndroidRuntime(2743): Caused by: java.lang.ArrayIndexOutOfBoundsException: length=13872; index=13940
04-27 07:20:14.315: E/AndroidRuntime(2743):     at org.jcodec.scale.RgbToYuv420j.rgb2yuv(RgbToYuv420j.java:72)
04-27 07:20:14.315: E/AndroidRuntime(2743):     at org.jcodec.scale.RgbToYuv420j.transform(RgbToYuv420j.java:38)
04-27 07:20:14.315: E/AndroidRuntime(2743):     at org.jcodec.api.SequenceEncoder.encodeNativeFrame(SequenceEncoder.java:72)
04-27 07:20:14.315: E/AndroidRuntime(2743):     at org.jcodec.api.android.SequenceEncoder.encodeImage(SequenceEncoder.java:24)
04-27 07:20:14.315: E/AndroidRuntime(2743):     at com.moblin.huggies.utils.Encoder.doInBackground(Encoder.java:56)
04-27 07:20:14.315: E/AndroidRuntime(2743):     at com.moblin.huggies.utils.Encoder.doInBackground(Encoder.java:22)
04-27 07:20:14.315: E/AndroidRuntime(2743):     at android.os.AsyncTask$2.call(AsyncTask.java:264)
04-27 07:20:14.315: E/AndroidRuntime(2743):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
04-27 07:20:14.315: E/AndroidRuntime(2743):     ... 5 more
此行中的错误原因:

se.encodeImage(frame);
找不到发生这种情况的原因


另外,我使用的代码取自jcode示例。

对于我来说,当我从库中替换“SequenceEncoder.java”时,它是固定的

指示第72行@
RgbToYuv420j
thx作为注释,我将这一行添加到我的帖子中。我不明白为什么它会下降。
mData
的大小是多少?最好将
更改为(inti=0;它的大小大于10,但我只需要4。
se.encodeImage(frame);