OSDN Git Service

add device driver for yccrgbs. change dmjpeg using IPcore and device driver
authorKenichi Kurimoto <kurimoto12@users.sourceforge.jp>
Sun, 9 Jan 2011 04:05:19 +0000 (13:05 +0900)
committerKenichi Kurimoto <kurimoto12@users.sourceforge.jp>
Sun, 9 Jan 2011 04:05:19 +0000 (13:05 +0900)
14 files changed:
snapgear-2.6-p42/linux-2.6.21.1/drivers/Kconfig
snapgear-2.6-p42/linux-2.6.21.1/drivers/Makefile
snapgear-2.6-p42/linux-2.6.21.1/drivers/kmjpeg/Kconfig [new file with mode: 0644]
snapgear-2.6-p42/linux-2.6.21.1/drivers/kmjpeg/Makefile [new file with mode: 0644]
snapgear-2.6-p42/linux-2.6.21.1/drivers/kmjpeg/kmjpeg.c [new file with mode: 0644]
snapgear-2.6-p42/linux-2.6.21.1/drivers/kmjpeg/kmjpeg.c~ [new file with mode: 0644]
snapgear-2.6-p42/linux-2.6.21.1/drivers/kmjpeg/kmjpeg.h [new file with mode: 0644]
snapgear-2.6-p42/linux-2.6.21.1/drivers/kmjpeg/kmjpeg.h~ [new file with mode: 0644]
snapgear-2.6-p42/linux-2.6.21.1/drivers/kmjpeg/kuri_hello.c [new file with mode: 0644]
snapgear-2.6-p42/user/jpeg-6b/dmjpeg [deleted file]
snapgear-2.6-p42/user/jpeg-6b/dmjpeg.c
snapgear-2.6-p42/user/jpeg-6b/jdcolor.c
snapgear-2.6-p42/user/jpeg-6b/jpeglib.h
snapgear-2.6-p42/user/jpeg-6b/kmjpeg.h [new symlink]

index 050323f..57b6a43 100644 (file)
@@ -84,4 +84,7 @@ source "drivers/auxdisplay/Kconfig"
 
 source "drivers/kvm/Kconfig"
 
+#add for LEON-MJPEG prj.
+source "drivers/kmjpeg/Kconfig"
+
 endmenu
index db4b2f8..3e195f1 100644 (file)
@@ -82,3 +82,4 @@ obj-$(CONFIG_GENERIC_TIME)    += clocksource/
 obj-$(CONFIG_DMA_ENGINE)       += dma/
 obj-$(CONFIG_HID)              += hid/
 obj-$(CONFIG_PPC_PS3)          += ps3/
