DvbParser.java 源代码


package com.mbridge.msdk.playercommon.exoplayer2.text.dvb;

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.graphics.Region;
import android.util.Log;
import android.util.SparseArray;
import androidx.core.view.ViewCompat;
import com.mbridge.msdk.playercommon.exoplayer2.text.Cue;
import com.mbridge.msdk.playercommon.exoplayer2.util.ParsableBitArray;
import com.mbridge.msdk.playercommon.exoplayer2.util.Util;
import com.umeng.analytics.pro.bx;
import com.x8zs.morgoo.droidplugin.hook.handle.PluginCallback;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

final class DvbParser {
    private static final int DATA_TYPE_24_TABLE_DATA = 32;
    private static final int DATA_TYPE_28_TABLE_DATA = 33;
    private static final int DATA_TYPE_2BP_CODE_STRING = 16;
    private static final int DATA_TYPE_48_TABLE_DATA = 34;
    private static final int DATA_TYPE_4BP_CODE_STRING = 17;
    private static final int DATA_TYPE_8BP_CODE_STRING = 18;
    private static final int DATA_TYPE_END_LINE = 240;
    private static final int OBJECT_CODING_PIXELS = 0;
    private static final int OBJECT_CODING_STRING = 1;
    private static final int PAGE_STATE_NORMAL = 0;
    private static final int REGION_DEPTH_4_BIT = 2;
    private static final int REGION_DEPTH_8_BIT = 3;
    private static final int SEGMENT_TYPE_CLUT_DEFINITION = 18;
    private static final int SEGMENT_TYPE_DISPLAY_DEFINITION = 20;
    private static final int SEGMENT_TYPE_OBJECT_DATA = 19;
    private static final int SEGMENT_TYPE_PAGE_COMPOSITION = 16;
    private static final int SEGMENT_TYPE_REGION_COMPOSITION = 17;
    private static final String TAG = "DvbParser";
    private static final byte[] defaultMap2To4 = {0, 7, 8, bx.f20591m};
    private static final byte[] defaultMap2To8 = {0, 119, -120, -1};
    private static final byte[] defaultMap4To8 = {0, 17, 34, 51, 68, 85, 102, 119, -120, -103, -86, -69, -52, -35, -18, -1};
    private Bitmap bitmap;
    private final Canvas canvas;
    private final ClutDefinition defaultClutDefinition;
    private final DisplayDefinition defaultDisplayDefinition;
    private final Paint defaultPaint;
    private final Paint fillRegionPaint;
    private final SubtitleService subtitleService;

    public static final class ClutDefinition {
        public final int[] clutEntries2Bit;
        public final int[] clutEntries4Bit;
        public final int[] clutEntries8Bit;
        public final int id;

        public ClutDefinition(int i6, int[] iArr, int[] iArr2, int[] iArr3) {
            this.id = i6;
            this.clutEntries2Bit = iArr;
            this.clutEntries4Bit = iArr2;
            this.clutEntries8Bit = iArr3;
        }
    }

    public static final class DisplayDefinition {
        public final int height;
        public final int horizontalPositionMaximum;
        public final int horizontalPositionMinimum;
        public final int verticalPositionMaximum;
        public final int verticalPositionMinimum;
        public final int width;

        public DisplayDefinition(int i6, int i7, int i8, int i9, int i10, int i11) {
            this.width = i6;
            this.height = i7;
            this.horizontalPositionMinimum = i8;
            this.horizontalPositionMaximum = i9;
            this.verticalPositionMinimum = i10;
            this.verticalPositionMaximum = i11;
        }
    }

    public static final class ObjectData {
        public final byte[] bottomFieldData;
        public final int id;
        public final boolean nonModifyingColorFlag;
        public final byte[] topFieldData;

        public ObjectData(int i6, boolean z6, byte[] bArr, byte[] bArr2) {
            this.id = i6;
            this.nonModifyingColorFlag = z6;
            this.topFieldData = bArr;
            this.bottomFieldData = bArr2;
        }
    }

    public static final class PageComposition {
        public final SparseArray<PageRegion> regions;
        public final int state;
        public final int timeOutSecs;
        public final int version;

        public PageComposition(int i6, int i7, int i8, SparseArray<PageRegion> sparseArray) {
            this.timeOutSecs = i6;
            this.version = i7;
            this.state = i8;
            this.regions = sparseArray;
        }
    }

    public static final class PageRegion {
        public final int horizontalAddress;
        public final int verticalAddress;

        public PageRegion(int i6, int i7) {
            this.horizontalAddress = i6;
            this.verticalAddress = i7;
        }
    }

    public static final class RegionComposition {
        public final int clutId;
        public final int depth;
        public final boolean fillFlag;
        public final int height;
        public final int id;
        public final int levelOfCompatibility;
        public final int pixelCode2Bit;
        public final int pixelCode4Bit;
        public final int pixelCode8Bit;
        public final SparseArray<RegionObject> regionObjects;
        public final int width;

