package com.kfzs.cfyl.media;

import android.app.Application;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;

import org.wysaid.common.Common;
import org.wysaid.nativePort.CGENativeLibrary;

import java.io.IOException;
import java.io.InputStream;

/**
 * Created by realicing on 2018/12/10.
 * realicing@sina.com
 */
public class MediaApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
//        initGlide(getApplicationContext());
        initCgeLibrary();
    }

    private void initCgeLibrary() {
        //The second param will be passed as the second arg of the callback function.
        //第二个参数根据自身需要设置， 将作为 loadImage 第二个参数回传
        CGENativeLibrary.setLoadImageCallback(mLoadImageCallback, null);
    }

    public CGENativeLibrary.LoadImageCallback mLoadImageCallback = new CGENativeLibrary.LoadImageCallback() {

        //Notice: the 'name' passed in is just what you write in the rule, e.g: 1.jpg
        //注意， 这里回传的name不包含任何路径名， 仅为具体的图片文件名如 1.jpg
        @Override
        public Bitmap loadImage(String name, Object arg) {

            Log.i(Common.LOG_TAG, "Loading file: " + name);
            AssetManager am = getAssets();
            InputStream is;
            try {
                is = am.open(name);
            } catch (IOException e) {
                Log.e(Common.LOG_TAG, "Can not open file " + name);
                return null;
            }

            return BitmapFactory.decodeStream(is);
        }

        @Override
        public void loadImageOK(Bitmap bmp, Object arg) {
            Log.i(Common.LOG_TAG, "Loading bitmap over, you can choose to recycle or cache");

            //The bitmap is which you returned at 'loadImage'.
            //You can call recycle when this function is called, or just keep it for further usage.
            //唯一不需要马上recycle的应用场景为 多个不同的滤镜都使用到相同的bitmap
            //那么可以选择缓存起来。
            bmp.recycle();
        }
    };
}
//    public static void initGlide(Registry registry){
//        LogUtil.println("VideoUtil", "initGlide");
//        registry.append(VideoFrame.class, Bitmap.class, new ResourceDecoder<VideoFrame, Bitmap>() {
//            @Override
//            public boolean handles(VideoFrame source, Options options) throws IOException {
//                return true;
//            }
//
//            @Nullable
//            @Override
//            public Resource<Bitmap> decode(VideoFrame source, int width, int height, Options options) throws IOException {
//                final Bitmap bitmap = VideoUtil.getVideoFrameBitmap(source);
//                return new Resource<Bitmap>() {
//                    @Override
//                    public Class<Bitmap> getResourceClass() {
//                        return Bitmap.class;
//                    }
//
//                    @Override
//                    public Bitmap get() {
//                        return bitmap;
//                    }
//
//                    @Override
//                    public int getSize() {
//                        if (bitmap != null)
//                            return bitmap.getRowBytes() * bitmap.getHeight();// 获取大小并返回;Bitmap所占用的内存空间数等于Bitmap的每一行所占用的空间数乘以Bitmap的行数
//                        else return 0;
//                    }
//
//                    @Override
//                    public void recycle() {
//                        if (bitmap != null) {
//                            try {
//                                bitmap.recycle();
//                            } catch (Exception ignore) {
//
//                            }
//                        }
//                    }
//                };
//            }
//        });
//        Glide.get(getApplicationContext()).getRegistry().register(VideoFrame.class, Bitmap.class, new ResourceTranscoder<VideoFrame, Bitmap>() {
//            @Override
//            public Resource<Bitmap> transcode(Resource<VideoFrame> toTranscode) {
//                final VideoFrame source = toTranscode.get();
//                final Bitmap bitmap = VideoUtil.getVideoFrameBitmap(source);
//                return new Resource<Bitmap>() {
//                    @Override
//                    public Class<Bitmap> getResourceClass() {
//                        return Bitmap.class;
//                    }
//
//                    @Override
//                    public Bitmap get() {
//                        return bitmap;
//                    }
//
//                    @Override
//                    public int getSize() {
//                        if (bitmap != null)
//                            return bitmap.getRowBytes() * bitmap.getHeight();// 获取大小并返回;Bitmap所占用的内存空间数等于Bitmap的每一行所占用的空间数乘以Bitmap的行数
//                        else return 0;
//                    }
//
//                    @Override
//                    public void recycle() {
//                        if (bitmap != null) {
//                            try {
//                                bitmap.recycle();
//                            } catch (Exception ignore) {
//
//                            }
//                        }
//                    }
//                };
//            }
//        });
