Subversion Repositories shark

Rev

Blame | Last modification | View Log | RSS feed

/*
 * Project: S.Ha.R.K.
 *
 * Coordinators:
 *   Giorgio Buttazzo    <giorgio@sssup.it>
 *   Paolo Gai           <pj@gandalf.sssup.it>
 *
 * Authors     :
 *   Paolo Gai           <pj@gandalf.sssup.it>
 *   (see the web pages for full authors list)
 *
 * ReTiS Lab (Scuola Superiore S.Anna - Pisa - Italy)
 *
 * http://www.sssup.it
 * http://retis.sssup.it
 * http://shark.sssup.it
 */


/*
 * Copyright (C) 1999 Luca Abeni and Massimiliano Giorgi
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 */


/*
 * CVS :        $Id: gvideo.c,v 1.1.1.1 2002-09-02 09:37:45 pj Exp $
 *
 * File:        $File$
 * Revision:    $Revision: 1.1.1.1 $
 * Last update: $Date: 2002-09-02 09:37:45 $
 */


//#include "config.h"

#include <kernel/func.h>
#include <kernel/model.h>
#include <kernel/const.h>

#include <drivers/glib.h>

#include <stdlib.h>

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>

#include "config.h"
#include "global.h"

#define COLORFG rgb16(255,255,255)
#define COLORBG rgb16(0,0,0)

#define SP rgb16(0,128,0)
#define FG rgb16(255,255,255)
#define BG rgb16(0,0,0)

/* border size (pixels) */
#define BO 4


//#define NOGRX

/*
 *
 */



void draw_frame(int x, int y, int dx, int dy)
{
#ifndef NOGRX
  grx_box(x-1-BO,y-1-BO,x+dx+BO,y+dy+BO,SP);
  grx_rect(x-1-BO,y-1-BO,x+dx+BO,y+dy+BO,FG);
  grx_box(x,y,x+dx-1,y+dy-1,BG);
  grx_rect(x-1,y-1,x+dx,y+dy,FG);
#endif
}

static TASK play(void *arg)
{
  int x1,y1,x2,y2;
  int moreframes;
  struct framebuf_struct *fbuf;
 
  x1=1;
  y1=1;
  x2=x1+Coded_Picture_Width-1;
  y2=y1+Coded_Picture_Height-1;
 
  moreframes=1;
  task_nopreempt();

  while (moreframes) {
    fbuf = remove_frame();
#ifndef NOGRX
    //    grxlock();
//  grx_rect(10,10,10+5*fbuf->n,10+5*fbuf->n,FG);
    grx_putimage(x1, y1, x2, y2, fbuf->f);
    //    grxunlock();
#else
    cprintf("(%d %d)\n",fbuf->n, fbuf->f);
#endif
    give_back_framebuf(fbuf);
    task_endcycle();
  }
 
  return NULL;
}

void gvideo_init(void)
{
  SOFT_TASK_MODEL model;
  PID             pid;
  int             period,wcet;

#ifndef NOGRX
  grx_init();
  grx_setmode(grx_getmode(800, 600, 16));
#endif

  //  draw_frame(0, 0, CodedImageWidth,CodedImageHeight);

  srand(7);

  period=1000000/20;
  wcet=20000;
 
  soft_task_default_model(model);        
  soft_task_def_met(model,wcet);
  soft_task_def_wcet(model,wcet);
  soft_task_def_period(model,period);
  soft_task_def_periodic(model);
  soft_task_def_ctrl_jet(model);
 
  pid=task_create("Video",play,&model,NULL);
  if (pid!=-1) task_activate(pid);
}