Abstract: An encoder includes data processing hardware operable to: process input data into a plurality of blocks/packets; apply a plurality of transformations to content of the blocks/packets to generate corresponding transformed data; check a quality of representation of the transformed data prior to application of the transformations to determine whether or not the quality of representation of the transformed data satisfies quality criteria; if the quality of representation does not satisfy the quality criteria, to divide and/or combine the one or more individual blocks or packets further and repeating the transformation step; and if the quality of representation of the transformed data satisfies the one or more quality criteria, to select coding methods and encode data representative of the input data to be encoded to provide encoded output data; and communicate in the encoded data information describing the plurality of transformations or combinations of transformations employed when coding the blocks/packets.