package com.mediatek.extservice;

import a.b.c.a.a;
import android.os.Parcel;
import android.os.ParcelFileDescriptor;
import android.os.Parcelable;
import android.os.Process;
import java.io.IOException;

/* JADX INFO: loaded from: classes.dex */
public class MtkSharedMemory implements Parcelable {
    public static final int BUFF_TYPE_AUTO = 0;
    public static final int BUFF_TYPE_DMA = 2;
    public static final int BUFF_TYPE_ION = 1;
    public static final Parcelable.Creator<MtkSharedMemory> CREATOR;
    private static final String TAG = "MtkExtService_Fw[MtkSharedMemory.java]";
    private boolean mAlreadyRecycled;
    private int mCurrentFd;
    private ParcelFileDescriptor mFileDescriptor;
    private int mMemorySize;
    private int mSubBufferNums;

    static {
        try {
            System.loadLibrary("MtkSharedMemory");
            System.out.println("System.loadLibrary(MtkSharedMemory): successfully");
        } catch (UnsatisfiedLinkError e2) {
            System.out.println("System.loadLibrary(MtkSharedMemory) : " + e2);
            e2.printStackTrace(System.out);
        }
        CREATOR = new Parcelable.Creator<MtkSharedMemory>() { // from class: com.mediatek.extservice.MtkSharedMemory.1
            /* JADX WARN: Can't rename method to resolve collision */
            @Override // android.os.Parcelable.Creator
            public MtkSharedMemory createFromParcel(Parcel parcel) {
                return new MtkSharedMemory(parcel);
            }

            /* JADX WARN: Can't rename method to resolve collision */
            @Override // android.os.Parcelable.Creator
            public MtkSharedMemory[] newArray(int i2) {
                return new MtkSharedMemory[i2];
            }
        };
    }

    public MtkSharedMemory() {
        this.mCurrentFd = -1;
        this.mSubBufferNums = 1;
        this.mMemorySize = 0;
        CommonLogUtils.d(TAG, "constructor");
    }

    public MtkSharedMemory(Parcel parcel) {
        this.mCurrentFd = -1;
        this.mSubBufferNums = 1;
        this.mMemorySize = 0;
        this.mSubBufferNums = parcel.readInt();
        this.mMemorySize = parcel.readInt();
        ParcelFileDescriptor parcelFileDescriptor = (ParcelFileDescriptor) parcel.readParcelable(ParcelFileDescriptor.class.getClassLoader());
        this.mFileDescriptor = parcelFileDescriptor;
        if (parcelFileDescriptor != null) {
            this.mCurrentFd = parcelFileDescriptor.getFd();
            StringBuilder sbC = a.C("ParcelIn: mFileDescriptor.getFd()=");
            sbC.append(this.mFileDescriptor.getFd());
            CommonLogUtils.d(TAG, sbC.toString());
        }
    }

    public static MtkSharedMemory createFromBytes(byte[] bArr) {
        return createFromBytes(bArr, false);
    }

    public static MtkSharedMemory createFromBytes(byte[] bArr, int i2) {
        return createFromBytes(bArr, i2, false);
    }

    public static MtkSharedMemory createFromBytes(byte[] bArr, int i2, boolean z) {
        MtkSharedMemory mtkSharedMemoryCreateFromBytes = createFromBytes(bArr, z);
        if (mtkSharedMemoryCreateFromBytes != null) {
            mtkSharedMemoryCreateFromBytes.setSubBufferNums(i2);
        }
        return mtkSharedMemoryCreateFromBytes;
    }

    public static MtkSharedMemory createFromBytes(byte[] bArr, boolean z) {
        ParcelFileDescriptor parcelFileDescriptorFromFd;
        String str;
        CommonLogUtils.d(TAG, "createFromByteArray data=" + bArr + ",useGralloc=" + z);
        if (bArr.length == 0) {
            str = "Error : byte data is empty !!";
        } else {
            int iNativeApplyMemory = z ? -1 : nativeApplyMemory(bArr, 0);
            if (iNativeApplyMemory >= 0) {
                try {
                    parcelFileDescriptorFromFd = ParcelFileDescriptor.fromFd(iNativeApplyMemory);
                } catch (IOException e2) {
                    CommonLogUtils.e(TAG, "create ParcelFileDescriptor from fd fail : " + e2);
                    parcelFileDescriptorFromFd = null;
                }
                if (parcelFileDescriptorFromFd == null) {
                    return null;
                }
                nativeReleaseMemory(iNativeApplyMemory);
                MtkSharedMemory mtkSharedMemory = new MtkSharedMemory();
                mtkSharedMemory.mCurrentFd = parcelFileDescriptorFromFd.getFd();
                mtkSharedMemory.setMemorySize(bArr.length);
                mtkSharedMemory.setFileDescriptor(parcelFileDescriptorFromFd);
                CommonLogUtils.d(TAG, "Created: fileDescriptor.getFd()=" + parcelFileDescriptorFromFd.getFd());
                return mtkSharedMemory;
            }
            str = "Error : nativeApplyMemory fail !!";
        }
        CommonLogUtils.e(TAG, str);
        return null;
    }

