1. A method of encoding input data to generate corresponding encoded output data in a codec, the method comprising the steps of: (a) sub-dividing the input data into a plurality of blocks or packets, the blocks or packets having a size depending upon a nature of chair content, and the blocks or packets being of one or more sizes; (b) applying a plurality of different types of transformations to content of the blocks or packets to generate corresponding transformed data; (c) checking a quality of representation of the transformed data of the blocks or packets compared to the content of the blocks or packets prior to application of the plurality of transformations to determine whether or not the quality of representation of the transformed data satisfies one or more quality criteria; (d) in an event that the quality of representation of the transformed data of the one or more blocks or packets does not satisfy the one or more quality criteria, sub-dividing and/or combining the one or more blocks or packets further and repeating step (b); and (e) in an event that the quality of representation of the transformed data of the one or more blocks or packets satisfies the one or more quality criteria, outputting the transformed data to provide the encoded output data representative of the input data to be encoded.