With the recent availability of high-performance embedded media processors, PC-centric designs are giving way to embedded solutions in many application areas. This means that software engineers need to port media-based algorithms from a prototype system where memory is an “unlimited” resource (such as a PC or a Workstation) to an embedded system where resource management is essential to meet minimum performance requirements. These engineers strive to achieve the highest performance for a given application without increasing the complexity of the programming model to which they’re accustomed. Given this situation, what is needed is a set of programming “frameworks” that guide them through key challenges of multimedia processing—for instance, organizing input and output data buffer flows, partitioning memory intelligently, using semaphores to control data movement, and considering the use of dual-core processors for improved system structure and power efficiency.