    public static MtkSharedMemory createFromBytesWithBuffType(byte[] bArr, int i2) {
        ParcelFileDescriptor parcelFileDescriptorFromFd;
        String str;
        CommonLogUtils.d(TAG, "createFromBytesWithBuffType data=" + bArr + ",buffType=" + i2);
        if (bArr.length == 0) {
            str = "Error : byte data is empty !!";
        } else {
            int iNativeApplyMemory = nativeApplyMemory(bArr, i2);
            if (iNativeApplyMemory >= 0) {
                try {
                    parcelFileDescriptorFromFd = ParcelFileDescriptor.fromFd(iNativeApplyMemory);
                } catch (IOException e2) {
                    CommonLogUtils.e(TAG, "create ParcelFileDescriptor from fd fail !! " + e2);
                    parcelFileDescriptorFromFd = null;
                }
                if (parcelFileDescriptorFromFd == null) {
                    return null;
                }
                nativeReleaseMemory(iNativeApplyMemory);
                MtkSharedMemory mtkSharedMemory = new MtkSharedMemory();
                mtkSharedMemory.mCurrentFd = parcelFileDescriptorFromFd.getFd();
                mtkSharedMemory.setMemorySize(bArr.length);
                mtkSharedMemory.setFileDescriptor(parcelFileDescriptorFromFd);
                CommonLogUtils.d(TAG, "Created: fileDescriptor.getFd()=" + parcelFileDescriptorFromFd.getFd());
                return mtkSharedMemory;
            }
            str = "Error : nativeApplyMemory fail !!";
        }
        CommonLogUtils.e(TAG, str);
        return null;
    }

    public static MtkSharedMemory createFromParcelFileDescriptor(ParcelFileDescriptor parcelFileDescriptor) {
        CommonLogUtils.d(TAG, "createFromParcelFileDescriptor fileDescriptor=" + parcelFileDescriptor);
        if (parcelFileDescriptor == null) {
            CommonLogUtils.e(TAG, "Error : fileDescriptor is null !!");
            return null;
        }
        MtkSharedMemory mtkSharedMemory = new MtkSharedMemory();
        mtkSharedMemory.mCurrentFd = parcelFileDescriptor.getFd();
        mtkSharedMemory.setFileDescriptor(parcelFileDescriptor);
        CommonLogUtils.d(TAG, "create: fileDescriptor.getFd()=" + parcelFileDescriptor.getFd());
        return mtkSharedMemory;
    }

    public static byte[] getBytesFromMtkSharedMemory(MtkSharedMemory mtkSharedMemory) {
        return getBytesFromMtkSharedMemory(mtkSharedMemory, 0);
    }

    public static byte[] getBytesFromMtkSharedMemory(MtkSharedMemory mtkSharedMemory, int i2) {
        String string;
        CommonLogUtils.d(TAG, "getBytesFromMtkSharedMemory mtkSharedMemory=" + mtkSharedMemory + ", bufferIndex=" + i2);
        if (mtkSharedMemory == null) {
            string = "Error : mtkSharedMemory is null !!";
        } else if (mtkSharedMemory.mAlreadyRecycled) {
            string = "Error : this memory is already recycled !!";
        } else if (mtkSharedMemory.getMemorySize() <= 0) {
            StringBuilder sbC = a.C("cannot get data, memory size is invalid! size=");
            sbC.append(mtkSharedMemory.getMemorySize());
            string = sbC.toString();
        } else if (i2 < 0) {
            string = "Error : illegal bufferIndex !!";
        } else {
            int currentFd = mtkSharedMemory.getCurrentFd();
            if (currentFd >= 0) {
                byte[] bArrNativeGetDataFromFd = nativeGetDataFromFd(currentFd, i2, mtkSharedMemory.getSubBufferNums(), mtkSharedMemory.getMemorySize());
                CommonLogUtils.d(TAG, "result = " + bArrNativeGetDataFromFd);
                return bArrNativeGetDataFromFd;
            }
            string = "Error : mtkSharedMemory's fd is invalid !!";
        }
        CommonLogUtils.e(TAG, string);
        return null;
    }