        public RegionComposition(int i6, boolean z6, int i7, int i8, int i9, int i10, int i11, int i12, int i13, int i14, SparseArray<RegionObject> sparseArray) {
            this.id = i6;
            this.fillFlag = z6;
            this.width = i7;
            this.height = i8;
            this.levelOfCompatibility = i9;
            this.depth = i10;
            this.clutId = i11;
            this.pixelCode8Bit = i12;
            this.pixelCode4Bit = i13;
            this.pixelCode2Bit = i14;
            this.regionObjects = sparseArray;
        }

        public final void mergeFrom(RegionComposition regionComposition) {
            if (regionComposition == null) {
                return;
            }
            SparseArray<RegionObject> sparseArray = regionComposition.regionObjects;
            for (int i6 = 0; i6 < sparseArray.size(); i6++) {
                this.regionObjects.put(sparseArray.keyAt(i6), sparseArray.valueAt(i6));
            }
        }
    }

    public static final class RegionObject {
        public final int backgroundPixelCode;
        public final int foregroundPixelCode;
        public final int horizontalPosition;
        public final int provider;
        public final int type;
        public final int verticalPosition;

        public RegionObject(int i6, int i7, int i8, int i9, int i10, int i11) {
            this.type = i6;
            this.provider = i7;
            this.horizontalPosition = i8;
            this.verticalPosition = i9;
            this.foregroundPixelCode = i10;
            this.backgroundPixelCode = i11;
        }
    }

    public static final class SubtitleService {
        public final int ancillaryPageId;
        public DisplayDefinition displayDefinition;
        public PageComposition pageComposition;
        public final int subtitlePageId;
        public final SparseArray<RegionComposition> regions = new SparseArray<>();
        public final SparseArray<ClutDefinition> cluts = new SparseArray<>();
        public final SparseArray<ObjectData> objects = new SparseArray<>();
        public final SparseArray<ClutDefinition> ancillaryCluts = new SparseArray<>();
        public final SparseArray<ObjectData> ancillaryObjects = new SparseArray<>();

        public SubtitleService(int i6, int i7) {
            this.subtitlePageId = i6;
            this.ancillaryPageId = i7;
        }

        public final void reset() {
            this.regions.clear();
            this.cluts.clear();
            this.objects.clear();
            this.ancillaryCluts.clear();
            this.ancillaryObjects.clear();
            this.displayDefinition = null;
            this.pageComposition = null;
        }
    }

