/* * Copyright 2005 by the Massachusetts Institute of Technology. * * Permission to use, copy, modify, and distribute this * software and its documentation for any purpose and without * fee is hereby granted, provided that the above copyright * notice appear in all copies and that both that copyright * notice and this permission notice appear in supporting * documentation, and that the name of M.I.T. not be used in * advertising or publicity pertaining to distribution of the * software without specific, written prior permission. * M.I.T. makes no representations about the suitability of * this software for any purpose. It is provided "as is" * without express or implied warranty. */ /** * @description * This file contains functions that allow one to decode MPEG-2 compliant video. * The code is based on the MPEG-2 specification (ISO/IEC 13818-2). The MPEG-2 decoding * is a work in progress, although it works within a limited test range. Throughout the * source code, citations are made in cases where an understanding of the code would be * helped by looking at an outside source. The format I have chosen is * (cite NUM#, LOOKUP_INFO). NUM=1 refers to ISO/IEC: 13818-2, and NUM=2 refers to the reference * MPEG implementation written in C, available at [www.mpeg.org]. * * @author Matthew Drake * @file DescrambleAndMotionCompensate.str * @version 1.0 */ /** * @internal */ int->int pipeline DescrambleAndMotionCompensate(int width, int height, int vertical_upsample_factor, int horizontal_upsample_factor, portal UpdatePortal_picture_type, int temp, int the_chroma_format, portal UpdatePortal_picture_type3) { add int->int splitjoin { split roundrobin(64, 8, 1, 1, 1); add Identity; add MotionVectorChannelDownscale(horizontal_upsample_factor, vertical_upsample_factor); add Identity; add Identity; add Identity; join roundrobin(64, 8, 1, 1, 1); } add MotionPrediction_wrapper(width/horizontal_upsample_factor, height/vertical_upsample_factor, UpdatePortal_picture_type, UpdatePortal_picture_type3); } int->int splitjoin MotionVectorChannelDownscale(int horizontal_upsample_factor, int vertical_upsample_factor) { split roundrobin(1); add DivideBy(horizontal_upsample_factor); add DivideBy(vertical_upsample_factor); join roundrobin(1); }