/*
* 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);
}