mirror of
https://github.com/Eaglercraft-Archive/Eaglercraftx-1.8.8-src.git
synced 2025-06-28 10:58:15 -05:00
Update #44 - WebAssembly GC support, fix more WebRTC bugs
This commit is contained in:
126
sources/wasm-gc-teavm/java/com/jcraft/jorbis/Block.java
Normal file
126
sources/wasm-gc-teavm/java/com/jcraft/jorbis/Block.java
Normal file
@ -0,0 +1,126 @@
|
||||
/* -*-mode:java; c-basic-offset:2; indent-tabs-mode:nil -*- */
|
||||
/* JOrbis
|
||||
* Copyright (C) 2000 ymnk, JCraft,Inc.
|
||||
*
|
||||
* Written by: 2000 ymnk<ymnk@jcraft.com>
|
||||
*
|
||||
* Many thanks to
|
||||
* Monty <monty@xiph.org> and
|
||||
* The XIPHOPHORUS Company http://www.xiph.org/ .
|
||||
* JOrbis has been based on their awesome works, Vorbis codec.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Library General Public License
|
||||
* as published by the Free Software Foundation; either version 2 of
|
||||
* the License, or (at your option) any later version.
|
||||
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Library General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Library General Public
|
||||
* License along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
package com.jcraft.jorbis;
|
||||
|
||||
import com.jcraft.jogg.*;
|
||||
|
||||
public class Block {
|
||||
/// necessary stream state for linking to the framing abstraction
|
||||
float[][] pcm = new float[0][]; // this is a pointer into local storage
|
||||
Buffer opb = new Buffer();
|
||||
|
||||
int lW;
|
||||
int W;
|
||||
int nW;
|
||||
int pcmend;
|
||||
int mode;
|
||||
|
||||
int eofflag;
|
||||
long granulepos;
|
||||
long sequence;
|
||||
DspState vd; // For read-only access of configuration
|
||||
|
||||
// bitmetrics for the frame
|
||||
int glue_bits;
|
||||
int time_bits;
|
||||
int floor_bits;
|
||||
int res_bits;
|
||||
|
||||
public Block(DspState vd) {
|
||||
this.vd = vd;
|
||||
if (vd.analysisp != 0) {
|
||||
opb.writeinit();
|
||||
}
|
||||
}
|
||||
|
||||
public void init(DspState vd) {
|
||||
this.vd = vd;
|
||||
}
|
||||
|
||||
public int clear() {
|
||||
if (vd != null) {
|
||||
if (vd.analysisp != 0) {
|
||||
opb.writeclear();
|
||||
}
|
||||
}
|
||||
return (0);
|
||||
}
|
||||
|
||||
public int synthesis(Packet op) {
|
||||
Info vi = vd.vi;
|
||||
|
||||
// first things first. Make sure decode is ready
|
||||
opb.readinit(op.packet_base, op.packet, op.bytes);
|
||||
|
||||
// Check the packet type
|
||||
if (opb.read(1) != 0) {
|
||||
// Oops. This is not an audio data packet
|
||||
return (-1);
|
||||
}
|
||||
|
||||
// read our mode and pre/post windowsize
|
||||
int _mode = opb.read(vd.modebits);
|
||||
if (_mode == -1)
|
||||
return (-1);
|
||||
|
||||
mode = _mode;
|
||||
W = vi.mode_param[mode].blockflag;
|
||||
if (W != 0) {
|
||||
lW = opb.read(1);
|
||||
nW = opb.read(1);
|
||||
if (nW == -1)
|
||||
return (-1);
|
||||
} else {
|
||||
lW = 0;
|
||||
nW = 0;
|
||||
}
|
||||
|
||||
// more setup
|
||||
granulepos = op.granulepos;
|
||||
sequence = op.packetno - 3; // first block is third packet
|
||||
eofflag = op.e_o_s;
|
||||
|
||||
// alloc pcm passback storage
|
||||
pcmend = vi.blocksizes[W];
|
||||
if (pcm.length < vi.channels) {
|
||||
pcm = new float[vi.channels][];
|
||||
}
|
||||
for (int i = 0; i < vi.channels; i++) {
|
||||
if (pcm[i] == null || pcm[i].length < pcmend) {
|
||||
pcm[i] = new float[pcmend];
|
||||
} else {
|
||||
for (int j = 0; j < pcmend; j++) {
|
||||
pcm[i][j] = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// unpack_header enforces range checking
|
||||
int type = vi.map_type[vi.mode_param[mode].mapping];
|
||||
return (FuncMapping.mapping_P[type].inverse(this, vd.mode[mode]));
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user