A method of decoding a video signal, the method comprising: retrieving an encoded bitstream (102, 103) ordered hierarchically into chunks, wherein the bitstream is grouped into planes and planes are divided into levels, and within each plane each level is grouped into layers and each layer comprises a set of chunks for that layer, wherein each level corresponds to a level of spatial enhancement and each layer comprises sets of coefficients of the same type; decoding the encoded bitstream (102, 103) to generate residual data for an enhancement stream, and, reconstructing an original frame of the video signal from the residual data and a reference reconstructed frame, wherein the step of decoding the encoded bitstream (102, 103) comprises, for each chunk: retrieving a flag from configuration metadata accompanying the encoded bitstream (102, 103) indicating if a Huffman coding operation is to be skipped in decoding the chunk; selectively applying the Huffman coding operation based on the flag to generate a set of Huffman decoded bytes, wherein each byte corresponds to a count of consecutive zero values of the residual data, least significant bits of a non-zero data value of the residual data or most significant bits of a non-zero data value of the residual data; applying a run-length coding operation on the set of Huffman decoded bytes or a run-length encoded bytestream of the encoded bitstream, based on the flag, to generate the residual data for the chunk, wherein the run-length coding operation comprises: identifying a set of bytes representing least significant bits of non-zero data values of the residual data, a set of bytes representing most significant bits of non-zero data values of the residual data, and a set of bytes representing counts of consecutive zero values of the residual data; parsing the bytes to derive the non-zero data values of the residual data and the counts of consecutive zero values; and, generating the residual data from the non-zero data values and the counts of consecutive zero values. retrieving an encoded bitstream (102, 103) ordered hierarchically into chunks, wherein the bitstream is grouped into planes and planes are divided into levels, and within each plane each level is grouped into layers and each layer comprises a set of chunks for that layer, wherein each level corresponds to a level of spatial enhancement and each layer comprises sets of coefficients of the same type; decoding the encoded bitstream (102, 103) to generate residual data for an enhancement stream, and, reconstructing an original frame of the video signal from the residual data and a reference reconstructed frame, wherein the step of decoding the encoded bitstream (102, 103) comprises, for each chunk: retrieving a flag from configuration metadata accompanying the encoded bitstream (102, 103) indicating if a Huffman coding operation is to be skipped in decoding the chunk; selectively applying the Huffman coding operation based on the flag to generate a set of Huffman decoded bytes, wherein each byte corresponds to a count of consecutive zero values of the residual data, least significant bits of a non-zero data value of the residual data or most significant bits of a non-zero data value of the residual data; applying a run-length coding operation on the set of Huffman decoded bytes or a run-length encoded bytestream of the encoded bitstream, based on the flag, to generate the residual data for the chunk, wherein the run-length coding operation comprises: identifying a set of bytes representing least significant bits of non-zero data values of the residual data, a set of bytes representing most significant bits of non-zero data values of the residual data, and a set of bytes representing counts of consecutive zero values of the residual data; parsing the bytes to derive the non-zero data values of the residual data and the counts of consecutive zero values; and, retrieving a flag from configuration metadata accompanying the encoded bitstream (102, 103) indicating if a Huffman coding operation is to be skipped in decoding the chunk; selectively applying the Huffman coding operation based on the flag to generate a set of Huffman decoded bytes, wherein each byte corresponds to a count of consecutive zero values of the residual data, least significant bits of a non-zero data value of the residual data or most significant bits of a non-zero data value of the residual data; applying a run-length coding operation on the set of Huffman decoded bytes or a run-length encoded bytestream of the encoded bitstream, based on the flag, to generate the residual data for the chunk, wherein the run-length coding operation comprises: identifying a set of bytes representing least significant bits of non-zero data values of the residual data, a set of bytes representing most significant bits of non-zero data values of the residual data, and a set of bytes representing counts of consecutive zero values of the residual data; parsing the bytes to derive the non-zero data values of the residual data and the counts of consecutive zero values; and, identifying a set of bytes representing least significant bits of non-zero data values of the residual data, a set of bytes representing most significant bits of non-zero data values of the residual data, and a set of bytes representing counts of consecutive zero values of the residual data; parsing the bytes to derive the non-zero data values of the residual data and the counts of consecutive zero values; and, generating the residual data from the non-zero data values and the counts of consecutive zero values.