1378 lines
43 KiB
Java
1378 lines
43 KiB
Java
package defpackage;
|
|
|
|
import com.mojang.blaze3d.platform.NativeImage;
|
|
import java.util.Iterator;
|
|
import java.util.List;
|
|
import java.util.concurrent.ArrayBlockingQueue;
|
|
import java.util.concurrent.CopyOnWriteArrayList;
|
|
import java.util.concurrent.TimeUnit;
|
|
import java.util.concurrent.atomic.AtomicInteger;
|
|
import javax.sound.sampled.AudioFormat;
|
|
import javax.sound.sampled.AudioSystem;
|
|
import javax.sound.sampled.SourceDataLine;
|
|
import javax.sound.sampled.DataLine.Info;
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.renderer.texture.DynamicTexture;
|
|
import net.minecraft.resources.Identifier;
|
|
import net.sourceforge.jaad.aac.Decoder;
|
|
import net.sourceforge.jaad.aac.SampleBuffer;
|
|
import org.jcodec.common.model.ColorSpace;
|
|
import org.jcodec.common.model.Picture;
|
|
import org.jcodec.common.model.Rect;
|
|
import org.jcodec.scale.ColorUtil;
|
|
import org.jcodec.scale.Transform;
|
|
|
|
public final class aod {
|
|
private static final String TEXTURE_PREFIX = "watch_";
|
|
private static final String VIDEO_THREAD = "EvoWatchVideo-";
|
|
private static final String AUDIO_THREAD = "EvoWatchAudio-";
|
|
private static final String REAPER_THREAD = "EvoWatchReaper-";
|
|
private static final String RESOLVE_FAILURE = "watch resolve failed for {}";
|
|
private static final String VIDEO_FAILURE = "watch video decode failed for {}";
|
|
private static final String AUDIO_FAILURE = "watch audio failed for {}";
|
|
private static final String AUDIO_FRAME_FAILURE = "watch audio frame skipped for {}";
|
|
private static final String DECODER_STUCK = "watch decoder for {} did not stop, frame pool leaked";
|
|
private static final int POOL_SIZE = 4;
|
|
private static final long MILLIS_PER_SECOND = 1000L;
|
|
private static final long NANOS_PER_MILLI = 1000000L;
|
|
private static final long LATE_FRAME_MS = 60L;
|
|
private static final long EARLY_FRAME_MS = 8L;
|
|
private static final long POOL_WAIT_MS = 20L;
|
|
private static final long IDLE_WAIT_MS = 15L;
|
|
private static final long JOIN_MS = 2000L;
|
|
private static final int SAMPLE_BITS = 16;
|
|
private static final int BYTES_PER_SAMPLE = 2;
|
|
private static final int LINE_BUFFER_MS = 250;
|
|
private static final int BYTE_MASK = 255;
|
|
private static final int BYTE_SHIFT = 8;
|
|
private static final float UNITY_GAIN = 1.0F;
|
|
private static final AtomicInteger SERIAL = new AtomicInteger();
|
|
private final String videoId;
|
|
private final int serial = SERIAL.incrementAndGet();
|
|
private final Identifier textureId = bz.id("watch_" + this.serial);
|
|
private final AtomicInteger generation = new AtomicInteger();
|
|
private final ArrayBlockingQueue<aob> free = new ArrayBlockingQueue<>(4);
|
|
private final ArrayBlockingQueue<aob> ready = new ArrayBlockingQueue<>(4);
|
|
private final Object signal = new Object();
|
|
private final List<aob> slots = new CopyOnWriteArrayList<>();
|
|
private volatile aoc status = aoc.LOADING;
|
|
private volatile String failure;
|
|
private volatile aoj video;
|
|
private volatile anv videoSource;
|
|
private volatile anv audioSource;
|
|
private volatile boolean running = (boolean)(((1)) != 0);
|
|
private volatile boolean paused;
|
|
private volatile long seekTargetMs;
|
|
private volatile float gain = 1.0F;
|
|
private volatile aoa anchor;
|
|
private volatile SourceDataLine line;
|
|
private volatile int sampleRate;
|
|
private volatile boolean videoEnded;
|
|
private volatile boolean audioEnded;
|
|
private volatile boolean hasAudio;
|
|
private volatile int frameWidth;
|
|
private volatile int frameHeight;
|
|
private Thread videoThread;
|
|
private Thread audioThread;
|
|
private NativeImage display;
|
|
private DynamicTexture texture;
|
|
private boolean hasFrame;
|
|
private boolean closed;
|
|
|
|
public aod(String var1, long var2, boolean var4) {
|
|
this.videoId = var1;
|
|
this.seekTargetMs = Math.max((5925869321369282789L ^ -5925869321369282789L) + ((5925869321369282789L & -5925869321369282789L) << 1), var2);
|
|
this.paused = var4;
|
|
}
|
|
|
|
public void start() {
|
|
aok.resolve(this.videoId)
|
|
.whenComplete(
|
|
(var1, var2) -> {
|
|
if (var2 != null) {
|
|
this.fail(
|
|
"watch resolve failed for {}",
|
|
rootMessage(var2),
|
|
var2
|
|
);
|
|
} else if (this.running) {
|
|
this.video = var1;
|
|
this.videoSource = new anv(var1.videoUrl());
|
|
this.audioSource = var1.progressive() ? this.videoSource : new anv(var1.audioUrl());
|
|
this.videoThread = daemon(this::runVideo, "EvoWatchVideo-" + this.serial);
|
|
this.audioThread = daemon(this::runAudio, "EvoWatchAudio-" + this.serial);
|
|
}
|
|
}
|
|
);
|
|
}
|
|
|
|
public String videoId() {
|
|
return this.videoId;
|
|
}
|
|
|
|
public String title() {
|
|
aoj var1 = null;
|
|
String var3 = null;
|
|
int var2 = 1930177096;
|
|
|
|
while (true) {
|
|
switch (var2) {
|
|
case -882499708:
|
|
var3 = null;
|
|
var2 = 1119471736;
|
|
break;
|
|
case -328335424:
|
|
var3 = var1.title();
|
|
var2 = 1119471736;
|
|
break;
|
|
case 1119471736:
|
|
return var3;
|
|
case 1930177096:
|
|
default:
|
|
var1 = this.video;
|
|
if (var1 == null) {
|
|
var2 = -882499708;
|
|
} else {
|
|
var2 = -328335424;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public long durationMs() {
|
|
aoj var1 = null;
|
|
long var3 = (-3465570995287832169L | 3465570995287832169L) + (-3465570995287832169L & 3465570995287832169L);
|
|
int var2 = 980559435;
|
|
|
|
while (true) {
|
|
switch (var2) {
|
|
case -2077771018:
|
|
var3 = var1.durationMs();
|
|
var2 = 1499397695;
|
|
break;
|
|
case 515342224:
|
|
var3 = (-3837591716632270436L | 3837591716632270436L) + (-3837591716632270436L & 3837591716632270436L);
|
|
var2 = 1499397695;
|
|
break;
|
|
case 980559435:
|
|
default:
|
|
var1 = this.video;
|
|
if (var1 == null) {
|
|
var2 = 515342224;
|
|
} else {
|
|
var2 = -2077771018;
|
|
}
|
|
break;
|
|
case 1499397695:
|
|
return var3;
|
|
}
|
|
}
|
|
}
|
|
|
|
public aoc status() {
|
|
return this.status;
|
|
}
|
|
|
|
public String failure() {
|
|
return this.failure;
|
|
}
|
|
|
|
public boolean isPaused() {
|
|
return this.paused;
|
|
}
|
|
|
|
public boolean hasFrame() {
|
|
return this.hasFrame;
|
|
}
|
|
|
|
public Identifier textureId() {
|
|
return this.textureId;
|
|
}
|
|
|
|
public int frameWidth() {
|
|
return this.frameWidth;
|
|
}
|
|
|
|
public int frameHeight() {
|
|
return this.frameHeight;
|
|
}
|
|
|
|
public void setGain(float var1) {
|
|
this.gain = Math.clamp(var1, 0.0F, 1.0F);
|
|
}
|
|
|
|
public long positionMs() {
|
|
aoa var1 = null;
|
|
SourceDataLine var2 = null;
|
|
long var3 = (6188183043137750143L | -6188183043137750143L) + (6188183043137750143L & -6188183043137750143L);
|
|
int var5 = -2048136986;
|
|
|
|
while (true) {
|
|
switch (var5) {
|
|
case -2048136986:
|
|
default:
|
|
var1 = this.anchor;
|
|
if (var1 != null) {
|
|
var5 = 1172244823;
|
|
} else {
|
|
var5 = -192661999;
|
|
}
|
|
break;
|
|
case -1945001601:
|
|
if (var2 != null) {
|
|
var5 = -849433870;
|
|
} else {
|
|
var5 = -633070380;
|
|
}
|
|
break;
|
|
case -849433870:
|
|
if (this.sampleRate > 0) {
|
|
var5 = -411790632;
|
|
} else {
|
|
var5 = -633070380;
|
|
}
|
|
break;
|
|
case -633070380:
|
|
if (this.paused) {
|
|
var5 = 1677629783;
|
|
} else {
|
|
var5 = 196173470;
|
|
}
|
|
break;
|
|
case -411790632:
|
|
var3 = Math.max(
|
|
(8947316226511673836L | -8947316226511673836L) + (8947316226511673836L & -8947316226511673836L), var2.getLongFramePosition() - var1.frame()
|
|
);
|
|
return var1.mediaMs()
|
|
+ var3 * ((-3968573025936777621L | 3968573025936778621L) + (-3968573025936777621L & 3968573025936778621L)) / this.sampleRate;
|
|
case -192661999:
|
|
return this.seekTargetMs;
|
|
case 196173470:
|
|
return var1.mediaMs()
|
|
+ (System.nanoTime() - var1.wallNanos()) / ((-8632156204395909199L | 8632156204396909199L) + (-8632156204395909199L & 8632156204396909199L));
|
|
case 1172244823:
|
|
if (var1.generation() != this.generation.get()) {
|
|
var5 = -192661999;
|
|
} else {
|
|
var5 = 1455614000;
|
|
}
|
|
break;
|
|
case 1455614000:
|
|
var2 = this.line;
|
|
if (var1.audio()) {
|
|
var5 = -1945001601;
|
|
} else {
|
|
var5 = -633070380;
|
|
}
|
|
break;
|
|
case 1677629783:
|
|
return var1.mediaMs();
|
|
}
|
|
}
|
|
}
|
|
|
|
public void seek(long var1) {
|
|
SourceDataLine var3 = null;
|
|
int var4 = -1009208034;
|
|
|
|
while (true) {
|
|
switch (var4) {
|
|
case -1009208034:
|
|
default:
|
|
this.seekTargetMs = Math.max((-7485496828872182385L ^ 7485496828872182385L) + ((-7485496828872182385L & 7485496828872182385L) << 1), var1);
|
|
this.anchor = null;
|
|
this.videoEnded = (boolean)(((0)) != 0);
|
|
this.audioEnded = (boolean)(((0)) != 0);
|
|
if (this.status == aoc.ENDED) {
|
|
var4 = 1151701130;
|
|
} else {
|
|
var4 = 1913897812;
|
|
}
|
|
break;
|
|
case -226363033:
|
|
this.wake();
|
|
return;
|
|
case 1151701130:
|
|
this.status = aoc.PLAYING;
|
|
var4 = 1913897812;
|
|
break;
|
|
case 1913897812:
|
|
this.generation.incrementAndGet();
|
|
var3 = this.line;
|
|
if (var3 != null) {
|
|
var4 = 1992949470;
|
|
} else {
|
|
var4 = -226363033;
|
|
}
|
|
break;
|
|
case 1992949470:
|
|
var3.flush();
|
|
var4 = -226363033;
|
|
}
|
|
}
|
|
}
|
|
|
|
public void setPaused(boolean var1) {
|
|
long var2 = (2398624077890781551L | -2398624077890781551L) + (2398624077890781551L & -2398624077890781551L);
|
|
SourceDataLine var4 = null;
|
|
aoa var5 = null;
|
|
int var6 = -1461985418;
|
|
|
|
while (true) {
|
|
switch (var6) {
|
|
case -1914059453:
|
|
if (var4 != null) {
|
|
var6 = -203083125;
|
|
} else {
|
|
var6 = 1499214018;
|
|
}
|
|
break;
|
|
case -1608669614:
|
|
if (!var5.audio()) {
|
|
var6 = 236721753;
|
|
} else {
|
|
var6 = -1914059453;
|
|
}
|
|
break;
|
|
case -1598130700:
|
|
if (var1) {
|
|
var6 = -832116401;
|
|
} else {
|
|
var6 = 1664883649;
|
|
}
|
|
break;
|
|
case -1536254337:
|
|
if (var5.audio()) {
|
|
var6 = -1598130700;
|
|
} else {
|
|
var6 = 1499214018;
|
|
}
|
|
break;
|
|
case -1461985418:
|
|
default:
|
|
if (this.paused == var1) {
|
|
var6 = 471459757;
|
|
} else {
|
|
var6 = 1290510745;
|
|
}
|
|
break;
|
|
case -832116401:
|
|
var4.stop();
|
|
var6 = 1499214018;
|
|
break;
|
|
case -203083125:
|
|
if (var5 != null) {
|
|
var6 = -1536254337;
|
|
} else {
|
|
var6 = 1499214018;
|
|
}
|
|
break;
|
|
case 236721753:
|
|
this.anchor = new aoa(
|
|
var5.generation(),
|
|
var2,
|
|
(1647966063517872319L | -1647966063517872319L) + (1647966063517872319L & -1647966063517872319L),
|
|
System.nanoTime(),
|
|
(boolean)((((661120138 | -661120138) + (661120138 & -661120138))
|
|
) != 0));
|
|
var6 = -1914059453;
|
|
break;
|
|
case 471459757:
|
|
return;
|
|
case 1290510745:
|
|
var2 = this.positionMs();
|
|
this.paused = var1;
|
|
var4 = this.line;
|
|
var5 = this.anchor;
|
|
if (var5 != null) {
|
|
var6 = -1608669614;
|
|
} else {
|
|
var6 = -1914059453;
|
|
}
|
|
break;
|
|
case 1499214018:
|
|
this.wake();
|
|
return;
|
|
case 1664883649:
|
|
var4.start();
|
|
var6 = 1499214018;
|
|
}
|
|
}
|
|
}
|
|
|
|
public void sync(long var1, boolean var3, long var4) {
|
|
int var6 = 355962576;
|
|
|
|
while (true) {
|
|
switch (var6) {
|
|
case -2002493382:
|
|
return;
|
|
case -1985243038:
|
|
this.seek(var1);
|
|
var6 = -1694953781;
|
|
break;
|
|
case -1694953781:
|
|
return;
|
|
case 76743947:
|
|
if (Math.abs(this.positionMs() - var1) > var4) {
|
|
var6 = -1985243038;
|
|
} else {
|
|
var6 = -1694953781;
|
|
}
|
|
break;
|
|
case 355962576:
|
|
default:
|
|
this.setPaused(var3);
|
|
if (this.status == aoc.FAILED) {
|
|
var6 = -2002493382;
|
|
} else {
|
|
var6 = 76743947;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void update() {
|
|
int var1 = 0;
|
|
long var2 = (-3969580860454588637L | 3969580860454588637L) + (-3969580860454588637L & 3969580860454588637L);
|
|
aob var4 = null;
|
|
aob var5 = null;
|
|
int var6 = -752572579;
|
|
|
|
while (true) {
|
|
switch (var6) {
|
|
case -2126754425:
|
|
if (this.status == aoc.PLAYING) {
|
|
var6 = -981053301;
|
|
} else {
|
|
var6 = 1127402712;
|
|
}
|
|
break;
|
|
case -1901376885:
|
|
var4 = var5;
|
|
var6 = 1485889846;
|
|
break;
|
|
case -1864099931:
|
|
var1 = this.generation.get();
|
|
var2 = this.positionMs();
|
|
var4 = null;
|
|
var6 = 1485889846;
|
|
break;
|
|
case -1663137892:
|
|
return;
|
|
case -1407030507:
|
|
var6 = -375101689;
|
|
break;
|
|
case -1315074128:
|
|
return;
|
|
case -1271253763:
|
|
return;
|
|
case -1098767342:
|
|
if (var4 != null) {
|
|
var6 = -1407030507;
|
|
} else {
|
|
var6 = -960248404;
|
|
}
|
|
break;
|
|
case -981053301:
|
|
this.status = aoc.ENDED;
|
|
var6 = 1127402712;
|
|
break;
|
|
case -960248404:
|
|
this.ready.poll();
|
|
if (var4 != null) {
|
|
var6 = 609539202;
|
|
} else {
|
|
var6 = -1901376885;
|
|
}
|
|
break;
|
|
case -752572579:
|
|
default:
|
|
if (this.closed) {
|
|
var6 = -1663137892;
|
|
} else {
|
|
var6 = -535362722;
|
|
}
|
|
break;
|
|
case -721448017:
|
|
return;
|
|
case -535362722:
|
|
if (this.videoEnded) {
|
|
var6 = 917437613;
|
|
} else {
|
|
var6 = 1127402712;
|
|
}
|
|
break;
|
|
case -375101689:
|
|
if (var4 == null) {
|
|
var6 = -721448017;
|
|
} else {
|
|
var6 = 2044556909;
|
|
}
|
|
break;
|
|
case 72077994:
|
|
if (this.texture == null) {
|
|
var6 = 1933863246;
|
|
} else {
|
|
var6 = -1864099931;
|
|
}
|
|
break;
|
|
case 560600058:
|
|
if (var5.generation != var1) {
|
|
var6 = 1032830805;
|
|
} else {
|
|
var6 = 2108152569;
|
|
}
|
|
break;
|
|
case 609539202:
|
|
this.free.offer(var4);
|
|
var6 = -1901376885;
|
|
break;
|
|
case 917437613:
|
|
if (this.ready.isEmpty()) {
|
|
var6 = 1892961121;
|
|
} else {
|
|
var6 = 1127402712;
|
|
}
|
|
break;
|
|
case 1032830805:
|
|
this.ready.poll();
|
|
this.free.offer(var5);
|
|
var6 = 1485889846;
|
|
break;
|
|
case 1127402712:
|
|
if (this.frameWidth > 0) {
|
|
var6 = 1867881247;
|
|
} else {
|
|
var6 = -1315074128;
|
|
}
|
|
break;
|
|
case 1485889846:
|
|
if ((var5 = this.ready.peek()) != null) {
|
|
var6 = 560600058;
|
|
} else {
|
|
var6 = -375101689;
|
|
}
|
|
break;
|
|
case 1692696971:
|
|
this.status = aoc.PLAYING;
|
|
var6 = -1271253763;
|
|
break;
|
|
case 1788744897:
|
|
if (this.audioEnded) {
|
|
var6 = -2126754425;
|
|
} else {
|
|
var6 = 1127402712;
|
|
}
|
|
break;
|
|
case 1867881247:
|
|
if (this.frameHeight <= 0) {
|
|
var6 = -1315074128;
|
|
} else {
|
|
var6 = 72077994;
|
|
}
|
|
break;
|
|
case 1892961121:
|
|
if (this.hasAudio) {
|
|
var6 = 1788744897;
|
|
} else {
|
|
var6 = -2126754425;
|
|
}
|
|
break;
|
|
case 1933863246:
|
|
this.display = new NativeImage(this.frameWidth, this.frameHeight, (boolean)((((1783312687 ^ -1783312687) + ((1783312687 & -1783312687) << 1))) != 0));
|
|
this.texture = new aux(() -> "watch_" + this.serial, this.display);
|
|
Minecraft.getInstance().getTextureManager().register(this.textureId, this.texture);
|
|
var6 = -1864099931;
|
|
break;
|
|
case 2001248760:
|
|
if (!this.hasFrame) {
|
|
var6 = -1098767342;
|
|
} else {
|
|
var6 = -375101689;
|
|
}
|
|
break;
|
|
case 2044556909:
|
|
this.display.copyFrom(var4.image);
|
|
this.texture.upload();
|
|
this.free.offer(var4);
|
|
this.hasFrame = (boolean)(((1)) != 0);
|
|
if (this.status == aoc.LOADING) {
|
|
var6 = 1692696971;
|
|
} else {
|
|
var6 = -1271253763;
|
|
}
|
|
break;
|
|
case 2108152569:
|
|
if (var5.ptsMs > var2 + (-3313457125592816791L ^ 3313457125592816799L) + ((-3313457125592816791L & 3313457125592816799L) << 1)) {
|
|
var6 = 2001248760;
|
|
} else {
|
|
var6 = -960248404;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
public void close() {
|
|
anv var1 = null;
|
|
anv var2 = null;
|
|
SourceDataLine var3 = null;
|
|
Thread var4 = null;
|
|
Thread var5 = null;
|
|
int var6 = 0;
|
|
int var8 = 0;
|
|
int var7 = -1411372672;
|
|
|
|
while (true) {
|
|
switch (var7) {
|
|
case -1779714249:
|
|
var4.interrupt();
|
|
var7 = -1726867405;
|
|
break;
|
|
case -1740562571:
|
|
var2.close();
|
|
var7 = 194648971;
|
|
break;
|
|
case -1726867405:
|
|
if (var5 != null) {
|
|
var7 = -1571841568;
|
|
} else {
|
|
var7 = 578793991;
|
|
}
|
|
break;
|
|
case -1662654531:
|
|
var8 = 1;
|
|
var7 = 1864995576;
|
|
break;
|
|
case -1571841568:
|
|
var5.interrupt();
|
|
var7 = 578793991;
|
|
break;
|
|
case -1411372672:
|
|
default:
|
|
if (this.closed) {
|
|
var7 = 721294398;
|
|
} else {
|
|
var7 = 1491442795;
|
|
}
|
|
break;
|
|
case -996860562:
|
|
var8 = 0;
|
|
var7 = 1864995576;
|
|
break;
|
|
case -263116799:
|
|
var3.stop();
|
|
var3.flush();
|
|
var7 = 859523974;
|
|
break;
|
|
case 194648971:
|
|
var3 = this.line;
|
|
if (var3 != null) {
|
|
var7 = -263116799;
|
|
} else {
|
|
var7 = 859523974;
|
|
}
|
|
break;
|
|
case 578793991:
|
|
if (this.texture != null) {
|
|
var7 = -1662654531;
|
|
} else {
|
|
var7 = -996860562;
|
|
}
|
|
break;
|
|
case 721294398:
|
|
return;
|
|
case 859523974:
|
|
var4 = this.videoThread;
|
|
var5 = this.audioThread;
|
|
if (var4 != null) {
|
|
var7 = -1779714249;
|
|
} else {
|
|
var7 = -1726867405;
|
|
}
|
|
break;
|
|
case 902932460:
|
|
if (var2 != var1) {
|
|
var7 = -1740562571;
|
|
} else {
|
|
var7 = 194648971;
|
|
}
|
|
break;
|
|
case 1366325954:
|
|
var1.close();
|
|
var7 = 1373380486;
|
|
break;
|
|
case 1373380486:
|
|
if (var2 != null) {
|
|
var7 = 902932460;
|
|
} else {
|
|
var7 = 194648971;
|
|
}
|
|
break;
|
|
case 1491442795:
|
|
this.closed = (boolean)(((1)) != 0);
|
|
this.running = (boolean)(((0)) != 0);
|
|
this.generation.incrementAndGet();
|
|
this.wake();
|
|
var1 = this.videoSource;
|
|
var2 = this.audioSource;
|
|
if (var1 != null) {
|
|
var7 = 1366325954;
|
|
} else {
|
|
var7 = 1373380486;
|
|
}
|
|
break;
|
|
case 1864995576:
|
|
var6 = var8;
|
|
this.texture = null;
|
|
this.display = null;
|
|
daemon(() -> this.reap(var4, var5, var3, var6 != 0), "EvoWatchReaper-" + this.serial);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void reap(Thread var1, Thread var2, SourceDataLine var3, boolean var4) {
|
|
int var5 = 0;
|
|
Minecraft var6 = null;
|
|
int var8 = 0;
|
|
int var7 = 1643149100;
|
|
|
|
while (true) {
|
|
switch (var7) {
|
|
case -1591431770:
|
|
if (var1 != null) {
|
|
var7 = -1387704189;
|
|
} else {
|
|
var7 = 170795492;
|
|
}
|
|
break;
|
|
case -1522287563:
|
|
var6 = Minecraft.getInstance();
|
|
var6.execute(() -> {
|
|
Iterator var4x = null;
|
|
Object var5x = null;
|
|
int var6x = -633768204;
|
|
|
|
while (true) {
|
|
switch (var6x) {
|
|
case -1943492598:
|
|
this.slots.clear();
|
|
return;
|
|
case -641230427:
|
|
var6.getTextureManager().release(this.textureId);
|
|
var6x = 1840619191;
|
|
break;
|
|
case -633768204:
|
|
default:
|
|
if (var4) {
|
|
var6x = -641230427;
|
|
} else {
|
|
var6x = 1840619191;
|
|
}
|
|
break;
|
|
case -339008966:
|
|
this.ready.clear();
|
|
this.free.clear();
|
|
var4x = this.slots.iterator();
|
|
var6x = 1263308280;
|
|
break;
|
|
case 194298177:
|
|
var5x = (aob)var4x.next();
|
|
((aob)var5x).image.close();
|
|
var6x = 1263308280;
|
|
break;
|
|
case 578258790:
|
|
return;
|
|
case 1263308280:
|
|
if (var4x.hasNext()) {
|
|
var6x = 194298177;
|
|
} else {
|
|
var6x = -1943492598;
|
|
}
|
|
break;
|
|
case 1840619191:
|
|
if (var5 == 0) {
|
|
var6x = 578258790;
|
|
} else {
|
|
var6x = -339008966;
|
|
}
|
|
}
|
|
}
|
|
});
|
|
return;
|
|
case -1427956397:
|
|
var5 = var8;
|
|
if (var5 == 0) {
|
|
var7 = 1082650333;
|
|
} else {
|
|
var7 = -1522287563;
|
|
}
|
|
break;
|
|
case -1387704189:
|
|
if (!var1.isAlive()) {
|
|
var7 = 170795492;
|
|
} else {
|
|
var7 = 619095419;
|
|
}
|
|
break;
|
|
case 170795492:
|
|
var8 = 1;
|
|
var7 = -1427956397;
|
|
break;
|
|
case 619095419:
|
|
var8 = 0;
|
|
var7 = -1427956397;
|
|
break;
|
|
case 635060958:
|
|
var3.close();
|
|
var7 = -1591431770;
|
|
break;
|
|
case 1082650333:
|
|
id.warn(
|
|
Cif.MEDIA,
|
|
"watch decoder for {} did not stop, frame pool leaked",
|
|
this.videoId
|
|
);
|
|
var7 = -1522287563;
|
|
break;
|
|
case 1643149100:
|
|
default:
|
|
join(var1);
|
|
join(var2);
|
|
if (var3 != null) {
|
|
var7 = 635060958;
|
|
} else {
|
|
var7 = -1591431770;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void runVideo() {
|
|
ant var1 = new ant(this.videoSource);
|
|
|
|
try {
|
|
anz var2 = this.video.progressive() ? anz.progressive(var1) : anz.dash(var1);
|
|
Picture var3 = null;
|
|
Transform var4 = null;
|
|
int var5 = -1;
|
|
int var6 = 1;
|
|
|
|
while (this.running) {
|
|
int var7 = this.generation.get();
|
|
if (var7 != var5) {
|
|
var5 = var7;
|
|
var2.seek(this.seekTargetMs);
|
|
this.videoEnded = (boolean)(((0)) != 0);
|
|
var6 = 1;
|
|
}
|
|
|
|
if (!this.videoEnded && (!this.paused || var6 != 0)) {
|
|
Picture var8 = var2.next();
|
|
if (var8 == null) {
|
|
this.videoEnded = (boolean)(((1)) != 0);
|
|
} else {
|
|
long var9 = var2.ptsMs();
|
|
if ((
|
|
var6 != 0
|
|
|| var9 + (6613228650515278989L ^ -6613228650515278929L) + ((6613228650515278989L & -6613228650515278929L) << 1)
|
|
>= this.positionMs()
|
|
)
|
|
&& (
|
|
var6 == 0
|
|
|| var9 + (9089449731720463528L | -9089449731720463468L) + (9089449731720463528L & -9089449731720463468L) >= this.seekTargetMs
|
|
)) {
|
|
if (var3 == null) {
|
|
var3 = Picture.create(var8.getWidth(), var8.getHeight(), ColorSpace.RGB);
|
|
var4 = ColorUtil.getTransform(var8.getColor(), ColorSpace.RGB);
|
|
this.allocatePool(var8);
|
|
}
|
|
|
|
aob var11 = null;
|
|
|
|
while (this.running && this.generation.get() == var5 && var11 == null) {
|
|
var11 = this.free
|
|
.poll((4247939024060348306L | -4247939024060348286L) + (4247939024060348306L & -4247939024060348286L), TimeUnit.MILLISECONDS);
|
|
}
|
|
|
|
if (var11 != null) {
|
|
var4.transform(var8, var3);
|
|
Rect var12 = var8.getCrop();
|
|
int var13 = var12 == null ? 0: var12.getX();
|
|
int var14 = var12 == null ? 0: var12.getY();
|
|
auy.fill(
|
|
var11.image,
|
|
var3.getPlaneData((505770354 ^ -505770354) + ((505770354 & -505770354) << 1)),
|
|
var8.getWidth(),
|
|
var13,
|
|
var14,
|
|
this.frameWidth,
|
|
this.frameHeight
|
|
);
|
|
var11.ptsMs = var9;
|
|
var11.generation = var5;
|
|
if (!this.ready.offer(var11)) {
|
|
this.free.offer(var11);
|
|
}
|
|
|
|
var6 = 0;
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
this.idle();
|
|
}
|
|
}
|
|
} catch (InterruptedException var19) {
|
|
Thread.currentThread().interrupt();
|
|
} catch (Throwable var20) {
|
|
if (this.running) {
|
|
this.fail(
|
|
"watch video decode failed for {}",
|
|
rootMessage(var20),
|
|
var20
|
|
);
|
|
}
|
|
} finally {
|
|
var1.close();
|
|
}
|
|
}
|
|
|
|
private void allocatePool(Picture var1) {
|
|
int var2 = 0;
|
|
Object var3 = null;
|
|
int var4 = 775671031;
|
|
|
|
while (true) {
|
|
switch (var4) {
|
|
case -1891044429:
|
|
var3 = new aob(new NativeImage(this.frameWidth, this.frameHeight, (boolean)((((-413256955 ^ 413256955) + ((-413256955 & 413256955) << 1))) != 0)));
|
|
this.slots.add((aob)var3);
|
|
this.free.offer((aob)var3);
|
|
var2++;
|
|
var4 = -27662252;
|
|
break;
|
|
case -27662252:
|
|
if (var2 < (83033972 ^ -83033968) + ((83033972 & -83033968) << 1)) {
|
|
var4 = -1891044429;
|
|
} else {
|
|
var4 = 303871564;
|
|
}
|
|
break;
|
|
case 303871564:
|
|
return;
|
|
case 775671031:
|
|
default:
|
|
this.frameWidth = var1.getCroppedWidth();
|
|
this.frameHeight = var1.getCroppedHeight();
|
|
var2 = 0;
|
|
var4 = -27662252;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void runAudio() {
|
|
ant var1 = new ant(this.audioSource);
|
|
SourceDataLine var2 = null;
|
|
|
|
try {
|
|
try {
|
|
ano var3 = this.video.progressive() ? ano.progressive(var1) : ano.dash(var1);
|
|
if (var3 == null) {
|
|
this.runWallClock();
|
|
return;
|
|
}
|
|
|
|
Decoder var4 = new Decoder(var3.decoderConfig());
|
|
SampleBuffer var5 = new SampleBuffer();
|
|
var5.setBigEndian((boolean)((((911190697 ^ -911190697) + ((911190697 & -911190697) << 1))) != 0));
|
|
this.hasAudio = (boolean)(((1)) != 0);
|
|
int var6 = -1;
|
|
int var7 = 1;
|
|
|
|
while (this.running) {
|
|
int var8 = this.generation.get();
|
|
if (var8 != var6) {
|
|
var6 = var8;
|
|
var3.seek(this.seekTargetMs);
|
|
this.audioEnded = (boolean)(((0)) != 0);
|
|
var7 = 1;
|
|
if (var2 != null) {
|
|
var2.flush();
|
|
}
|
|
}
|
|
|
|
if (!this.audioEnded && (!this.paused || var7 != 0)) {
|
|
byte[] var9 = var3.next();
|
|
if (var9 == null) {
|
|
this.audioEnded = (boolean)(((1)) != 0);
|
|
} else {
|
|
long var10 = var3.ptsMs();
|
|
if (var7 == 0
|
|
|| var10 + (-7014539346689104363L | 7014539346689104423L) + (-7014539346689104363L & 7014539346689104423L) >= this.seekTargetMs) {
|
|
try {
|
|
var4.decodeFrame(var9, var5);
|
|
} catch (Exception var20) {
|
|
id.debug(
|
|
Cif.MEDIA,
|
|
"watch audio frame skipped for {}",
|
|
this.videoId
|
|
);
|
|
continue;
|
|
}
|
|
|
|
if (var2 == null) {
|
|
var2 = this.openLine(var5);
|
|
if (var2 == null) {
|
|
this.hasAudio = (boolean)(((0)) != 0);
|
|
this.runWallClock();
|
|
return;
|
|
}
|
|
}
|
|
|
|
if (var7 != 0) {
|
|
this.anchor = new aoa(
|
|
var6,
|
|
var10,
|
|
var2.getLongFramePosition(),
|
|
(5245124628838790411L | -5245124628838790411L) + (5245124628838790411L & -5245124628838790411L),
|
|
(boolean)((((387152273 | -387152272) + (387152273 & -387152272))
|
|
) != 0));
|
|
if (!this.paused) {
|
|
var2.start();
|
|
}
|
|
|
|
var7 = 0;
|
|
}
|
|
|
|
this.applyGain(var5.getData());
|
|
this.write(var2, var5.getData(), var6);
|
|
}
|
|
}
|
|
} else {
|
|
this.idle();
|
|
}
|
|
}
|
|
|
|
return;
|
|
} catch (InterruptedException var21) {
|
|
Thread.currentThread().interrupt();
|
|
} catch (Throwable var22) {
|
|
if (this.running) {
|
|
id.warn(
|
|
Cif.MEDIA,
|
|
"watch audio failed for {}",
|
|
this.videoId,
|
|
var22
|
|
);
|
|
this.hasAudio = (boolean)(((0)) != 0);
|
|
|
|
try {
|
|
this.runWallClock();
|
|
} catch (InterruptedException var19) {
|
|
Thread.currentThread().interrupt();
|
|
}
|
|
|
|
return;
|
|
}
|
|
}
|
|
} finally {
|
|
var1.close();
|
|
}
|
|
}
|
|
|
|
private SourceDataLine openLine(SampleBuffer var1) {
|
|
try {
|
|
this.sampleRate = var1.getSampleRate();
|
|
int var2 = var1.getChannels();
|
|
AudioFormat var3 = new AudioFormat(
|
|
this.sampleRate,
|
|
16,
|
|
var2,
|
|
(boolean)(((1)) != 0),
|
|
(boolean)((((197806775 ^ -197806775) + ((197806775 & -197806775) << 1))
|
|
) != 0));
|
|
SourceDataLine var4 = (SourceDataLine)AudioSystem.getLine(new Info(SourceDataLine.class, var3));
|
|
int var5 = this.sampleRate
|
|
* var2
|
|
* 0;
|
|
var4.open(var3, var5);
|
|
this.line = var4;
|
|
return var4;
|
|
} catch (Exception var6) {
|
|
id.warn(Cif.MEDIA, "watch audio failed for {}", this.videoId, var6);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
private void runWallClock() throws InterruptedException {
|
|
int var1 = 0;
|
|
int var2 = 0;
|
|
int var3 = -1440282229;
|
|
|
|
while (true) {
|
|
switch (var3) {
|
|
case -1629105286:
|
|
this.idle();
|
|
var3 = -144622501;
|
|
break;
|
|
case -1440282229:
|
|
default:
|
|
var1 = -1;
|
|
var3 = -144622501;
|
|
break;
|
|
case -144622501:
|
|
if (this.running) {
|
|
var3 = -78861644;
|
|
} else {
|
|
var3 = 570229110;
|
|
}
|
|
break;
|
|
case -78861644:
|
|
var2 = this.generation.get();
|
|
if (var2 != var1) {
|
|
var3 = 6253493;
|
|
} else {
|
|
var3 = -1629105286;
|
|
}
|
|
break;
|
|
case 6253493:
|
|
var1 = var2;
|
|
this.anchor = new aoa(
|
|
var1,
|
|
this.seekTargetMs,
|
|
(2462414229238202591L | -2462414229238202591L) + (2462414229238202591L & -2462414229238202591L),
|
|
System.nanoTime(),
|
|
(boolean)((((740950868 | -740950868) + (740950868 & -740950868))
|
|
) != 0));
|
|
var3 = -1629105286;
|
|
break;
|
|
case 570229110:
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
private void applyGain(byte[] var1) {
|
|
float var2 = 0.0F;
|
|
int var3 = 0;
|
|
int var4 = 0;
|
|
int var5 = 0;
|
|
int var6 = 1810032689;
|
|
|
|
while (true) {
|
|
switch (var6) {
|
|
case -1592175680:
|
|
return;
|
|
case -1471389680:
|
|
return;
|
|
case -540701304:
|
|
var3 = 0;
|
|
var6 = 1147473160;
|
|
break;
|
|
case 480460036:
|
|
short var7 = (short)(
|
|
var1[var3] & (-179493795 | 179494050) + (-179493795 & 179494050)
|
|
| var1[var3 + 1] << (952552855 ^ -952552847) + ((952552855 & -952552847) << 1)
|
|
);
|
|
var5 = Math.round(var7 * var2);
|
|
var1[var3] = (byte)var5;
|
|
var1[var3 + 1] = (byte)(
|
|
var5 >> (1484816448 | -1484816440) + (1484816448 & -1484816440)
|
|
);
|
|
var3 += 2;
|
|
var6 = 1147473160;
|
|
break;
|
|
case 1147473160:
|
|
if (var3 + (-1698612459 | 1698612460) + (-1698612459 & 1698612460) < var1.length) {
|
|
var6 = 480460036;
|
|
} else {
|
|
var6 = -1592175680;
|
|
}
|
|
break;
|
|
case 1810032689:
|
|
default:
|
|
var2 = this.gain;
|
|
if (var2 >= 1.0F) {
|
|
var6 = -1471389680;
|
|
} else {
|
|
var6 = -540701304;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void write(SourceDataLine var1, byte[] var2, int var3) throws InterruptedException {
|
|
int var4 = 0;
|
|
int var5 = 0;
|
|
int var6 = 0;
|
|
int var7 = 487937445;
|
|
|
|
while (true) {
|
|
switch (var7) {
|
|
case -1264169874:
|
|
var6 = Math.min(var5 - var5 % (2), var2.length - var4);
|
|
if (var6 <= 0) {
|
|
var7 = 920317829;
|
|
} else {
|
|
var7 = 1549668451;
|
|
}
|
|
break;
|
|
case -1072432159:
|
|
if (this.running) {
|
|
var7 = -843267287;
|
|
} else {
|
|
var7 = -388951056;
|
|
}
|
|
break;
|
|
case -843267287:
|
|
if (this.generation.get() == var3) {
|
|
var7 = -372130276;
|
|
} else {
|
|
var7 = -388951056;
|
|
}
|
|
break;
|
|
case -388951056:
|
|
return;
|
|
case -372130276:
|
|
if (this.paused) {
|
|
var7 = 1553743448;
|
|
} else {
|
|
var7 = 1855328423;
|
|
}
|
|
break;
|
|
case 487937445:
|
|
default:
|
|
var4 = 0;
|
|
var7 = 670406460;
|
|
break;
|
|
case 670406460:
|
|
if (var4 < var2.length) {
|
|
var7 = -1072432159;
|
|
} else {
|
|
var7 = -388951056;
|
|
}
|
|
break;
|
|
case 920317829:
|
|
this.idle();
|
|
var7 = 670406460;
|
|
break;
|
|
case 1516046836:
|
|
this.idle();
|
|
var7 = 670406460;
|
|
break;
|
|
case 1549668451:
|
|
var4 += var1.write(var2, var4, var6);
|
|
var7 = 670406460;
|
|
break;
|
|
case 1553743448:
|
|
this.idle();
|
|
var7 = 670406460;
|
|
break;
|
|
case 1855328423:
|
|
var5 = var1.available();
|
|
if (var5 <= 0) {
|
|
var7 = 1516046836;
|
|
} else {
|
|
var7 = -1264169874;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
private void idle() throws InterruptedException {
|
|
synchronized (this.signal) {
|
|
this.signal.wait((-2153559731047113104L | 2153559731047113119L) + (-2153559731047113104L & 2153559731047113119L));
|
|
}
|
|
}
|
|
|
|
private void wake() {
|
|
synchronized (this.signal) {
|
|
this.signal.notifyAll();
|
|
}
|
|
}
|
|
|
|
private void fail(String var1, String var2, Throwable var3) {
|
|
this.failure = var2;
|
|
this.status = aoc.FAILED;
|
|
id.warn(Cif.MEDIA, var1, this.videoId, var3);
|
|
aok.invalidate(this.videoId);
|
|
}
|
|
|
|
private static String rootMessage(Throwable var0) {
|
|
Throwable var1 = null;
|
|
String var2 = null;
|
|
String var4 = null;
|
|
int var3 = 587458511;
|
|
|
|
while (true) {
|
|
switch (var3) {
|
|
case -2038972880:
|
|
var4 = var2;
|
|
var3 = 1462012311;
|
|
break;
|
|
case -1915563698:
|
|
var2 = var1.getMessage();
|
|
if (var2 != null) {
|
|
var3 = -839323581;
|
|
} else {
|
|
var3 = 2040846282;
|
|
}
|
|
break;
|
|
case -875007707:
|
|
var1 = var1.getCause();
|
|
var3 = -712152883;
|
|
break;
|
|
case -839323581:
|
|
if (var2.isBlank()) {
|
|
var3 = 2040846282;
|
|
} else {
|
|
var3 = -2038972880;
|
|
}
|
|
break;
|
|
case -826511951:
|
|
if (var1.getCause() != var1) {
|
|
var3 = -875007707;
|
|
} else {
|
|
var3 = -1915563698;
|
|
}
|
|
break;
|
|
case -712152883:
|
|
if (var1.getCause() != null) {
|
|
var3 = -826511951;
|
|
} else {
|
|
var3 = -1915563698;
|
|
}
|
|
break;
|
|
case 587458511:
|
|
default:
|
|
var1 = var0;
|
|
var3 = -712152883;
|
|
break;
|
|
case 1462012311:
|
|
return var4;
|
|
case 2040846282:
|
|
var4 = var1.getClass().getSimpleName();
|
|
var3 = 1462012311;
|
|
}
|
|
}
|
|
}
|
|
|
|
private static void join(Thread var0) {
|
|
if (var0 != null) {
|
|
try {
|
|
var0.join((-8205084524883839502L | 8205084524883841502L) + (-8205084524883839502L & 8205084524883841502L));
|
|
} catch (InterruptedException var2) {
|
|
Thread.currentThread().interrupt();
|
|
}
|
|
}
|
|
}
|
|
|
|
private static Thread daemon(Runnable var0, String var1) {
|
|
Thread var2 = new Thread(var0, var1);
|
|
var2.setDaemon((boolean)((((-1589261313 | 1589261314) + (-1589261313 & 1589261314))) != 0));
|
|
var2.start();
|
|
return var2;
|
|
}
|
|
}
|