    public static boolean isAvailableMemory(MtkSharedMemory mtkSharedMemory) {
        return mtkSharedMemory != null && mtkSharedMemory.getCurrentFd() >= 0 && mtkSharedMemory.getMemorySize() > 0;
    }

    private static native int nativeApplyMemory(byte[] bArr, int i2);

    private static native byte[] nativeGetDataFromFd(int i2, int i3, int i4, int i5);

    private static native void nativeReleaseMemory(int i2);

    private void releaseMemoryInternal() {
        try {
            ParcelFileDescriptor parcelFileDescriptor = this.mFileDescriptor;
            if (parcelFileDescriptor != null) {
                parcelFileDescriptor.close();
                this.mFileDescriptor = null;
            }
        } catch (Exception e2) {
            e2.printStackTrace();
        }
    }

    private void setSubBufferNums(int i2) {
        if (i2 > 0) {
            this.mSubBufferNums = i2;
        }
    }

    @Override // android.os.Parcelable
    public int describeContents() {
        return 0;
    }

    public MtkSharedMemory dup() {
        ParcelFileDescriptor parcelFileDescriptorDup;
        ParcelFileDescriptor parcelFileDescriptor = this.mFileDescriptor;
        if (parcelFileDescriptor == null) {
            return null;
        }
        try {
            parcelFileDescriptorDup = parcelFileDescriptor.dup();
        } catch (Exception e2) {
            e2.printStackTrace();
            parcelFileDescriptorDup = null;
        }
        if (parcelFileDescriptorDup == null) {
            return null;
        }
        MtkSharedMemory mtkSharedMemory = new MtkSharedMemory();
        mtkSharedMemory.mCurrentFd = parcelFileDescriptorDup.getFd();
        mtkSharedMemory.setMemorySize(this.mMemorySize);
        mtkSharedMemory.setSubBufferNums(this.mSubBufferNums);
        mtkSharedMemory.setFileDescriptor(parcelFileDescriptorDup);
        CommonLogUtils.d(TAG, "dup fd from" + this.mFileDescriptor.getFd() + " to" + mtkSharedMemory.mCurrentFd);
        return mtkSharedMemory;
    }

    public void finalize() throws Throwable {
        super.finalize();
        if (this.mAlreadyRecycled || this.mFileDescriptor == null) {
            return;
        }
        CommonLogUtils.d(TAG, "finalize(): MtkSharedMemory=" + this + ", pid=" + Process.myPid());
        releaseMemoryInternal();
    }

    public int getCurrentFd() {
        return this.mCurrentFd;
    }

    public ParcelFileDescriptor getFileDescriptor() {
        return this.mFileDescriptor;
    }

    public int getMemorySize() {
        return this.mMemorySize;
    }

    public int getSubBufferNums() {
        return this.mSubBufferNums;
    }

    public void recycleImmediately() {
        CommonLogUtils.d(TAG, "recycleImmediately(): MtkSharedMemory=" + this + ", pid=" + Process.myPid());
        if (this.mAlreadyRecycled) {
            return;
        }
        this.mAlreadyRecycled = true;
        releaseMemoryInternal();
        CommonLogUtils.d(TAG, "MtkSharedMemory recycleImmediately() success ");
    }

    public void setFileDescriptor(ParcelFileDescriptor parcelFileDescriptor) {
        this.mFileDescriptor = parcelFileDescriptor;
    }

    public void setMemorySize(int i2) {
        this.mMemorySize = i2;
    }

    public String toString() {
        StringBuilder sbC = a.C("MtkSharedMemory{currentFd=");
        sbC.append(this.mCurrentFd);
        sbC.append(", memorySize=");
        sbC.append(this.mMemorySize);
        sbC.append(", bufferNums=");
        sbC.append(this.mSubBufferNums);
        sbC.append(", fileDescriptor=");
        sbC.append(this.mFileDescriptor);
        sbC.append(", alreadyRecycled=");
        return a.w(sbC, this.mAlreadyRecycled, '}');
    }

    @Override // android.os.Parcelable
    public void writeToParcel(Parcel parcel, int i2) {
        parcel.writeInt(this.mSubBufferNums);
        parcel.writeInt(this.mMemorySize);
        parcel.writeParcelable(this.mFileDescriptor, i2);
    }
}
