/*************************************** * ViPER-MPEG * * The Video Processing * * Evaluation Resource * * MPEG-1 Decoder * * Distributed under the LGPL license * * Terms available at gnu.org. * * * * Copyright University of Maryland, * * College Park. * ***************************************/ package edu.umd.cfar.lamp.mpeg1.video; import java.io.*; import edu.columbia.ee.flavor.*; import edu.umd.cfar.lamp.mpeg1.*; class MacroblockType_PFrame implements Parsable { private MacroblockType value = new MacroblockType(); public void parse(Bitstream bitstream) throws IOException { boolean macroblock_quant, macroblock_motion_forward, macroblock_motion_backward, macroblock_pattern, macroblock_intra; switch (bitstream.nextbits(1)) { case 1: bitstream.skipbits(1); macroblock_quant = false; macroblock_motion_forward = true; macroblock_motion_backward = false; macroblock_pattern = true; macroblock_intra = false; break; default: switch (bitstream.nextbits(2)) { case 1: bitstream.skipbits(2); macroblock_quant = false; macroblock_motion_forward = false; macroblock_motion_backward = false; macroblock_pattern = true; macroblock_intra = false; break; default: switch (bitstream.nextbits(3)) { case 1: bitstream.skipbits(3); macroblock_quant = false; macroblock_motion_forward = true; macroblock_motion_backward = false; macroblock_pattern = false; macroblock_intra = false; break; default: switch (bitstream.nextbits(5)) { case 3: bitstream.skipbits(5); macroblock_quant = false; macroblock_motion_forward = false; macroblock_motion_backward = false; macroblock_pattern = false; macroblock_intra = true; break; case 2: bitstream.skipbits(5); macroblock_quant = true; macroblock_motion_forward = true; macroblock_motion_backward = false; macroblock_pattern = true; macroblock_intra = false; break; case 1: bitstream.skipbits(5); macroblock_quant = true; macroblock_motion_forward = false; macroblock_motion_backward = false; macroblock_pattern = true; macroblock_intra = false; break; default: switch (bitstream.nextbits(6)) { case 1: bitstream.skipbits(6); macroblock_quant = true; macroblock_motion_forward = false; macroblock_motion_backward = false; macroblock_pattern = false; macroblock_intra = true; break; default: throw new ParsingException( "VLC decode for MacroblockType_PFrame failed."); } } } } } value.setValues(macroblock_quant, macroblock_motion_forward, macroblock_motion_backward, macroblock_pattern, macroblock_intra); } public MacroblockType getValue() { return value; } }