Main Page | Namespace List | Compound List | File List | Compound Members | File Members

videomux4_env.cc

Go to the documentation of this file.
00001 #include <stdio.h>
00002 #include <assert.h>
00003 #include "videomux4_env.h"
00004 
00005 VideoMux4Env::VideoMux4Env
00006 (
00007         const Id&                                     n,
00008         In<videomux_args_t>&    muxArguments,   
00009         In<pT_header>&                    seqInfoF,
00010         Out<imagePosition>&     YimgPosF0,
00011         Out<imagePosition>&     UVimgPosF0,
00012         Out<imagePosition>&     YimgPosF1,
00013         Out<imagePosition>&     UVimgPosF1,
00014         Out<imagePosition>&     YimgPosF2,
00015         Out<imagePosition>&     UVimgPosF2,
00016         Out<imagePosition>&     YimgPosF3,
00017         Out<imagePosition>&     UVimgPosF3      
00018 )
00019 :       // member initialisation
00020         // process network
00021         Process(n),
00022         // ports
00023   muxArgumentsP(id("muxArgumentsP"),muxArguments),
00024   seqInfoP(id("seqInfoP"),seqInfoF),
00025         YimgPosP0(id("YimgPosP0"),YimgPosF0),   
00026         UVimgPosP0(id("UVimgPosP0"),UVimgPosF0),        
00027         YimgPosP1(id("YimgPosP1"),YimgPosF1),   
00028         UVimgPosP1(id("UVimgPosP1"),UVimgPosF1),
00029         YimgPosP2(id("YimgPosP2"),YimgPosF2),   
00030         UVimgPosP2(id("UVimgPosP2"),UVimgPosF2),        
00031         YimgPosP3(id("YimgPosP3"),YimgPosF3),   
00032         UVimgPosP3(id("UVimgPosP3"),UVimgPosF3)
00033 {
00034 }
00035 
00036 void VideoMux4Env::main()
00037 {
00038         while(true)
00039         {
00040                 const int N = 4;
00041 
00042     pT_header               seqInfo;
00043     pT_color                colorInfo;
00044                 int                           nrImages;
00045                 int                           interlaceFactor;
00046                 videomux_args_t arguments;
00047 
00048                 imagePosition   YimgPos[N];
00049                 imagePosition   UVimgPos[N];
00050 
00051                 read(muxArgumentsP, arguments);
00052     assert(arguments.NSTRM == N);
00053 
00054                 #ifdef VERBOSE
00055                         printf("%s:\n",fullName());
00056                 #endif
00057         
00058                 for(int i=0; i<N; i++)
00059                 {
00060                         YimgPos[i].x = arguments.hpos[i];
00061                         YimgPos[i].y = arguments.vpos[i];
00062                         YimgPos[i].z = arguments.depth[i];
00063                 
00064                         #ifdef VERBOSE
00065                                 printf("    Stream %d position=(%d,%d), depth=%d\n",
00066                                                 i, YimgPos[i].x, YimgPos[i].y, YimgPos[i].z);
00067                         #endif
00068                 }
00069                 #ifdef VERBOSE
00070                         printf("\n");
00071                 #endif
00072         
00073                 read(seqInfoP, seqInfo);
00074                 if (p_is_interlaced(&seqInfo))
00075                         interlaceFactor = 2;
00076                 else
00077                         interlaceFactor = 1;
00078                 colorInfo = p_get_color_format(&seqInfo);
00079                 
00080                 nrImages = interlaceFactor * p_get_num_frames(&seqInfo);
00081                 for (int i=0; i<N; i++)
00082                 {
00083                         YimgPos[i].y = YimgPos[i].y / interlaceFactor;
00084         
00085                         if ((colorInfo == P_COLOR_420) || (colorInfo == P_COLOR_420_PL))
00086                         {
00087                                 UVimgPos[i].x = YimgPos[i].x / 2;
00088                                 UVimgPos[i].y = YimgPos[i].y / 2;
00089                                 UVimgPos[i].z = YimgPos[i].z;
00090                         }
00091                         else if ((colorInfo == P_COLOR_422) || (colorInfo == P_COLOR_422_PL))
00092                         {
00093                                 UVimgPos[i].x = YimgPos[i].x / 2;
00094                                 UVimgPos[i].y = YimgPos[i].y;
00095                                 UVimgPos[i].z = YimgPos[i].z;
00096                         } else
00097                         {
00098                                 UVimgPos[i].x = YimgPos[i].x;
00099                                 UVimgPos[i].y = YimgPos[i].y;
00100                                 UVimgPos[i].z = YimgPos[i].z;
00101                         }
00102                 }
00103         
00104     for (int i=0; i<nrImages; i++)
00105                 {
00106                         write(YimgPosP0, YimgPos[0]);
00107                         write(UVimgPosP0, UVimgPos[0]);
00108                         write(YimgPosP1, YimgPos[1]);
00109                         write(UVimgPosP1, UVimgPos[1]);
00110                         write(YimgPosP2, YimgPos[2]);
00111                         write(UVimgPosP2, UVimgPos[2]);
00112                         write(YimgPosP3, YimgPos[3]);
00113                         write(UVimgPosP3, UVimgPos[3]);
00114                 }
00115         }
00116 }

Generated on Wed Feb 15 14:52:44 2006 for videomux by doxygen 1.3.2