    public DvbParser(int i6, int i7) {
        Paint paint = new Paint();
        this.defaultPaint = paint;
        paint.setStyle(Paint.Style.FILL_AND_STROKE);
        paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC));
        paint.setPathEffect(null);
        Paint paint2 = new Paint();
        this.fillRegionPaint = paint2;
        paint2.setStyle(Paint.Style.FILL);
        paint2.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.DST_OVER));
        paint2.setPathEffect(null);
        this.canvas = new Canvas();
        this.defaultDisplayDefinition = new DisplayDefinition(719, 575, 0, 719, 0, 575);
        this.defaultClutDefinition = new ClutDefinition(0, generateDefault2BitClutEntries(), generateDefault4BitClutEntries(), generateDefault8BitClutEntries());
        this.subtitleService = new SubtitleService(i6, i7);
    }

    private static byte[] buildClutMapTable(int i6, int i7, ParsableBitArray parsableBitArray) {
        byte[] bArr = new byte[i6];
        for (int i8 = 0; i8 < i6; i8++) {
            bArr[i8] = (byte) parsableBitArray.readBits(i7);
        }
        return bArr;
    }

    private static int[] generateDefault2BitClutEntries() {
        return new int[]{0, -1, ViewCompat.MEASURED_STATE_MASK, -8421505};
    }

    private static int[] generateDefault4BitClutEntries() {
        int i6;
        int i7;
        int i8;
        int i9;
        int i10;
        int[] iArr = new int[16];
        iArr[0] = 0;
        for (int i11 = 1; i11 < 16; i11++) {
            if (i11 < 8) {
                if ((i11 & 1) != 0) {
                    i8 = 255;
                } else {
                    i8 = 0;
                }
                if ((i11 & 2) != 0) {
                    i9 = 255;
                } else {
                    i9 = 0;
                }
                if ((i11 & 4) != 0) {
                    i10 = 255;
                } else {
                    i10 = 0;
                }
                iArr[i11] = getColor(255, i8, i9, i10);
            } else {
                int i12 = 127;
                if ((i11 & 1) != 0) {
                    i6 = 127;
                } else {
                    i6 = 0;
                }
                if ((i11 & 2) != 0) {
                    i7 = 127;
                } else {
                    i7 = 0;
                }
                if ((i11 & 4) == 0) {
                    i12 = 0;
                }
                iArr[i11] = getColor(255, i6, i7, i12);
            }
        }
        return iArr;
    }

    private static int[] generateDefault8BitClutEntries() {
        int i6;
        int i7;
        int i8;
        int i9;
        int i10;
        int i11;
        int i12;
        int i13;
        int i14;
        int i15;
        int i16;
        int i17;
        int i18;
        int i19;
        int i20;
        int i21;
        int i22;
        int i23;
        int[] iArr = new int[256];
        iArr[0] = 0;
        for (int i24 = 0; i24 < 256; i24++) {
            int i25 = 255;
            if (i24 < 8) {
                if ((i24 & 1) != 0) {
                    i22 = 255;
                } else {
                    i22 = 0;
                }
                if ((i24 & 2) != 0) {
                    i23 = 255;
                } else {
                    i23 = 0;
                }
                if ((i24 & 4) == 0) {
                    i25 = 0;
                }
                iArr[i24] = getColor(63, i22, i23, i25);
            } else {
                int i26 = i24 & PluginCallback.DUMP_ACTIVITY;
                int i27 = 170;
                int i28 = 85;
                if (i26 != 0) {
                    if (i26 != 8) {
                        int i29 = 43;
                        if (i26 != 128) {
                            if (i26 == 136) {
                                if ((i24 & 1) != 0) {
                                    i18 = 43;
                                } else {
                                    i18 = 0;
                                }
                                if ((i24 & 16) != 0) {
                                    i19 = 85;
                                } else {
                                    i19 = 0;
                                }
                                int i30 = i18 + i19;
                                if ((i24 & 2) != 0) {
                                    i20 = 43;
                                } else {
                                    i20 = 0;
                                }
                                if ((i24 & 32) != 0) {
                                    i21 = 85;
                                } else {
                                    i21 = 0;
                                }
                                int i31 = i20 + i21;
                                if ((i24 & 4) == 0) {
                                    i29 = 0;
                                }
                                if ((i24 & 64) == 0) {
                                    i28 = 0;
                                }
                                iArr[i24] = getColor(255, i30, i31, i29 + i28);
                            }
                        } else {
                            if ((i24 & 1) != 0) {
                                i14 = 43;
                            } else {
                                i14 = 0;
                            }
                            int i32 = i14 + 127;
                            if ((i24 & 16) != 0) {
                                i15 = 85;
                            } else {
                                i15 = 0;
                            }
                            int i33 = i32 + i15;
                            if ((i24 & 2) != 0) {
                                i16 = 43;
                            } else {
                                i16 = 0;
                            }
                            int i34 = i16 + 127;
                            if ((i24 & 32) != 0) {
                                i17 = 85;
                            } else {
                                i17 = 0;
                            }
                            int i35 = i34 + i17;
                            if ((i24 & 4) == 0) {
                                i29 = 0;
                            }
                            int i36 = i29 + 127;
                            if ((i24 & 64) == 0) {
                                i28 = 0;
                            }
                            iArr[i24] = getColor(255, i33, i35, i36 + i28);
                        }
                    } else {
                        if ((i24 & 1) != 0) {
                            i10 = 85;
                        } else {
                            i10 = 0;
                        }
                        if ((i24 & 16) != 0) {
                            i11 = 170;
                        } else {
                            i11 = 0;
                        }
                        int i37 = i10 + i11;
                        if ((i24 & 2) != 0) {
                            i12 = 85;
                        } else {
                            i12 = 0;
                        }
                        if ((i24 & 32) != 0) {
                            i13 = 170;
                        } else {
                            i13 = 0;
                        }
                        int i38 = i12 + i13;
                        if ((i24 & 4) == 0) {
                            i28 = 0;
                        }
                        if ((i24 & 64) == 0) {
                            i27 = 0;
                        }
                        iArr[i24] = getColor(127, i37, i38, i28 + i27);
                    }
                } else {
                    if ((i24 & 1) != 0) {
                        i6 = 85;
                    } else {
                        i6 = 0;
                    }
                    if ((i24 & 16) != 0) {
                        i7 = 170;
                    } else {
                        i7 = 0;
                    }
                    int i39 = i6 + i7;
                    if ((i24 & 2) != 0) {
                        i8 = 85;
                    } else {
                        i8 = 0;
                    }
                    if ((i24 & 32) != 0) {
                        i9 = 170;
                    } else {
                        i9 = 0;
                    }
                    int i40 = i8 + i9;
                    if ((i24 & 4) == 0) {
                        i28 = 0;
                    }
                    if ((i24 & 64) == 0) {
                        i27 = 0;
                    }
                    iArr[i24] = getColor(255, i39, i40, i28 + i27);
                }
            }
        }
        return iArr;
    }

    private static int getColor(int i6, int i7, int i8, int i9) {
        return (i6 << 24) | (i7 << 16) | (i8 << 8) | i9;
    }

    private static int paint2BitPixelCodeString(ParsableBitArray parsableBitArray, int[] iArr, byte[] bArr, int i6, int i7, Paint paint, Canvas canvas) {
        boolean z6;
        int i8;
        int readBits;
        int readBits2;
        int i9 = i6;
        boolean z7 = false;
        while (true) {
            int readBits3 = parsableBitArray.readBits(2);
            if (readBits3 != 0) {
                z6 = z7;
            } else {
                if (parsableBitArray.readBit()) {
                    readBits = parsableBitArray.readBits(3) + 3;
                    readBits2 = parsableBitArray.readBits(2);
                } else if (parsableBitArray.readBit()) {
                    z6 = z7;
                    readBits3 = 0;
                } else {
                    int readBits4 = parsableBitArray.readBits(2);
                    if (readBits4 != 0) {
                        if (readBits4 != 1) {
                            if (readBits4 != 2) {
                                if (readBits4 != 3) {
                                    z6 = z7;
                                    readBits3 = 0;
                                } else {
                                    readBits = parsableBitArray.readBits(8) + 29;
                                    readBits2 = parsableBitArray.readBits(2);
                                }
                            } else {
                                readBits = parsableBitArray.readBits(4) + 12;
                                readBits2 = parsableBitArray.readBits(2);
                            }
                        } else {
                            z6 = z7;
                            readBits3 = 0;
                            i8 = 2;
                            if (i8 != 0 && paint != null) {
                                if (bArr != null) {
                                    readBits3 = bArr[readBits3];
                                }
                                paint.setColor(iArr[readBits3]);
                                canvas.drawRect(i9, i7, i9 + i8, i7 + 1, paint);
                            }
                            i9 += i8;
                            if (!z6) {
                                return i9;
                            }
                            z7 = z6;
                        }
                    } else {
                        readBits3 = 0;
                        z6 = true;
                    }
                    i8 = 0;
                    if (i8 != 0) {
                        if (bArr != null) {
                        }
                        paint.setColor(iArr[readBits3]);
                        canvas.drawRect(i9, i7, i9 + i8, i7 + 1, paint);
                    }
                    i9 += i8;
                    if (!z6) {
                    }
                }
                z6 = z7;
                i8 = readBits;
                readBits3 = readBits2;
                if (i8 != 0) {
                }
                i9 += i8;
                if (!z6) {
                }
            }
            i8 = 1;
            if (i8 != 0) {
            }
            i9 += i8;
            if (!z6) {
            }
        }
    }

    private static int paint4BitPixelCodeString(ParsableBitArray parsableBitArray, int[] iArr, byte[] bArr, int i6, int i7, Paint paint, Canvas canvas) {
        boolean z6;
        int i8;
        int readBits;
        int readBits2;
        int i9 = i6;
        boolean z7 = false;
        while (true) {
            int readBits3 = parsableBitArray.readBits(4);
            if (readBits3 != 0) {
                z6 = z7;
            } else {
                if (!parsableBitArray.readBit()) {
                    int readBits4 = parsableBitArray.readBits(3);
                    if (readBits4 != 0) {
                        z6 = z7;
                        i8 = readBits4 + 2;
                        readBits3 = 0;
                    } else {
                        readBits3 = 0;
                        z6 = true;
                        i8 = 0;
                    }
                } else {
                    if (!parsableBitArray.readBit()) {
                        readBits = parsableBitArray.readBits(2) + 4;
                        readBits2 = parsableBitArray.readBits(4);
                    } else {
                        int readBits5 = parsableBitArray.readBits(2);
                        if (readBits5 != 0) {
                            if (readBits5 != 1) {
                                if (readBits5 != 2) {
                                    if (readBits5 != 3) {
                                        z6 = z7;
                                        readBits3 = 0;
                                        i8 = 0;
                                    } else {
                                        readBits = parsableBitArray.readBits(8) + 25;
                                        readBits2 = parsableBitArray.readBits(4);
                                    }
                                } else {
                                    readBits = parsableBitArray.readBits(4) + 9;
                                    readBits2 = parsableBitArray.readBits(4);
                                }
                            } else {
                                z6 = z7;
                                readBits3 = 0;
                                i8 = 2;
                            }
                        } else {
                            z6 = z7;
                            readBits3 = 0;
                        }
                    }
                    z6 = z7;
                    i8 = readBits;
                    readBits3 = readBits2;
                }
                if (i8 != 0 && paint != null) {
                    if (bArr != null) {
                        readBits3 = bArr[readBits3];
                    }
                    paint.setColor(iArr[readBits3]);
                    canvas.drawRect(i9, i7, i9 + i8, i7 + 1, paint);
                }
                i9 += i8;
                if (!z6) {
                    return i9;
                }
                z7 = z6;
            }
            i8 = 1;
            if (i8 != 0) {
                if (bArr != null) {
                }
                paint.setColor(iArr[readBits3]);
                canvas.drawRect(i9, i7, i9 + i8, i7 + 1, paint);
            }
            i9 += i8;
            if (!z6) {
            }
        }
    }

    private static int paint8BitPixelCodeString(ParsableBitArray parsableBitArray, int[] iArr, byte[] bArr, int i6, int i7, Paint paint, Canvas canvas) {
        boolean z6;
        int readBits;
        int i8 = i6;
        boolean z7 = false;
        while (true) {
            int readBits2 = parsableBitArray.readBits(8);
            if (readBits2 != 0) {
                z6 = z7;
                readBits = 1;
            } else if (!parsableBitArray.readBit()) {
                int readBits3 = parsableBitArray.readBits(7);
                if (readBits3 != 0) {
                    z6 = z7;
                    readBits = readBits3;
                    readBits2 = 0;
                } else {
                    readBits2 = 0;
                    z6 = true;
                    readBits = 0;
                }
            } else {
                z6 = z7;
                readBits = parsableBitArray.readBits(7);
                readBits2 = parsableBitArray.readBits(8);
            }
            if (readBits != 0 && paint != null) {
                if (bArr != null) {
                    readBits2 = bArr[readBits2];
                }
                paint.setColor(iArr[readBits2]);
                canvas.drawRect(i8, i7, i8 + readBits, i7 + 1, paint);
            }
            i8 += readBits;
            if (z6) {
                return i8;
            }
            z7 = z6;
        }
    }

    private static void paintPixelDataSubBlock(byte[] bArr, int[] iArr, int i6, int i7, int i8, Paint paint, Canvas canvas) {
        byte[] bArr2;
        byte[] bArr3;
        byte[] bArr4;
        ParsableBitArray parsableBitArray = new ParsableBitArray(bArr);
        int i9 = i7;
        int i10 = i8;
        byte[] bArr5 = null;
        byte[] bArr6 = null;
        while (parsableBitArray.bitsLeft() != 0) {
            int readBits = parsableBitArray.readBits(8);
            if (readBits != 240) {
                switch (readBits) {
                    case 16:
                        if (i6 == 3) {
                            if (bArr5 == null) {
                                bArr3 = defaultMap2To8;
                            } else {
                                bArr3 = bArr5;
                            }
                        } else if (i6 == 2) {
                            if (bArr6 == null) {
                                bArr3 = defaultMap2To4;
                            } else {
                                bArr3 = bArr6;
                            }
                        } else {
                            bArr2 = null;
                            i9 = paint2BitPixelCodeString(parsableBitArray, iArr, bArr2, i9, i10, paint, canvas);
                            parsableBitArray.byteAlign();
                            break;
                        }
                        bArr2 = bArr3;
                        i9 = paint2BitPixelCodeString(parsableBitArray, iArr, bArr2, i9, i10, paint, canvas);
                        parsableBitArray.byteAlign();
                    case 17:
                        if (i6 == 3) {
                            bArr4 = defaultMap4To8;
                        } else {
                            bArr4 = null;
                        }
                        i9 = paint4BitPixelCodeString(parsableBitArray, iArr, bArr4, i9, i10, paint, canvas);
                        parsableBitArray.byteAlign();
                        break;
                    case 18:
                        i9 = paint8BitPixelCodeString(parsableBitArray, iArr, null, i9, i10, paint, canvas);
                        break;
                    default:
                        switch (readBits) {
                            case 32:
                                bArr6 = buildClutMapTable(4, 4, parsableBitArray);
                                break;
                            case 33:
                                bArr5 = buildClutMapTable(4, 8, parsableBitArray);
                                break;
                            case 34:
                                bArr5 = buildClutMapTable(16, 8, parsableBitArray);
                                break;
                        }
                }
            } else {
                i10 += 2;
                i9 = i7;
            }
        }
    }

    private static void paintPixelDataSubBlocks(ObjectData objectData, ClutDefinition clutDefinition, int i6, int i7, int i8, Paint paint, Canvas canvas) {
        int[] iArr;
        if (i6 == 3) {
            iArr = clutDefinition.clutEntries8Bit;
        } else if (i6 == 2) {
            iArr = clutDefinition.clutEntries4Bit;
        } else {
            iArr = clutDefinition.clutEntries2Bit;
        }
        int[] iArr2 = iArr;
        paintPixelDataSubBlock(objectData.topFieldData, iArr2, i6, i7, i8, paint, canvas);
        paintPixelDataSubBlock(objectData.bottomFieldData, iArr2, i6, i7, i8 + 1, paint, canvas);
    }

    private static ClutDefinition parseClutDefinition(ParsableBitArray parsableBitArray, int i6) {
        int[] iArr;
        int readBits;
        int i7;
        int readBits2;
        int i8;
        int i9;
        int i10 = 8;
        int readBits3 = parsableBitArray.readBits(8);
        parsableBitArray.skipBits(8);
        int i11 = 2;
        int i12 = i6 - 2;
        int[] generateDefault2BitClutEntries = generateDefault2BitClutEntries();
        int[] generateDefault4BitClutEntries = generateDefault4BitClutEntries();
        int[] generateDefault8BitClutEntries = generateDefault8BitClutEntries();
        while (i12 > 0) {
            int readBits4 = parsableBitArray.readBits(i10);
            int readBits5 = parsableBitArray.readBits(i10);
            int i13 = i12 - 2;
            if ((readBits5 & 128) != 0) {
                iArr = generateDefault2BitClutEntries;
            } else if ((readBits5 & 64) != 0) {
                iArr = generateDefault4BitClutEntries;
            } else {
                iArr = generateDefault8BitClutEntries;
            }
            if ((readBits5 & 1) != 0) {
                i8 = parsableBitArray.readBits(i10);
                i9 = parsableBitArray.readBits(i10);
                readBits = parsableBitArray.readBits(i10);
                readBits2 = parsableBitArray.readBits(i10);
                i7 = i13 - 4;
            } else {
                int readBits6 = parsableBitArray.readBits(6) << i11;
                int readBits7 = parsableBitArray.readBits(4) << 4;
                readBits = parsableBitArray.readBits(4) << 4;
                i7 = i13 - 2;
                readBits2 = parsableBitArray.readBits(i11) << 6;
                i8 = readBits6;
                i9 = readBits7;
            }
            if (i8 == 0) {
                i9 = 0;
                readBits = 0;
                readBits2 = 255;
            }
            double d6 = i8;
            double d7 = i9 - 128;
            double d8 = readBits - 128;
            iArr[readBits4] = getColor((byte) (255 - (readBits2 & 255)), Util.constrainValue((int) (d6 + (1.402d * d7)), 0, 255), Util.constrainValue((int) ((d6 - (0.34414d * d8)) - (d7 * 0.71414d)), 0, 255), Util.constrainValue((int) (d6 + (d8 * 1.772d)), 0, 255));
            i12 = i7;
            readBits3 = readBits3;
            i10 = 8;
            i11 = 2;
        }
        return new ClutDefinition(readBits3, generateDefault2BitClutEntries, generateDefault4BitClutEntries, generateDefault8BitClutEntries);
    }

    private static DisplayDefinition parseDisplayDefinition(ParsableBitArray parsableBitArray) {
        int i6;
        int i7;
        int i8;
        int i9;
        parsableBitArray.skipBits(4);
        boolean readBit = parsableBitArray.readBit();
        parsableBitArray.skipBits(3);
        int readBits = parsableBitArray.readBits(16);
        int readBits2 = parsableBitArray.readBits(16);
        if (readBit) {
            int readBits3 = parsableBitArray.readBits(16);
            int readBits4 = parsableBitArray.readBits(16);
            int readBits5 = parsableBitArray.readBits(16);
            i7 = parsableBitArray.readBits(16);
            i6 = readBits4;
            i9 = readBits5;
            i8 = readBits3;
        } else {
            i6 = readBits;
            i7 = readBits2;
            i8 = 0;
            i9 = 0;
        }
        return new DisplayDefinition(readBits, readBits2, i8, i6, i9, i7);
    }

    private static ObjectData parseObjectData(ParsableBitArray parsableBitArray) {
        byte[] bArr;
        int readBits = parsableBitArray.readBits(16);
        parsableBitArray.skipBits(4);
        int readBits2 = parsableBitArray.readBits(2);
        boolean readBit = parsableBitArray.readBit();
        parsableBitArray.skipBits(1);
        byte[] bArr2 = null;
        if (readBits2 == 1) {
            parsableBitArray.skipBits(parsableBitArray.readBits(8) * 16);
        } else if (readBits2 == 0) {
            int readBits3 = parsableBitArray.readBits(16);
            int readBits4 = parsableBitArray.readBits(16);
            if (readBits3 > 0) {
                bArr2 = new byte[readBits3];
                parsableBitArray.readBytes(bArr2, 0, readBits3);
            }
            if (readBits4 > 0) {
                bArr = new byte[readBits4];
                parsableBitArray.readBytes(bArr, 0, readBits4);
                return new ObjectData(readBits, readBit, bArr2, bArr);
            }
        }
        bArr = bArr2;
        return new ObjectData(readBits, readBit, bArr2, bArr);
    }

    private static PageComposition parsePageComposition(ParsableBitArray parsableBitArray, int i6) {
        int readBits = parsableBitArray.readBits(8);
        int readBits2 = parsableBitArray.readBits(4);
        int readBits3 = parsableBitArray.readBits(2);
        parsableBitArray.skipBits(2);
        int i7 = i6 - 2;
        SparseArray sparseArray = new SparseArray();
        while (i7 > 0) {
            int readBits4 = parsableBitArray.readBits(8);
            parsableBitArray.skipBits(8);
            i7 -= 6;
            sparseArray.put(readBits4, new PageRegion(parsableBitArray.readBits(16), parsableBitArray.readBits(16)));
        }
        return new PageComposition(readBits, readBits2, readBits3, sparseArray);
    }

    private static RegionComposition parseRegionComposition(ParsableBitArray parsableBitArray, int i6) {
        int readBits;
        int readBits2;
        int readBits3 = parsableBitArray.readBits(8);
        parsableBitArray.skipBits(4);
        boolean readBit = parsableBitArray.readBit();
        parsableBitArray.skipBits(3);
        int i7 = 16;
        int readBits4 = parsableBitArray.readBits(16);
        int readBits5 = parsableBitArray.readBits(16);
        int readBits6 = parsableBitArray.readBits(3);
        int readBits7 = parsableBitArray.readBits(3);
        int i8 = 2;
        parsableBitArray.skipBits(2);
        int readBits8 = parsableBitArray.readBits(8);
        int readBits9 = parsableBitArray.readBits(8);
        int readBits10 = parsableBitArray.readBits(4);
        int readBits11 = parsableBitArray.readBits(2);
        parsableBitArray.skipBits(2);
        int i9 = i6 - 10;
        SparseArray sparseArray = new SparseArray();
        while (i9 > 0) {
            int readBits12 = parsableBitArray.readBits(i7);
            int readBits13 = parsableBitArray.readBits(i8);
            int readBits14 = parsableBitArray.readBits(i8);
            int readBits15 = parsableBitArray.readBits(12);
            int i10 = readBits11;
            parsableBitArray.skipBits(4);
            int readBits16 = parsableBitArray.readBits(12);
            i9 -= 6;
            if (readBits13 != 1 && readBits13 != 2) {
                readBits = 0;
                readBits2 = 0;
            } else {
                i9 -= 2;
                readBits = parsableBitArray.readBits(8);
                readBits2 = parsableBitArray.readBits(8);
            }
            sparseArray.put(readBits12, new RegionObject(readBits13, readBits14, readBits15, readBits16, readBits, readBits2));
            readBits11 = i10;
            i8 = 2;
            i7 = 16;
        }
        return new RegionComposition(readBits3, readBit, readBits4, readBits5, readBits6, readBits7, readBits8, readBits9, readBits10, readBits11, sparseArray);
    }

    private static void parseSubtitlingSegment(ParsableBitArray parsableBitArray, SubtitleService subtitleService) {
        int readBits = parsableBitArray.readBits(8);
        int readBits2 = parsableBitArray.readBits(16);
        int readBits3 = parsableBitArray.readBits(16);
        int bytePosition = parsableBitArray.getBytePosition() + readBits3;
        if (readBits3 * 8 > parsableBitArray.bitsLeft()) {
            Log.w(TAG, "Data field length exceeds limit");
            parsableBitArray.skipBits(parsableBitArray.bitsLeft());
            return;
        }
        switch (readBits) {
            case 16:
                if (readBits2 == subtitleService.subtitlePageId) {
                    PageComposition pageComposition = subtitleService.pageComposition;
                    PageComposition parsePageComposition = parsePageComposition(parsableBitArray, readBits3);
                    if (parsePageComposition.state != 0) {
                        subtitleService.pageComposition = parsePageComposition;
                        subtitleService.regions.clear();
                        subtitleService.cluts.clear();
                        subtitleService.objects.clear();
                        break;
                    } else if (pageComposition != null && pageComposition.version != parsePageComposition.version) {
                        subtitleService.pageComposition = parsePageComposition;
                        break;
                    }
                }
                break;
            case 17:
                PageComposition pageComposition2 = subtitleService.pageComposition;
                if (readBits2 == subtitleService.subtitlePageId && pageComposition2 != null) {
                    RegionComposition parseRegionComposition = parseRegionComposition(parsableBitArray, readBits3);
                    if (pageComposition2.state == 0) {
                        parseRegionComposition.mergeFrom(subtitleService.regions.get(parseRegionComposition.id));
                    }
                    subtitleService.regions.put(parseRegionComposition.id, parseRegionComposition);
                    break;
                }
                break;
            case 18:
                if (readBits2 == subtitleService.subtitlePageId) {
                    ClutDefinition parseClutDefinition = parseClutDefinition(parsableBitArray, readBits3);
                    subtitleService.cluts.put(parseClutDefinition.id, parseClutDefinition);
                    break;
                } else if (readBits2 == subtitleService.ancillaryPageId) {
                    ClutDefinition parseClutDefinition2 = parseClutDefinition(parsableBitArray, readBits3);
                    subtitleService.ancillaryCluts.put(parseClutDefinition2.id, parseClutDefinition2);
                    break;
                }
                break;
            case 19:
                if (readBits2 == subtitleService.subtitlePageId) {
                    ObjectData parseObjectData = parseObjectData(parsableBitArray);
                    subtitleService.objects.put(parseObjectData.id, parseObjectData);
                    break;
                } else if (readBits2 == subtitleService.ancillaryPageId) {
                    ObjectData parseObjectData2 = parseObjectData(parsableBitArray);
                    subtitleService.ancillaryObjects.put(parseObjectData2.id, parseObjectData2);
                    break;
                }
                break;
            case 20:
                if (readBits2 == subtitleService.subtitlePageId) {
                    subtitleService.displayDefinition = parseDisplayDefinition(parsableBitArray);
                    break;
                }
                break;
        }
        parsableBitArray.skipBytes(bytePosition - parsableBitArray.getBytePosition());
    }

    public final List<Cue> decode(byte[] bArr, int i6) {
        int i7;
        ObjectData objectData;
        int i8;
        SparseArray<RegionObject> sparseArray;
        Paint paint;
        ParsableBitArray parsableBitArray = new ParsableBitArray(bArr, i6);
        while (parsableBitArray.bitsLeft() >= 48 && parsableBitArray.readBits(8) == 15) {
            parseSubtitlingSegment(parsableBitArray, this.subtitleService);
        }
        SubtitleService subtitleService = this.subtitleService;
        if (subtitleService.pageComposition == null) {
            return Collections.emptyList();
        }
        DisplayDefinition displayDefinition = subtitleService.displayDefinition;
        if (displayDefinition == null) {
            displayDefinition = this.defaultDisplayDefinition;
        }
        Bitmap bitmap = this.bitmap;
        if (bitmap == null || displayDefinition.width + 1 != bitmap.getWidth() || displayDefinition.height + 1 != this.bitmap.getHeight()) {
            Bitmap createBitmap = Bitmap.createBitmap(displayDefinition.width + 1, displayDefinition.height + 1, Bitmap.Config.ARGB_8888);
            this.bitmap = createBitmap;
            this.canvas.setBitmap(createBitmap);
        }
        ArrayList arrayList = new ArrayList();
        SparseArray<PageRegion> sparseArray2 = this.subtitleService.pageComposition.regions;
        for (int i9 = 0; i9 < sparseArray2.size(); i9++) {
            PageRegion valueAt = sparseArray2.valueAt(i9);
            RegionComposition regionComposition = this.subtitleService.regions.get(sparseArray2.keyAt(i9));
            int i10 = valueAt.horizontalAddress + displayDefinition.horizontalPositionMinimum;
            int i11 = valueAt.verticalAddress + displayDefinition.verticalPositionMinimum;
            float f6 = i10;
            float f7 = i11;
            this.canvas.clipRect(f6, f7, Math.min(regionComposition.width + i10, displayDefinition.horizontalPositionMaximum), Math.min(regionComposition.height + i11, displayDefinition.verticalPositionMaximum), Region.Op.REPLACE);
            ClutDefinition clutDefinition = this.subtitleService.cluts.get(regionComposition.clutId);
            if (clutDefinition == null && (clutDefinition = this.subtitleService.ancillaryCluts.get(regionComposition.clutId)) == null) {
                clutDefinition = this.defaultClutDefinition;
            }
            SparseArray<RegionObject> sparseArray3 = regionComposition.regionObjects;
            int i12 = 0;
            while (i12 < sparseArray3.size()) {
                int keyAt = sparseArray3.keyAt(i12);
                RegionObject valueAt2 = sparseArray3.valueAt(i12);
                ObjectData objectData2 = this.subtitleService.objects.get(keyAt);
                if (objectData2 == null) {
                    objectData = this.subtitleService.ancillaryObjects.get(keyAt);
                } else {
                    objectData = objectData2;
                }
                if (objectData != null) {
                    if (objectData.nonModifyingColorFlag) {
                        paint = null;
                    } else {
                        paint = this.defaultPaint;
                    }
                    i8 = i12;
                    sparseArray = sparseArray3;
                    paintPixelDataSubBlocks(objectData, clutDefinition, regionComposition.depth, valueAt2.horizontalPosition + i10, i11 + valueAt2.verticalPosition, paint, this.canvas);
                } else {
                    i8 = i12;
                    sparseArray = sparseArray3;
                }
                i12 = i8 + 1;
                sparseArray3 = sparseArray;
            }
            if (regionComposition.fillFlag) {
                int i13 = regionComposition.depth;
                if (i13 == 3) {
                    i7 = clutDefinition.clutEntries8Bit[regionComposition.pixelCode8Bit];
                } else if (i13 == 2) {
                    i7 = clutDefinition.clutEntries4Bit[regionComposition.pixelCode4Bit];
                } else {
                    i7 = clutDefinition.clutEntries2Bit[regionComposition.pixelCode2Bit];
                }
                this.fillRegionPaint.setColor(i7);
                this.canvas.drawRect(f6, f7, regionComposition.width + i10, regionComposition.height + i11, this.fillRegionPaint);
            }
            Bitmap createBitmap2 = Bitmap.createBitmap(this.bitmap, i10, i11, regionComposition.width, regionComposition.height);
            int i14 = displayDefinition.width;
            int i15 = displayDefinition.height;
            arrayList.add(new Cue(createBitmap2, f6 / i14, 0, f7 / i15, 0, regionComposition.width / i14, regionComposition.height / i15));
            this.canvas.drawColor(0, PorterDuff.Mode.CLEAR);
        }
        return arrayList;
    }

    public final void reset() {
        this.subtitleService.reset();
    }
}