+obj-$(CONFIG_KMJPEG)           += kmjpeg/
diff --git a/snapgear-2.6-p42/linux-2.6.21.1/drivers/kmjpeg/Kconfig b/snapgear-2.6-p42/linux-2.6.21.1/drivers/kmjpeg/Kconfig
new file mode 100644 (file)
index 0000000..f800630
--- /dev/null
@@ -0,0 +1,22 @@
+#
+# Kuri Mjpeg configuration
+#
+
+menu "KURI mjpeg  support"
+
+config KURI_HELLO
+       bool "kuri_hello trial driver"
+       ---help---
+         For the driver compiling trial
+
+comment "Kuri Hello sample"
+
+config KMJPEG
+       bool "Push data to mjpeg IP"
+       ---help---
+         push data to original mjpeg IP block
+
+comment "Kuri Mjpeg"
+
+
+endmenu
diff --git a/snapgear-2.6-p42/linux-2.6.21.1/drivers/kmjpeg/Makefile b/snapgear-2.6-p42/linux-2.6.21.1/drivers/kmjpeg/Makefile
new file mode 100644 (file)
index 0000000..8a8d03a
--- /dev/null
@@ -0,0 +1,3 @@
+obj-$(CONFIG_KURI_HELLO) += kuri_hello.o
+obj-$(CONFIG_KMJPEG) += kmjpeg.o
+
diff --git a/snapgear-2.6-p42/linux-2.6.21.1/drivers/kmjpeg/kmjpeg.c b/snapgear-2.6-p42/linux-2.6.21.1/drivers/kmjpeg/kmjpeg.c
new file mode 100644 (file)
index 0000000..3aae65e
--- /dev/null
@@ -0,0 +1,229 @@
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/fs.h>
+#include <linux/cdev.h>
+#include <linux/sched.h>
+#include <asm/current.h>
+#include <asm/uaccess.h>
+#include <asm/io.h>
+
+#include <linux/io.h>
+#include <linux/ioport.h>
+
+#include <linux/interrupt.h>
+#include <linux/fcntl.h>
+#include <linux/slab.h>
+
+#include "kmjpeg.h"
+
+MODULE_LICENSE("GPL");
+
+#define DRIVER_NAME "kmjpeg"
+
+#define AHBADD 0xa0000000
+#define RDYADD 0xa0000200
+#define APBADD 0x80000c00
+
+
+/* Physical address for NEEK
+#define AHBADD 0xb0000000
+#define RDYADD 0xb0000200
+#define APBADD 0x80000700
+*/
+
+static struct kmjpeg_priv *kmjpeg_devices;
+
+static unsigned int kmjpeg_major = 0;
+module_param(kmjpeg_major, uint, 0);
+
+struct kmjpeg_sregs_t {
+  volatile unsigned int fbadd;
+  volatile unsigned int size_info;
+  volatile unsigned int inc_add;
+  volatile unsigned int reset;
+};
+
+struct kmjpeg_sregs_t * kmjpeg_sregs;
+
+//volatile unsigned int *apb_regs;
+
+volatile unsigned int *hdata;
+volatile unsigned int *rdyadd;
+
+int kmjpeg_ioctl(struct inode *inode, struct file *filep, unsigned int cmd, unsigned long arg)
+{
+  int retval = 0;
+  struct ioctl_cmdreg datareg;
+  struct ioctl_cmdwrite datawrite;
+
+  unsigned int tmp;
+  int i;
+
+  memset(&datareg, 0, sizeof(datareg));
+  memset(&datawrite, 0, sizeof(datawrite));
+
+
+  retval = 0;
+  switch(cmd){
+
+  case IOCTL_WRITE :
+   if(!access_ok(VERIFY_READ, (void __user *)arg, _IOC_SIZE(cmd))){
+      retval = -EFAULT;
+      goto done;
+   }
+   if(copy_from_user(&datawrite, (int __user *)arg, sizeof(datawrite))){
+      retval = -EFAULT;
+      goto done;
+   }
+   
+   while(1){
+     tmp = *rdyadd;
+     if((tmp & 0x80000000) == 0x80000000)break;
+     for(i=0;i<800;i++);
+   }
+   *hdata = datawrite.pixeldata;
+   //   for(i=0;i<256;i++){
+   //    *hdata = data4b.fourbdata[i];
+     //     for(j=0;j<100000;j++);
+   //   }
+   break;
+  
+  case IOCTL_REGSET :
+    //    printk("IOCTL_REGSET\n");
+   if(!access_ok(VERIFY_READ, (void __user *)arg, _IOC_SIZE(cmd))){
+      retval = -EFAULT;
+      printk("ACCESS_NG\n");
+      goto done;
+    }
+   //   printk("end of access_ok\n");
+    if(copy_from_user(&datareg, (int __user *)arg, sizeof(datareg))){
+      retval = -EFAULT;
+      printk("COPY_NG\n");
+      goto done;
+    }
+    //    printk("IOCTL regset ..............................\n");
+    kmjpeg_sregs = ioremap_nocache(APBADD,12);
+    //   printk("IOCTL regset2 ..............................\n");
+    kmjpeg_sregs->fbadd = datareg.fb;
+    kmjpeg_sregs->size_info = datareg.size_info;
+    kmjpeg_sregs->inc_add = datareg.inc_add;
+    kmjpeg_sregs->reset = 0x0;
+    kmjpeg_sregs->reset =0xffffffff;
+    iounmap(kmjpeg_sregs);
+    //    printk("IOCTL regset3 ..............................\n");
+    break;
+  default :
+    retval = -EFAULT;
+    break;
+  }
+ done :
+  return(retval);
+}
+
+ssize_t kmjpeg_write(struct file *filp, const char __user *buf, size_t count, loff_t *f_pos)
+{
+  int retval = 0;
+  unsigned int ycc;
+  unsigned char dbuf[3];
+
+  if(count != 3){
+    retval = -EFAULT;
+    goto out;
+  }
+  if(copy_from_user(dbuf, buf, 3)){
+    retval = -EFAULT;
+    goto out;
+  }
+  ycc = (unsigned int)(((unsigned int)dbuf[2]<<16)|((unsigned int)dbuf[1]<<8)|((unsigned int)dbuf[0]));
+  *hdata = ycc;
+  retval = count;
+ out:
+  return(retval);
+} 
+
+static ssize_t kmjpeg_read(struct file* pFile, char __user* pBuf, size_t len, loff_t* offset)
+{
+   return 0;
+}
+
+
+
+
+static int kmjpeg_open(struct inode *inode, struct file *file)
+{
+   
+  printk("%s: major %d minor %d (pid %d)\n", __func__,imajor(inode),iminor(inode),current->pid);
+  inode->i_private = inode;
+  file->private_data = file;
+  printk(" i_private=%p private_data=%p\n",inode->i_private, file->private_data);
+  //  printk("kmjpeg_open ending\n");
+  return 0;
+}
+
+static int kmjpeg_close(struct inode *inode, struct file *file)
+{
+  printk("%s: major %d minor %d (pid %d)\n", __func__,imajor(inode),iminor(inode),current->pid);
+  printk(" i_private=%p private_data=%p\n",inode->i_private, file->private_data);
+
+  return 0;
+}
+
+struct file_operations kmjpeg_fops ={
+  .owner = THIS_MODULE,
+  .open = kmjpeg_open,
+  .release = kmjpeg_close,
+  .read = kmjpeg_read,
+  .write = kmjpeg_write,
+  .ioctl = kmjpeg_ioctl,
+};
+
+ static int kmjpeg_init(void)
+{
+  int major;
+  int ret = 0;
+
+  major = register_chrdev(kmjpeg_major, DRIVER_NAME, &kmjpeg_fops);
+
+  if((kmjpeg_major > 0 && major != 0) || (kmjpeg_major == 0 && major < 0) || major < 0){
+    printk("%s driver registration error\n", DRIVER_NAME);
+    ret = major;
+    goto error;
+  }
+  if (kmjpeg_major == 0){
+    kmjpeg_major = major;
+  }
+
+  hdata = ioremap_nocache(AHBADD,4);
+  if(hdata==NULL){
+    printk("ioremap miss!\n");
+    return(0);
+  }
+  rdyadd = ioremap_nocache(RDYADD,4);
+  if(rdyadd==NULL){
+    printk("ioremap miss!\n");
+    return(0);
+  }
+  printk("%s driver[major %d] installed.\n", DRIVER_NAME, kmjpeg_major);
+
+ error:
+  return(ret);
+}
+
+static void kmjpeg_exit(void)
+{
+  iounmap(hdata);
+  iounmap(rdyadd);
+  //  kfree(kmjpeg_devices);
+
+  unregister_chrdev(kmjpeg_major, DRIVER_NAME);
+  printk("%s driver unloaded\n", DRIVER_NAME);
+}
+
+module_init(kmjpeg_init);
+module_exit(kmjpeg_exit);
diff --git a/snapgear-2.6-p42/linux-2.6.21.1/drivers/kmjpeg/kmjpeg.c~ b/snapgear-2.6-p42/linux-2.6.21.1/drivers/kmjpeg/kmjpeg.c~
new file mode 100644 (file)
index 0000000..1d48f38
--- /dev/null
@@ -0,0 +1,229 @@
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/fs.h>
+#include <linux/cdev.h>
+#include <linux/sched.h>
+#include <asm/current.h>
+#include <asm/uaccess.h>
+#include <asm/io.h>
+
+#include <linux/io.h>
+#include <linux/ioport.h>
+
+#include <linux/interrupt.h>
+#include <linux/fcntl.h>
+#include <linux/slab.h>
+
+#include "kmjpeg.h"
+
+MODULE_LICENSE("GPL");
+
+#define DRIVER_NAME "kmjpeg"
+
+#define AHBADD 0xa0000000
+#define RDYADD 0xa0000200
+#define APBADD 0x80000c00
+
+
+/* Physical address for NEEK
+#define AHBADD 0xb0000000
+#define RDYADD 0xb0000200
+#define APBADD 0x80000700
+*/
+
+static struct kmjpeg_priv *kmjpeg_devices;
+
+static unsigned int kmjpeg_major = 0;
+module_param(kmjpeg_major, uint, 0);
+
+struct kmjpeg_sregs_t {
+  volatile unsigned int fbadd;
+  volatile unsigned int size_info;
+  volatile unsigned int inc_add;
+  volatile unsigned int reset;
+};
+
+struct kmjpeg_sregs_t * kmjpeg_sregs;
+
+//volatile unsigned int *apb_regs;
+
+volatile unsigned int *hdata;
+volatile unsigned int *rdyadd;
+
+int kmjpeg_ioctl(struct inode *inode, struct file *filep, unsigned int cmd, unsigned long arg)
+{
+  int retval = 0;
+  struct ioctl_cmdreg datareg;
+  struct ioctl_cmdwrite datawrite;
+
+  unsigned int tmp;
+  int i;
+
+  memset(&datareg, 0, sizeof(datareg));
+  memset(&data4b, 0, sizeof(datawrite));
+
+
+  retval = 0;
+  switch(cmd){
+
+  case IOCTL_WR4BYTE :
+   if(!access_ok(VERIFY_READ, (void __user *)arg, _IOC_SIZE(cmd))){
+      retval = -EFAULT;
+      goto done;
+   }
+   if(copy_from_user(&datawrite, (int __user *)arg, sizeof(datawrite))){
+      retval = -EFAULT;
+      goto done;
+   }
+   
+   while(1){
+     tmp = *rdyadd;
+     if(tmp == 0x80000000)break;
+     for(i=0;i<800;i++);
+   }
+   *hdata = datawrite.pixeldata;
+   //   for(i=0;i<256;i++){
+   //    *hdata = data4b.fourbdata[i];
+     //     for(j=0;j<100000;j++);
+   //   }
+   break;
+  
+  case IOCTL_REGSET :
+    //    printk("IOCTL_REGSET\n");
+   if(!access_ok(VERIFY_READ, (void __user *)arg, _IOC_SIZE(cmd))){
+      retval = -EFAULT;
+      printk("ACCESS_NG\n");
+      goto done;
+    }
+   printk("end of access_ok\n");
+    if(copy_from_user(&datareg, (int __user *)arg, sizeof(datareg))){
+      retval = -EFAULT;
+      printk("COPY_NG\n");
+      goto done;
+    }
+    printk("IOCTL regset ..............................\n");
+    kmjpeg_sregs = ioremap_nocache(APBADD,12);
+    printk("IOCTL regset2 ..............................\n");
+    kmjpeg_sregs->fbadd = datareg.fb;
+    kmjpeg_sregs->size_info = datareg.size_info;
+    kmjpeg_sregs->inc_add = datareg.inc_add;
+    kmjpeg_sregs->reset = 0x0;
+    kmjpeg_sregs->reset =0xffffffff;
+    iounmap(kmjpeg_sregs);
+    printk("IOCTL regset3 ..............................\n");
+    break;
+  default :
+    retval = -EFAULT;
+    break;
+  }
+ done :
+  return(retval);
+}
+
+ssize_t kmjpeg_write(struct file *filp, const char __user *buf, size_t count, loff_t *f_pos)
+{
+  int retval = 0;
+  unsigned int ycc;
+  unsigned char dbuf[3];
+
+  if(count != 3){
+    retval = -EFAULT;
+    goto out;
+  }
+  if(copy_from_user(dbuf, buf, 3)){
+    retval = -EFAULT;
+    goto out;
+  }
+  ycc = (unsigned int)(((unsigned int)dbuf[2]<<16)|((unsigned int)dbuf[1]<<8)|((unsigned int)dbuf[0]));
+  *hdata = ycc;
+  retval = count;
+ out:
+  return(retval);
+} 
+
+static ssize_t kmjpeg_read(struct file* pFile, char __user* pBuf, size_t len, loff_t* offset)
+{
+   return 0;
+}
+
+
+
+
+static int kmjpeg_open(struct inode *inode, struct file *file)
+{
+   
+  printk("%s: major %d minor %d (pid %d)\n", __func__,imajor(inode),iminor(inode),current->pid);
+  inode->i_private = inode;
+  file->private_data = file;
+  printk(" i_private=%p private_data=%p\n",inode->i_private, file->private_data);
+  //  printk("kmjpeg_open ending\n");
+  return 0;
+}
+
+static int kmjpeg_close(struct inode *inode, struct file *file)
+{
+  printk("%s: major %d minor %d (pid %d)\n", __func__,imajor(inode),iminor(inode),current->pid);
+  printk(" i_private=%p private_data=%p\n",inode->i_private, file->private_data);
+
+  return 0;
+}
+
+struct file_operations kmjpeg_fops ={
+  .owner = THIS_MODULE,
+  .open = kmjpeg_open,
+  .release = kmjpeg_close,
+  .read = kmjpeg_read,
+  .write = kmjpeg_write,
+  .ioctl = kmjpeg_ioctl,
+};
+
+ static int kmjpeg_init(void)
+{
+  int major;
+  int ret = 0;
+
+  major = register_chrdev(kmjpeg_major, DRIVER_NAME, &kmjpeg_fops);
+
+  if((kmjpeg_major > 0 && major != 0) || (kmjpeg_major == 0 && major < 0) || major < 0){
+    printk("%s driver registration error\n", DRIVER_NAME);
+    ret = major;
+    goto error;
+  }
+  if (kmjpeg_major == 0){
+    kmjpeg_major = major;
+  }
+
+  hdata = ioremap_nocache(AHBADD,4);
+  if(hdata==NULL){
+    printk("ioremap miss!\n");
+    return(0);
+  }
+  rdyadd = ioremap_nocache(RDYADD,4);
+  if(rdyadd==NULL){
+    printk("ioremap miss!\n");
+    return(0);
+  }
+  printk("%s driver[major %d] installed.\n", DRIVER_NAME, kmjpeg_major);
+
+ error:
+  return(ret);
+}
+
+static void kmjpeg_exit(void)
+{
+  iounmap(hdata);
+  iounmap(rdyadd);
+  //  kfree(kmjpeg_devices);
+
+  unregister_chrdev(kmjpeg_major, DRIVER_NAME);
+  printk("%s driver unloaded\n", DRIVER_NAME);
+}
+
+module_init(kmjpeg_init);
+module_exit(kmjpeg_exit);
diff --git a/snapgear-2.6-p42/linux-2.6.21.1/drivers/kmjpeg/kmjpeg.h b/snapgear-2.6-p42/linux-2.6.21.1/drivers/kmjpeg/kmjpeg.h
new file mode 100644 (file)
index 0000000..a8143e6
--- /dev/null
@@ -0,0 +1,18 @@
+#include <linux/ioctl.h>
+
+struct ioctl_cmdwrite{
+  unsigned int pixeldata;
+  //  unsigned int fourbdata[256];
+};
+struct ioctl_cmdreg{
+  unsigned int fb;
+  unsigned int size_info;
+  unsigned int inc_add;
+};
+
+#define IOC_MAGIC 'k'
+
+#define IOCTL_REGSET _IOW(IOC_MAGIC, 1, struct ioctl_cmdreg)
+#define IOCTL_WRITE _IOW(IOC_MAGIC,2, struct ioctl_cmdwrite)
+
+
diff --git a/snapgear-2.6-p42/linux-2.6.21.1/drivers/kmjpeg/kmjpeg.h~ b/snapgear-2.6-p42/linux-2.6.21.1/drivers/kmjpeg/kmjpeg.h~
new file mode 100644 (file)
index 0000000..e31dee2
--- /dev/null
@@ -0,0 +1,17 @@
+#include <linux/ioctl.h>
+
+struct ioctl_cmdw4b{
+  unsigned int fourbdata[256];
+};
+struct ioctl_cmdreg{
+  unsigned int fb;
+  unsigned int size_info;
+  unsigned int inc_add;
+};
+
+#define IOC_MAGIC 'k'
+
+#define IOCTL_REGSET _IOW(IOC_MAGIC, 1, struct ioctl_cmdreg)
+#define IOCTL_WR4BYTE _IOW(IOC_MAGIC,2, struct ioctl_cmdw4b)
+
+
diff --git a/snapgear-2.6-p42/linux-2.6.21.1/drivers/kmjpeg/kuri_hello.c b/snapgear-2.6-p42/linux-2.6.21.1/drivers/kmjpeg/kuri_hello.c
new file mode 100644 (file)
index 0000000..e821de4
--- /dev/null
@@ -0,0 +1,18 @@
+#include <linux/module.h>
+#include <linux/init.h>
+
+MODULE_LICENSE("GPL");
+
+static int kurihello_init(void)
+{
+  printk(KERN_ALERT "KURI driver loaded\n");
+  return 0;
+}
+
+static void kurihello_exit(void)
+{
+  printk(KERN_ALERT "KURI driver unloaded\n");
+}
+
+module_init(kurihello_init);
+module_exit(kurihello_exit);
diff --git a/snapgear-2.6-p42/user/jpeg-6b/dmjpeg b/snapgear-2.6-p42/user/jpeg-6b/dmjpeg
deleted file mode 100755 (executable)
index c2e3f9a..0000000
Binary files a/snapgear-2.6-p42/user/jpeg-6b/dmjpeg and /dev/null differ
index 244eaf7..28a38b9 100644 (file)
@@ -63,8 +63,10 @@ static const char * const cdjpeg_message_table[] = {
 #include <sys/mman.h>
 #include <sys/ioctl.h>
 
-#include<sys/time.h>
+#include <sys/time.h>
+#include "kmjpeg.h"
 static int f_num = 0;
+//#define DEBUG
 
 
 /*
@@ -112,6 +114,9 @@ void setup_hardware(j_decompress_ptr cinfo)
 {
   //  int xres,yres,vbpp,line_len,yfac;
   long int screensize;
+  struct ioctl_cmdreg regset;
+  unsigned int size,inc;
+  int i;
 
   /** V1 framebuffer & motionJPEG support **/
   if(!(cinfo->fd_framebuffer = open( "/dev/fb0", O_RDWR))){
@@ -134,6 +139,14 @@ void setup_hardware(j_decompress_ptr cinfo)
   fprintf(stderr, "Framebuffer xsize:%d, ysize:%d, vbpp:%d\n", 
           cinfo->fb_vinfo.xres, cinfo->fb_vinfo.yres, cinfo->fb_vinfo.bits_per_pixel);
 #endif
+  if(cinfo->fb_vinfo.xres % 16 != 0 || cinfo->fb_vinfo.yres % 16 != 0){
+    fprintf(stderr, "This system support only multiple of 16 X,Y size Framebuffer.\n");
+    exit(1);  
+  }
+  if(cinfo->fb_vinfo.bits_per_pixel != 16){
+    fprintf(stderr, "This system support only 16 bits per pixel Framebuffer\n");
+    exit(1);  
+  }
   screensize = cinfo->fb_vinfo.xres * cinfo->fb_vinfo.yres * cinfo->fb_vinfo.bits_per_pixel / 8;
   cinfo->fbptr = (char *)mmap(0,screensize,PROT_READ | PROT_WRITE, MAP_SHARED,cinfo->fd_framebuffer,0);
   if((int)(cinfo->fbptr) == -1){
@@ -141,6 +154,24 @@ void setup_hardware(j_decompress_ptr cinfo)
     exit(1);  
   }
   cinfo->fb_yinc = cinfo->fb_vinfo.bits_per_pixel / 8;
+
+  /* access IP core */
+  printf("setting up hardware\n");
+  cinfo->dev_fd = open("/dev/kmjpeg", O_RDWR);
+  if(cinfo->dev_fd == -1){
+    printf("kmjpeg device file open error\n");
+    exit(1);
+  }
+  regset.fb = cinfo->fb_start_add;
+  size = (unsigned int)((cinfo->image_width) <<16 | (unsigned int)(cinfo->image_height));
+  regset.size_info = size;
+  inc = (unsigned int)(cinfo->fb_vinfo.xres - cinfo->image_width)*2;
+  regset.inc_add = inc;
+#ifdef DEBUG
+  printf(stderr, "ioctl fb_start_add = %x, size_info = %x, inc_add = %x\n");
+  for(i=0;i<10000;i++);
+#endif
+  ioctl(cinfo->dev_fd, IOCTL_REGSET, &regset);
 }
 
 
@@ -392,6 +423,16 @@ parse_switches (j_decompress_ptr cinfo, int argc, char **argv,
       /* Targa output format. */
       requested_fmt = FMT_TARGA;
 
+    } else if (keymatch(arg, "fb_add", 1)) {
+      /* Set Framebuffer address */
+      unsigned int xval;
+
+      if (++argn >= argc)      /* advance to next argument */
+       usage();
+      if (sscanf(argv[argn], "%x", &xval) != 1)
+       usage();
+      cinfo->fb_start_add = xval;
+
     } else {
       usage();                 /* bogus switch */
     }
@@ -604,7 +645,7 @@ main (int argc, char **argv)
   (void) jpeg_read_header(&cinfo, TRUE);
  
   /* Adjust default decompression parameters by re-parsing the options */
-  file_index = parse_switches(&cinfo, argc, argv, 0, TRUE);
+   file_index = parse_switches(&cinfo, argc, argv, 0, TRUE);
 
   /* Initialize the output module now to let it override any crucial
    * option settings (for instance, GIF wants to force color quantization).
index e6f014e..df211d8 100644 (file)
@@ -12,6 +12,7 @@
 #include "jinclude.h"
 #include "jpeglib.h"
 
+#include "kmjpeg.h"
 static int call_num = 0;
 
 
@@ -144,6 +145,7 @@ ycc_rgb_convert (j_decompress_ptr cinfo,
   unsigned int pixcoldata;
   unsigned int temppix;
   long int location;
+  struct ioctl_cmdwrite writedata;
 
   while (--num_rows >= 0) {
     inptr0 = input_buf[0][input_row];
@@ -156,20 +158,24 @@ ycc_rgb_convert (j_decompress_ptr cinfo,
       cb = GETJSAMPLE(inptr1[col]);
       cr = GETJSAMPLE(inptr2[col]);
       /* Range-limiting is essential due to noise introduced by DCT losses. */
-      outptr[RGB_RED] =   range_limit[y + Crrtab[cr]];
+      /* outptr[RGB_RED] =   range_limit[y + Crrtab[cr]];
       outptr[RGB_GREEN] = range_limit[y +
                              ((int) RIGHT_SHIFT(Cbgtab[cb] + Crgtab[cr],
                                                 SCALEBITS))];
       outptr[RGB_BLUE] =  range_limit[y + Cbbtab[cb]];
-
+      */
       /* V1 LEON-motionJPEG project */
-      if(col%2 == 0){
+      /*     if(col%2 == 0){
         temppix =( ((outptr[RGB_RED]&0xf8)<<8) | ((outptr[RGB_GREEN]&0xfc)<<3) | ((outptr[RGB_BLUE]&0xf8)>>3));
       }else{
         pixcoldata = temppix << 16 |( ((outptr[RGB_RED]&0xf8)<<8) | ((outptr[RGB_GREEN]&0xfc)<<3) | ((outptr[RGB_BLUE]&0xf8)>>3));
         location = ((col-1) * cinfo->fb_yinc) + (call_num) * cinfo->fb_finfo.line_length ;
-        *((unsigned int *)(cinfo->fbptr + location)) = pixcoldata;
-      }
+       *((unsigned int *)(cinfo->fbptr + location)) = pixcoldata;
+       }*/
+      /*LEON-motionJPEG prj  for hard IP : yccrgbs*/
+      pixcoldata =(unsigned int)( y <<16 | cb <<8 | cr);
+      writedata.pixeldata = pixcoldata;
+      ioctl(cinfo->dev_fd, IOCTL_WRITE, &writedata); 
       outptr += RGB_PIXELSIZE;
     }
   }
index ffa1a52..b127145 100644 (file)
@@ -646,6 +646,10 @@ struct jpeg_decompress_struct {
   long int fb_screensize;
   char *fbptr;
   int fb_yinc;
+
+  /* add for yccrgbs version */
+  unsigned int fb_start_add;
+  int dev_fd;
 };
 
 
diff --git a/snapgear-2.6-p42/user/jpeg-6b/kmjpeg.h b/snapgear-2.6-p42/user/jpeg-6b/kmjpeg.h
new file mode 120000 (symlink)
index 0000000..374d22d
--- /dev/null
@@ -0,0 +1 @@
+../../linux-2.6.21.1/drivers/kmjpeg/kmjpeg.h
\ No newline at end of file