A method for encoding a set of data, comprising: receiving a set of data to be encoded wherein the set of data comprises one or more frames of video data; characterized by: pre-processing the set of data wherein pre-processing the set of data is based on a state of a target decoder and a complexity of the set of data; and encoding the pre-processed set of data based at least in part upon the state of the target decoder to which the encoded set of data is to be provided, wherein encoding the pre-processed set of data based at least in part upon the state of the target decoder comprises: determining a target decoding complexity for the encoded set of data, identifying a set of encoding tools to encode the pre-processed set of data, identifying decoding complexity costs of each of the identified encoding tools determining whether, based at least in part on the identified decoding complexity cost of each encoding tool in the set, a sum of the decoding complexity costs of the set of encoding tools exceeds the target decoding complexity, and if the sum of the decoding complexity costs of the set of encoding tools does not exceed the target decoding complexity, encoding the pre-processed set of data according to the identified set of encoding tools, otherwise, revising the set of encoding tools to decrease the sum of the decoding complexity costs below the target decoding complexity. receiving a set of data to be encoded wherein the set of data comprises one or more frames of video data; characterized by: pre-processing the set of data wherein pre-processing the set of data is based on a state of a target decoder and a complexity of the set of data; and encoding the pre-processed set of data based at least in part upon the state of the target decoder to which the encoded set of data is to be provided, wherein encoding the pre-processed set of data based at least in part upon the state of the target decoder comprises: determining a target decoding complexity for the encoded set of data, identifying a set of encoding tools to encode the pre-processed set of data, identifying decoding complexity costs of each of the identified encoding tools determining whether, based at least in part on the identified decoding complexity cost of each encoding tool in the set, a sum of the decoding complexity costs of the set of encoding tools exceeds the target decoding complexity, and if the sum of the decoding complexity costs of the set of encoding tools does not exceed the target decoding complexity, encoding the pre-processed set of data according to the identified set of encoding tools, otherwise, revising the set of encoding tools to decrease the sum of the decoding complexity costs below the target decoding complexity. pre-processing the set of data wherein pre-processing the set of data is based on a state of a target decoder and a complexity of the set of data; and encoding the pre-processed set of data based at least in part upon the state of the target decoder to which the encoded set of data is to be provided, wherein encoding the pre-processed set of data based at least in part upon the state of the target decoder comprises: determining a target decoding complexity for the encoded set of data, identifying a set of encoding tools to encode the pre-processed set of data, identifying decoding complexity costs of each of the identified encoding tools determining whether, based at least in part on the identified decoding complexity cost of each encoding tool in the set, a sum of the decoding complexity costs of the set of encoding tools exceeds the target decoding complexity, and if the sum of the decoding complexity costs of the set of encoding tools does not exceed the target decoding complexity, encoding the pre-processed set of data according to the identified set of encoding tools, otherwise, revising the set of encoding tools to decrease the sum of the decoding complexity costs below the target decoding complexity. determining a target decoding complexity for the encoded set of data, identifying a set of encoding tools to encode the pre-processed set of data, identifying decoding complexity costs of each of the identified encoding tools determining whether, based at least in part on the identified decoding complexity cost of each encoding tool in the set, a sum of the decoding complexity costs of the set of encoding tools exceeds the target decoding complexity, and if the sum of the decoding complexity costs of the set of encoding tools does not exceed the target decoding complexity, encoding the pre-processed set of data according to the identified set of encoding tools, otherwise, revising the set of encoding tools to decrease the sum of the decoding complexity costs below the target decoding complexity.