diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/cdparanoia_10.2.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/cdparanoia_10.2.bb
new file mode 100644
index 0000000..86ba527
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/cdparanoia_10.2.bb
@@ -0,0 +1,26 @@
+SUMMARY = "cdparanoia library"
+DESCRIPTION = "library used to read audio CDs, which is able to perform \
+error corrections, hence the name paranoia."
+HOMEPAGE = "https://www.xiph.org/"
+SECTION = "multimedia"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING-LGPL;md5=d370feaa1c9edcdbd29ca27ea3d2304d"
+
+SRC_URI = "http://downloads.xiph.org/releases/cdparanoia/cdparanoia-III-${PV}.src.tgz \
+           file://0001-Use-DESTDIR-in-install-Makefile-rule.patch \
+           file://0002-interface-remove-C-reserved-keyword.patch \
+"
+SRC_URI[md5sum] = "b304bbe8ab63373924a744eac9ebc652"
+SRC_URI[sha256sum] = "005db45ef4ee017f5c32ec124f913a0546e77014266c6a1c50df902a55fe64df"
+
+# Uppercase letters are not allowed in the recipe name, thus the recipe can not be named cdparanoia-III and
+# we need to add the path to the extracted sources explicitely:
+S = "${WORKDIR}/cdparanoia-III-${PV}"
+
+# cdparanoia Makefile can not be used with several threads (because the static library target and the shared
+# library target use object files which are compiled in the same directory, the object files are just removed
+# between the compilation of those two targets)
+PARALLEL_MAKE = ""
+
+inherit autotools-brokensep
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-Use-DESTDIR-in-install-Makefile-rule.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-Use-DESTDIR-in-install-Makefile-rule.patch
new file mode 100644
index 0000000..7b08300
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0001-Use-DESTDIR-in-install-Makefile-rule.patch
@@ -0,0 +1,70 @@
+From 97c06ae955b270851f4fd2396c715f9c76591f37 Mon Sep 17 00:00:00 2001
+From: Etienne Cordonnier <etienne.cordonnier@streamunlimited.com>
+Date: Thu, 2 Apr 2015 10:15:08 +0200
+Subject: [PATCH] Use DESTDIR in "install" Makefile rule
+
+This change allows to perform installations in a sysroot folder, which is required e.g. by
+the recipes inheriting yocto autotool class, and is an autotool standard:
+make install DESTDIR=~/mysysroot
+
+Upstream-Status: Inappropriate (the upstream project is dead)
+
+Signed-off-by: Etienne Cordonnier <etienne.cordonnier@streamunlimited.com>
+---
+ Makefile.in | 36 ++++++++++++++++++------------------
+ 1 file changed, 18 insertions(+), 18 deletions(-)
+
+diff --git a/Makefile.in b/Makefile.in
+index 3d235ad..df544c7 100644
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -63,28 +63,28 @@ slib:
+ 	cd paranoia && $(MAKE) slib
+ 
+ install:
+-	$(INSTALL) -d -m 0755 $(BINDIR)
+-	$(INSTALL) -m 755 $(srcdir)/cdparanoia $(BINDIR)
+-	$(INSTALL) -d -m 0755 $(MANDIR)
+-	$(INSTALL) -d -m 0755 $(MANDIR)/man1
+-	$(INSTALL) -m 0644 $(srcdir)/cdparanoia.1 $(MANDIR)/man1
+-	$(INSTALL) -d -m 0755 $(INCLUDEDIR)
+-	$(INSTALL) -m 0644 $(srcdir)/paranoia/cdda_paranoia.h $(INCLUDEDIR)
+-	$(INSTALL) -d -m 0755 $(LIBDIR)
+-	$(INSTALL) -m 0644 $(srcdir)/paranoia/libcdda_paranoia.so.0.$(VERSION) $(LIBDIR)
+-	$(INSTALL) -m 0644 $(srcdir)/paranoia/libcdda_paranoia.a $(LIBDIR)
+-	$(INSTALL) -m 0644 $(srcdir)/interface/cdda_interface.h $(INCLUDEDIR)
+-	$(INSTALL) -m 0644 $(srcdir)/interface/libcdda_interface.so.0.$(VERSION) $(LIBDIR)
+-	$(INSTALL) -m 0644 $(srcdir)/interface/libcdda_interface.a $(LIBDIR)
+-	$(INSTALL) -m 0644 $(srcdir)/utils.h $(INCLUDEDIR)
++	$(INSTALL) -d -m 0755 $(DESTDIR)$(BINDIR)
++	$(INSTALL) -m 755 $(srcdir)/cdparanoia $(DESTDIR)$(BINDIR)
++	$(INSTALL) -d -m 0755 $(DESTDIR)$(MANDIR)
++	$(INSTALL) -d -m 0755 $(DESTDIR)$(MANDIR)/man1
++	$(INSTALL) -m 0644 $(srcdir)/cdparanoia.1 $(DESTDIR)$(MANDIR)/man1
++	$(INSTALL) -d -m 0755 $(DESTDIR)$(INCLUDEDIR)
++	$(INSTALL) -m 0644 $(srcdir)/paranoia/cdda_paranoia.h $(DESTDIR)$(INCLUDEDIR)
++	$(INSTALL) -d -m 0755 $(DESTDIR)$(LIBDIR)
++	$(INSTALL) -m 0644 $(srcdir)/paranoia/libcdda_paranoia.so.0.$(VERSION) $(DESTDIR)$(LIBDIR)
++	$(INSTALL) -m 0644 $(srcdir)/paranoia/libcdda_paranoia.a $(DESTDIR)$(LIBDIR)
++	$(INSTALL) -m 0644 $(srcdir)/interface/cdda_interface.h $(DESTDIR)$(INCLUDEDIR)
++	$(INSTALL) -m 0644 $(srcdir)/interface/libcdda_interface.so.0.$(VERSION) $(DESTDIR)$(LIBDIR)
++	$(INSTALL) -m 0644 $(srcdir)/interface/libcdda_interface.a $(DESTDIR)$(LIBDIR)
++	$(INSTALL) -m 0644 $(srcdir)/utils.h $(DESTDIR)$(INCLUDEDIR)
+ 	ln -fs libcdda_interface.so.0.$(VERSION) \
+-		$(LIBDIR)/libcdda_interface.so.0
++		$(DESTDIR)$(LIBDIR)/libcdda_interface.so.0
+ 	ln -fs libcdda_interface.so.0.$(VERSION) \
+-		$(LIBDIR)/libcdda_interface.so
++		$(DESTDIR)$(LIBDIR)/libcdda_interface.so
+ 	ln -fs libcdda_paranoia.so.0.$(VERSION) \
+-		$(LIBDIR)/libcdda_paranoia.so.0
++		$(DESTDIR)$(LIBDIR)/libcdda_paranoia.so.0
+ 	ln -fs libcdda_paranoia.so.0.$(VERSION) \
+-		$(LIBDIR)/libcdda_paranoia.so
++		$(DESTDIR)$(LIBDIR)/libcdda_paranoia.so
+ 
+ cdparanoia:	$(OFILES) $(LIBDEP)
+ 		$(LD) $(CFLAGS) $(LDFLAGS) $(OFILES) \
+-- 
+1.9.1
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0002-interface-remove-C-reserved-keyword.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0002-interface-remove-C-reserved-keyword.patch
new file mode 100644
index 0000000..a5600a1
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/cdparanoia/files/0002-interface-remove-C-reserved-keyword.patch
@@ -0,0 +1,605 @@
+From 12ea28398f8e5d4a4a23c62d511fc4f53584e51d Mon Sep 17 00:00:00 2001
+From: Etienne Cordonnier <etienne.cordonnier@streamunlimited.com>
+Date: Tue, 7 Apr 2015 11:07:56 +0200
+Subject: [PATCH] interface: remove C++ reserved keyword
+
+Because "private" was used in cdda_interface.h, this header file could not be
+compiled in C++.
+
+Upstream-Status: Inappropriate (the upstream project is dead)
+
+Signed-off-by: Etienne Cordonnier <etienne.cordonnier@streamunlimited.com>
+---
+ interface/cdda_interface.h   |   2 +-
+ interface/cooked_interface.c |   8 +--
+ interface/interface.c        |   8 +--
+ interface/scan_devices.c     |  22 ++++----
+ interface/scsi_interface.c   | 128 +++++++++++++++++++++----------------------
+ interface/test_interface.c   |   4 +-
+ 6 files changed, 86 insertions(+), 86 deletions(-)
+
+diff --git a/interface/cdda_interface.h b/interface/cdda_interface.h
+index 8487cb7..b738825 100644
+--- a/interface/cdda_interface.h
++++ b/interface/cdda_interface.h
+@@ -84,7 +84,7 @@ typedef struct cdrom_drive{
+   int is_atapi;
+   int is_mmc;
+ 
+-  cdda_private_data_t *private;
++  cdda_private_data_t *priv; /* private is a C++ reserved keyword */
+   void         *reserved;
+   unsigned char inqbytes[4];
+ 
+diff --git a/interface/cooked_interface.c b/interface/cooked_interface.c
+index de29055..ea9d0fc 100644
+--- a/interface/cooked_interface.c
++++ b/interface/cooked_interface.c
+@@ -13,13 +13,13 @@
+ static int timed_ioctl(cdrom_drive *d, int fd, int command, void *arg){
+   struct timespec tv1;
+   struct timespec tv2;
+-  int ret1=clock_gettime(d->private->clock,&tv1);
++  int ret1=clock_gettime(d->priv->clock,&tv1);
+   int ret2=ioctl(fd, command,arg);
+-  int ret3=clock_gettime(d->private->clock,&tv2);
++  int ret3=clock_gettime(d->priv->clock,&tv2);
+   if(ret1<0 || ret3<0){
+-    d->private->last_milliseconds=-1;
++    d->priv->last_milliseconds=-1;
+   }else{
+-    d->private->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.;
++    d->priv->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.;
+   }
+   return ret2;
+ }
+diff --git a/interface/interface.c b/interface/interface.c
+index e8a90cd..526c2a9 100644
+--- a/interface/interface.c
++++ b/interface/interface.c
+@@ -39,9 +39,9 @@ int cdda_close(cdrom_drive *d){
+     if(d->drive_model)free(d->drive_model);
+     if(d->cdda_fd!=-1)close(d->cdda_fd);
+     if(d->ioctl_fd!=-1 && d->ioctl_fd!=d->cdda_fd)close(d->ioctl_fd);
+-    if(d->private){
+-      if(d->private->sg_hd)free(d->private->sg_hd);
+-      free(d->private);
++    if(d->priv){
++      if(d->priv->sg_hd)free(d->priv->sg_hd);
++      free(d->priv);
+     }
+ 
+     free(d);
+@@ -127,7 +127,7 @@ long cdda_read_timed(cdrom_drive *d, void *buffer, long beginsector, long sector
+ 	}
+       }	
+     }
+-    if(ms)*ms=d->private->last_milliseconds;
++    if(ms)*ms=d->priv->last_milliseconds;
+     return(sectors);
+   }
+   
+diff --git a/interface/scan_devices.c b/interface/scan_devices.c
+index fc58110..5f6c4e3 100644
+--- a/interface/scan_devices.c
++++ b/interface/scan_devices.c
+@@ -264,11 +264,11 @@ cdrom_drive *cdda_identify_cooked(const char *dev, int messagedest,
+   d->interface=COOKED_IOCTL;
+   d->bigendianp=-1; /* We don't know yet... */
+   d->nsectors=-1;
+-  d->private=calloc(1,sizeof(*d->private));
++  d->priv=calloc(1,sizeof(*d->priv));
+   {
+     /* goddamnit */
+     struct timespec tv;
+-    d->private->clock=(clock_gettime(CLOCK_MONOTONIC,&tv)<0?CLOCK_REALTIME:CLOCK_MONOTONIC);
++    d->priv->clock=(clock_gettime(CLOCK_MONOTONIC,&tv)<0?CLOCK_REALTIME:CLOCK_MONOTONIC);
+   }
+   idmessage(messagedest,messages,"\t\tCDROM sensed: %s\n",description);
+   return(d);
+@@ -674,15 +674,15 @@ cdrom_drive *cdda_identify_scsi(const char *generic_device,
+   d->bigendianp=-1; /* We don't know yet... */
+   d->nsectors=-1;
+   d->messagedest = messagedest;
+-  d->private=calloc(1,sizeof(*d->private));
++  d->priv=calloc(1,sizeof(*d->priv));
+   {
+     /* goddamnit */
+     struct timespec tv;
+-    d->private->clock=(clock_gettime(CLOCK_MONOTONIC,&tv)<0?CLOCK_REALTIME:CLOCK_MONOTONIC);
++    d->priv->clock=(clock_gettime(CLOCK_MONOTONIC,&tv)<0?CLOCK_REALTIME:CLOCK_MONOTONIC);
+   }
+   if(use_sgio){
+     d->interface=SGIO_SCSI;
+-    d->private->sg_buffer=(unsigned char *)(d->private->sg_hd=malloc(MAX_BIG_BUFF_SIZE));
++    d->priv->sg_buffer=(unsigned char *)(d->priv->sg_hd=malloc(MAX_BIG_BUFF_SIZE));
+     g_fd=d->cdda_fd=dup(d->ioctl_fd);
+   }else{
+     version=verify_SG_version(d,messagedest,messages);
+@@ -696,8 +696,8 @@ cdrom_drive *cdda_identify_scsi(const char *generic_device,
+     }
+ 
+     /* malloc our big buffer for scsi commands */
+-    d->private->sg_hd=malloc(MAX_BIG_BUFF_SIZE);
+-    d->private->sg_buffer=((unsigned char *)d->private->sg_hd)+SG_OFF;
++    d->priv->sg_hd=malloc(MAX_BIG_BUFF_SIZE);
++    d->priv->sg_buffer=((unsigned char *)d->priv->sg_hd)+SG_OFF;
+   }
+ 
+   {
+@@ -772,9 +772,9 @@ cdda_identify_scsi_fail:
+   if(i_fd!=-1)close(i_fd);
+   if(g_fd!=-1)close(g_fd);
+   if(d){
+-    if(d->private){
+-      if(d->private->sg_hd)free(d->private->sg_hd);
+-      free(d->private);
++    if(d->priv){
++      if(d->priv->sg_hd)free(d->priv->sg_hd);
++      free(d->priv);
+     }
+     free(d);
+   }
+@@ -821,7 +821,7 @@ cdrom_drive *cdda_identify_test(const char *filename, int messagedest,
+   d->interface=TEST_INTERFACE;
+   d->bigendianp=-1; /* We don't know yet... */
+   d->nsectors=-1;
+-  d->private=calloc(1,sizeof(*d->private));
++  d->priv=calloc(1,sizeof(*d->priv));
+   d->drive_model=copystring("File based test interface");
+   idmessage(messagedest,messages,"\t\tCDROM sensed: %s\n",d->drive_model);
+   
+diff --git a/interface/scsi_interface.c b/interface/scsi_interface.c
+index adbb9bf..75d90d4 100644
+--- a/interface/scsi_interface.c
++++ b/interface/scsi_interface.c
+@@ -15,13 +15,13 @@
+ static int timed_ioctl(cdrom_drive *d, int fd, int command, void *arg){
+   struct timespec tv1;
+   struct timespec tv2;
+-  int ret1=clock_gettime(d->private->clock,&tv1);
++  int ret1=clock_gettime(d->priv->clock,&tv1);
+   int ret2=ioctl(fd, command,arg);
+-  int ret3=clock_gettime(d->private->clock,&tv2);
++  int ret3=clock_gettime(d->priv->clock,&tv2);
+   if(ret1<0 || ret3<0){
+-    d->private->last_milliseconds=-1;
++    d->priv->last_milliseconds=-1;
+   }else{
+-    d->private->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.;
++    d->priv->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000. + (tv2.tv_nsec-tv1.tv_nsec)/1000000.;
+   }
+   return ret2;
+ }
+@@ -96,7 +96,7 @@ static void tweak_SG_buffer(cdrom_drive *d) {
+ static void clear_garbage(cdrom_drive *d){
+   fd_set fdset;
+   struct timeval tv;
+-  struct sg_header *sg_hd=d->private->sg_hd;
++  struct sg_header *sg_hd=d->priv->sg_hd;
+   int flag=0;
+ 
+   /* clear out any possibly preexisting garbage */
+@@ -185,7 +185,7 @@ static int sg2_handle_scsi_cmd(cdrom_drive *d,
+   struct timespec tv2;
+   int tret1,tret2;
+   int status = 0;
+-  struct sg_header *sg_hd=d->private->sg_hd;
++  struct sg_header *sg_hd=d->priv->sg_hd;
+   long writebytes=SG_OFF+cmd_len+in_size;
+ 
+   /* generic scsi device services */
+@@ -195,7 +195,7 @@ static int sg2_handle_scsi_cmd(cdrom_drive *d,
+ 
+   memset(sg_hd,0,sizeof(sg_hd)); 
+   memset(sense_buffer,0,SG_MAX_SENSE); 
+-  memcpy(d->private->sg_buffer,cmd,cmd_len+in_size);
++  memcpy(d->priv->sg_buffer,cmd,cmd_len+in_size);
+   sg_hd->twelve_byte = cmd_len == 12;
+   sg_hd->result = 0;
+   sg_hd->reply_len = SG_OFF + out_size;
+@@ -209,7 +209,7 @@ static int sg2_handle_scsi_cmd(cdrom_drive *d,
+      tell if the command failed.  Scared yet? */
+ 
+   if(bytecheck && out_size>in_size){
+-    memset(d->private->sg_buffer+cmd_len+in_size,bytefill,out_size-in_size); 
++    memset(d->priv->sg_buffer+cmd_len+in_size,bytefill,out_size-in_size); 
+     /* the size does not remove cmd_len due to the way the kernel
+        driver copies buffers */
+     writebytes+=(out_size-in_size);
+@@ -243,7 +243,7 @@ static int sg2_handle_scsi_cmd(cdrom_drive *d,
+   }
+ 
+   sigprocmask (SIG_BLOCK, &(d->sigset), NULL );
+-  tret1=clock_gettime(d->private->clock,&tv1);  
++  tret1=clock_gettime(d->priv->clock,&tv1);  
+   errno=0;
+   status = write(d->cdda_fd, sg_hd, writebytes );
+ 
+@@ -289,7 +289,7 @@ static int sg2_handle_scsi_cmd(cdrom_drive *d,
+     }
+   }
+ 
+-  tret2=clock_gettime(d->private->clock,&tv2);  
++  tret2=clock_gettime(d->priv->clock,&tv2);  
+   errno=0;
+   status = read(d->cdda_fd, sg_hd, SG_OFF + out_size);
+   sigprocmask ( SIG_UNBLOCK, &(d->sigset), NULL );
+@@ -313,7 +313,7 @@ static int sg2_handle_scsi_cmd(cdrom_drive *d,
+   if(bytecheck && in_size+cmd_len<out_size){
+     long i,flag=0;
+     for(i=in_size;i<out_size;i++)
+-      if(d->private->sg_buffer[i]!=bytefill){
++      if(d->priv->sg_buffer[i]!=bytefill){
+ 	flag=1;
+ 	break;
+       }
+@@ -326,9 +326,9 @@ static int sg2_handle_scsi_cmd(cdrom_drive *d,
+ 
+   errno=0;
+   if(tret1<0 || tret2<0){
+-    d->private->last_milliseconds=-1;
++    d->priv->last_milliseconds=-1;
+   }else{
+-    d->private->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000 + (tv2.tv_nsec-tv1.tv_nsec)/1000000;
++    d->priv->last_milliseconds = (tv2.tv_sec-tv1.tv_sec)*1000 + (tv2.tv_nsec-tv1.tv_nsec)/1000000;
+   }
+   return(0);
+ }
+@@ -347,7 +347,7 @@ static int sgio_handle_scsi_cmd(cdrom_drive *d,
+ 
+   memset(&hdr,0,sizeof(hdr));
+   memset(sense,0,sizeof(sense));
+-  memcpy(d->private->sg_buffer,cmd+cmd_len,in_size);
++  memcpy(d->priv->sg_buffer,cmd+cmd_len,in_size);
+ 
+   hdr.cmdp = cmd;
+   hdr.cmd_len = cmd_len;
+@@ -355,7 +355,7 @@ static int sgio_handle_scsi_cmd(cdrom_drive *d,
+   hdr.mx_sb_len = SG_MAX_SENSE;
+   hdr.timeout = 50000;
+   hdr.interface_id = 'S';
+-  hdr.dxferp =  d->private->sg_buffer;
++  hdr.dxferp =  d->priv->sg_buffer;
+   hdr.flags = SG_FLAG_DIRECT_IO;  /* direct IO if we can get it */
+ 
+   /* scary buffer fill hack */
+@@ -400,7 +400,7 @@ static int sgio_handle_scsi_cmd(cdrom_drive *d,
+   if(bytecheck && in_size<out_size){
+     long i,flag=0;
+     for(i=in_size;i<out_size;i++)
+-      if(d->private->sg_buffer[i]!=bytefill){
++      if(d->priv->sg_buffer[i]!=bytefill){
+ 	flag=1;
+ 	break;
+       }
+@@ -412,7 +412,7 @@ static int sgio_handle_scsi_cmd(cdrom_drive *d,
+   }
+ 
+   /* Can't rely on .duration because we can't be certain kernel has HZ set to something useful */
+-  /* d->private->last_milliseconds = hdr.duration; */
++  /* d->priv->last_milliseconds = hdr.duration; */
+ 
+   errno = 0;
+   return 0;
+@@ -445,9 +445,9 @@ static int test_unit_ready(cdrom_drive *d){
+ 
+   handle_scsi_cmd(d, cmd, 6, 0, 56, 0,0, sense);
+ 
+-  key = d->private->sg_buffer[2] & 0xf;
+-  ASC = d->private->sg_buffer[12];
+-  ASCQ = d->private->sg_buffer[13];
++  key = d->priv->sg_buffer[2] & 0xf;
++  ASC = d->priv->sg_buffer[12];
++  ASCQ = d->priv->sg_buffer[13];
+   
+   if(key == 2 && ASC == 4 && ASCQ == 1) return 0;
+   return 1;
+@@ -492,7 +492,7 @@ static int mode_sense_atapi(cdrom_drive *d,int size,int page){
+   if (handle_scsi_cmd (d, cmd, 10, 0, size+4,'\377',1,sense)) return(1);
+ 
+   {
+-    unsigned char *b=d->private->sg_buffer;
++    unsigned char *b=d->priv->sg_buffer;
+     if(b[0])return(1); /* Handles only up to 256 bytes */
+     if(b[6])return(1); /* Handles only up to 256 bytes */
+ 
+@@ -604,8 +604,8 @@ static int mode_select(cdrom_drive *d,int density,int secsize){
+ static unsigned int get_orig_sectorsize(cdrom_drive *d){
+   if(mode_sense(d,12,0x01))return(-1);
+ 
+-  d->orgdens = d->private->sg_buffer[4];
+-  return(d->orgsize = ((int)(d->private->sg_buffer[10])<<8)+d->private->sg_buffer[11]);
++  d->orgdens = d->priv->sg_buffer[4];
++  return(d->orgsize = ((int)(d->priv->sg_buffer[10])<<8)+d->priv->sg_buffer[11]);
+ }
+ 
+ /* switch CDROM scsi drives to given sector size  */
+@@ -664,8 +664,8 @@ static int scsi_read_toc (cdrom_drive *d){
+     return(-4);
+   }
+ 
+-  first=d->private->sg_buffer[2];
+-  last=d->private->sg_buffer[3];
++  first=d->priv->sg_buffer[2];
++  last=d->priv->sg_buffer[3];
+   tracks=last-first+1;
+ 
+   if (last > MAXTRK || first > MAXTRK || last<0 || first<0) {
+@@ -683,7 +683,7 @@ static int scsi_read_toc (cdrom_drive *d){
+       return(-5);
+     }
+     {
+-      scsi_TOC *toc=(scsi_TOC *)(d->private->sg_buffer+4);
++      scsi_TOC *toc=(scsi_TOC *)(d->priv->sg_buffer+4);
+ 
+       d->disc_toc[i-first].bFlags=toc->bFlags;
+       d->disc_toc[i-first].bTrack=i;
+@@ -704,7 +704,7 @@ static int scsi_read_toc (cdrom_drive *d){
+     return(-2);
+   }
+   {
+-    scsi_TOC *toc=(scsi_TOC *)(d->private->sg_buffer+4);
++    scsi_TOC *toc=(scsi_TOC *)(d->priv->sg_buffer+4);
+     
+     d->disc_toc[i-first].bFlags=toc->bFlags;
+     d->disc_toc[i-first].bTrack=0xAA;
+@@ -738,7 +738,7 @@ static int scsi_read_toc2 (cdrom_drive *d){
+   }
+ 
+   /* copy to our structure and convert start sector */
+-  tracks = d->private->sg_buffer[1];
++  tracks = d->priv->sg_buffer[1];
+   if (tracks > MAXTRK) {
+     cderror(d,"003: CDROM reporting illegal number of tracks\n");
+     return(-3);
+@@ -754,33 +754,33 @@ static int scsi_read_toc2 (cdrom_drive *d){
+       return(-5);
+     }
+     
+-    d->disc_toc[i].bFlags = d->private->sg_buffer[10];
++    d->disc_toc[i].bFlags = d->priv->sg_buffer[10];
+     d->disc_toc[i].bTrack = i + 1;
+ 
+     d->disc_toc[i].dwStartSector= d->adjust_ssize * 
+-	(((signed char)(d->private->sg_buffer[2])<<24) | 
+-	 (d->private->sg_buffer[3]<<16)|
+-	 (d->private->sg_buffer[4]<<8)|
+-	 (d->private->sg_buffer[5]));
++	(((signed char)(d->priv->sg_buffer[2])<<24) | 
++	 (d->priv->sg_buffer[3]<<16)|
++	 (d->priv->sg_buffer[4]<<8)|
++	 (d->priv->sg_buffer[5]));
+   }
+ 
+   d->disc_toc[i].bFlags = 0;
+   d->disc_toc[i].bTrack = i + 1;
+-  memcpy (&foo, d->private->sg_buffer+2, 4);
+-  memcpy (&bar, d->private->sg_buffer+6, 4);
++  memcpy (&foo, d->priv->sg_buffer+2, 4);
++  memcpy (&bar, d->priv->sg_buffer+6, 4);
+   d->disc_toc[i].dwStartSector = d->adjust_ssize * (be32_to_cpu(foo) +
+ 						    be32_to_cpu(bar));
+ 
+   d->disc_toc[i].dwStartSector= d->adjust_ssize * 
+-    ((((signed char)(d->private->sg_buffer[2])<<24) | 
+-      (d->private->sg_buffer[3]<<16)|
+-      (d->private->sg_buffer[4]<<8)|
+-      (d->private->sg_buffer[5]))+
++    ((((signed char)(d->priv->sg_buffer[2])<<24) | 
++      (d->priv->sg_buffer[3]<<16)|
++      (d->priv->sg_buffer[4]<<8)|
++      (d->priv->sg_buffer[5]))+
+      
+-     ((((signed char)(d->private->sg_buffer[6])<<24) | 
+-       (d->private->sg_buffer[7]<<16)|
+-       (d->private->sg_buffer[8]<<8)|
+-       (d->private->sg_buffer[9]))));
++     ((((signed char)(d->priv->sg_buffer[6])<<24) | 
++       (d->priv->sg_buffer[7]<<16)|
++       (d->priv->sg_buffer[8]<<8)|
++       (d->priv->sg_buffer[9]))));
+ 
+ 
+   d->cd_extra = FixupTOC(d,tracks+1);
+@@ -817,7 +817,7 @@ static int i_read_28 (cdrom_drive *d, void *p, long begin, long sectors, unsigne
+   cmd[8] = sectors;
+   if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -836,7 +836,7 @@ static int i_read_A8 (cdrom_drive *d, void *p, long begin, long sectors, unsigne
+   cmd[9] = sectors;
+   if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -854,7 +854,7 @@ static int i_read_D4_10 (cdrom_drive *d, void *p, long begin, long sectors, unsi
+   cmd[8] = sectors;
+   if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -872,7 +872,7 @@ static int i_read_D4_12 (cdrom_drive *d, void *p, long begin, long sectors, unsi
+   cmd[9] = sectors;
+   if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -890,7 +890,7 @@ static int i_read_D5 (cdrom_drive *d, void *p, long begin, long sectors, unsigne
+   cmd[8] = sectors;
+   if((ret=handle_scsi_cmd(d,cmd,10,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -908,7 +908,7 @@ static int i_read_D8 (cdrom_drive *d, void *p, long begin, long sectors, unsigne
+   cmd[9] = sectors;
+   if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -922,7 +922,7 @@ static int i_read_mmc (cdrom_drive *d, void *p, long begin, long sectors, unsign
+   cmd[8] = sectors;
+   if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -936,7 +936,7 @@ static int i_read_mmcB (cdrom_drive *d, void *p, long begin, long sectors, unsig
+   cmd[8] = sectors;
+   if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -950,7 +950,7 @@ static int i_read_mmc2 (cdrom_drive *d, void *p, long begin, long sectors, unsig
+   cmd[8] = sectors;
+   if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -964,7 +964,7 @@ static int i_read_mmc2B (cdrom_drive *d, void *p, long begin, long sectors, unsi
+   cmd[8] = sectors;
+   if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -978,7 +978,7 @@ static int i_read_mmc3 (cdrom_drive *d, void *p, long begin, long sectors, unsig
+   cmd[8] = sectors;
+   if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -992,7 +992,7 @@ static int i_read_mmc3B (cdrom_drive *d, void *p, long begin, long sectors, unsi
+   cmd[8] = sectors;
+   if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -1026,7 +1026,7 @@ static int i_read_msf (cdrom_drive *d, void *p, long begin, long sectors, unsign
+ 
+   if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -1039,7 +1039,7 @@ static int i_read_msf2 (cdrom_drive *d, void *p, long begin, long sectors, unsig
+ 
+   if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -1052,7 +1052,7 @@ static int i_read_msf3 (cdrom_drive *d, void *p, long begin, long sectors, unsig
+   
+   if((ret=handle_scsi_cmd(d,cmd,12,0,sectors * CD_FRAMESIZE_RAW,'\177',1,sense)))
+     return(ret);
+-  if(p)memcpy(p,d->private->sg_buffer,sectors*CD_FRAMESIZE_RAW);
++  if(p)memcpy(p,d->priv->sg_buffer,sectors*CD_FRAMESIZE_RAW);
+   return(0);
+ }
+ 
+@@ -1275,7 +1275,7 @@ long scsi_read_msf3 (cdrom_drive *d, void *p, long begin,
+ static int count_2352_bytes(cdrom_drive *d){
+   long i;
+   for(i=2351;i>=0;i--)
+-    if(d->private->sg_buffer[i]!=(unsigned char)'\177')
++    if(d->priv->sg_buffer[i]!=(unsigned char)'\177')
+       return(((i+3)>>2)<<2);
+ 
+   return(0);
+@@ -1284,7 +1284,7 @@ static int count_2352_bytes(cdrom_drive *d){
+ static int verify_nonzero(cdrom_drive *d){
+   long i,flag=0;
+   for(i=0;i<2352;i++)
+-    if(d->private->sg_buffer[i]!=0){
++    if(d->priv->sg_buffer[i]!=0){
+       flag=1;
+       break;
+     }
+@@ -1625,7 +1625,7 @@ static int check_mmc(cdrom_drive *d){
+   d->is_mmc=0;
+   if(mode_sense(d,22,0x2A)==0){
+   
+-    b=d->private->sg_buffer;
++    b=d->priv->sg_buffer;
+     b+=b[3]+4;
+     
+     if((b[0]&0x3F)==0x2A){
+@@ -1673,7 +1673,7 @@ unsigned char *scsi_inquiry(cdrom_drive *d){
+     cderror(d,"008: Unable to identify CDROM model\n");
+     return(NULL);
+   }
+-  return (d->private->sg_buffer);
++  return (d->priv->sg_buffer);
+ }
+ 
+ int scsi_init_drive(cdrom_drive *d){
+@@ -1742,8 +1742,8 @@ int scsi_init_drive(cdrom_drive *d){
+   check_cache(d);
+ 
+   d->error_retry=1;
+-  d->private->sg_hd=realloc(d->private->sg_hd,d->nsectors*CD_FRAMESIZE_RAW + SG_OFF + 128);
+-  d->private->sg_buffer=((unsigned char *)d->private->sg_hd)+SG_OFF;
++  d->priv->sg_hd=realloc(d->priv->sg_hd,d->nsectors*CD_FRAMESIZE_RAW + SG_OFF + 128);
++  d->priv->sg_buffer=((unsigned char *)d->priv->sg_hd)+SG_OFF;
+   d->report_all=1;
+   return(0);
+ }
+diff --git a/interface/test_interface.c b/interface/test_interface.c
+index 11bec25..e1cefaa 100644
+--- a/interface/test_interface.c
++++ b/interface/test_interface.c
+@@ -66,9 +66,9 @@ static long test_read(cdrom_drive *d, void *p, long begin, long sectors){
+   if(!fd)fd=fdopen(d->cdda_fd,"r");
+ 
+   if(begin<lastread)
+-    d->private->last_milliseconds=20;
++    d->priv->last_milliseconds=20;
+   else
+-    d->private->last_milliseconds=sectors;
++    d->priv->last_milliseconds=sectors;
+ 
+ #ifdef CDDA_TEST_UNDERRUN
+   sectors-=1;
+-- 
+1.9.1
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/coriander/coriander/cross-compile.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/coriander/coriander/cross-compile.patch
new file mode 100644
index 0000000..49350fe
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/coriander/coriander/cross-compile.patch
@@ -0,0 +1,17 @@
+In a cross compile environment adding paths like /usr are not correct.
+With this patch we make it so that its relative to sysroot if the compiler
+defines one.
+
+Upstream-Status: Pending
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Index: a/src/Makefile.am
+===================================================================
+--- a/src/Makefile.am	2013-02-08 22:35:08.000000000 -0800
++++ b/src/Makefile.am	2013-10-13 01:31:38.812869080 -0700
+@@ -33,5 +33,5 @@
+ 	video_encode.c video_encode.h \
+ 	subtitles.c subtitles.h 
+ 
+-coriander_LDADD = -L/usr/X11R6/lib/ @PACKAGE_LIBS@ $(INTLLIBS) $(LIBTIFF_LIBS) $(FTPLIB_LIBS) $(SDLLIB_LIBS) $(LIBDC_LIBS) $(LIBRAW_LIBS) $(XV_LIBS) $(COR_LFS_LDFLAGS) -lgthread-2.0 $(FFMPEG_LIBS) $(X11_LIBS)
++coriander_LDADD = -L=/usr/X11R6/lib/ @PACKAGE_LIBS@ $(INTLLIBS) $(LIBTIFF_LIBS) $(FTPLIB_LIBS) $(SDLLIB_LIBS) $(LIBDC_LIBS) $(LIBRAW_LIBS) $(XV_LIBS) $(COR_LFS_LDFLAGS) -lgthread-2.0 $(FFMPEG_LIBS) $(X11_LIBS)
+ 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/coriander/coriander_2.0.2.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/coriander/coriander_2.0.2.bb
new file mode 100755
index 0000000..a9f52ca
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/coriander/coriander_2.0.2.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Control and capture GUI for IIDC compliant cameras"
+HOMEPAGE = "http://damien.douxchamps.net/ieee1394/coriander/"
+SECTION = "applications"
+LICENSE = "GPL-3.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=d32239bcb673463ab874e80d47fae504"
+DEPENDS = "gtk+ libgnomeui libraw1394 libdc1394 libxv tiff"
+
+PNBLACKLIST[coriander] ?= "BROKEN: fails to use SDL probably because libsdl-config was removed, error: unknown type name 'SDL_Overlay'"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/project/${BPN}/coriander-2/${PV}/${BP}.tar.gz \
+           file://cross-compile.patch \
+          "
+
+SRC_URI[md5sum] = "431d98fb013217681f97ade168201fb8"
+SRC_URI[sha256sum] = "5c7fd31cb58d398e2742352bf1ffbd2ca22e06686c6668ecfd437735c2b79123"
+
+inherit autotools gettext
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-connector-dbus_0.3.0.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-connector-dbus_0.3.0.bb
new file mode 100644
index 0000000..f23bc6c
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-connector-dbus_0.3.0.bb
@@ -0,0 +1,18 @@
+SUMMARY = "D-Bus connector for dLeyna libraries"
+HOMEPAGE = "https://01.org/dleyna/"
+
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+                    file://src/connector-dbus.c;endline=21;md5=0a1695cef53beefc36651de439f643b5"
+
+DEPENDS = "glib-2.0 dbus dleyna-core"
+
+SRC_URI = "git://github.com/01org/${BPN}.git"
+SRCREV = "de913c35e5c936e2d40ddbd276ee902cd802bd3a"
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+FILES_${PN} += "${libdir}/dleyna-1.0/connectors/*.so"
+FILES_${PN}-dev += "${libdir}/dleyna-1.0/connectors/*.la"
+FILES_${PN}-dbg += "${libdir}/dleyna-1.0/connectors/.debug/*.so"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-core_0.6.0.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-core_0.6.0.bb
new file mode 100644
index 0000000..a3b2793
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-core_0.6.0.bb
@@ -0,0 +1,18 @@
+SUMMARY = "Utility functions for dLeyna libraries"
+DESCRIPTION = "dleyna-core is a library of utility functions that are used \
+by the higher level dLeyna libraries that communicate with DLNA devices, \
+e.g., dleyna-server. In brief, it provides APIs for logging, error, settings \
+and task management and an IPC asbstraction API."
+HOMEPAGE = "https://01.org/dleyna/"
+
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+                    file://libdleyna/core/core.c;endline=21;md5=139cba0c634344abc9456694fbb5083b"
+
+DEPENDS = "glib-2.0 gupnp"
+
+SRC_URI = "git://github.com/01org/${BPN}.git"
+SRCREV = "27a3786ec013f64fd58243410a60798f824acec3"
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-renderer_0.6.0.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-renderer_0.6.0.bb
new file mode 100644
index 0000000..b30aee9
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-renderer_0.6.0.bb
@@ -0,0 +1,23 @@
+SUMMARY = "DLNA renderer libraries"
+DESCRIPTION = "dleyna-renderer is a library for implementing services \
+that allow clients to discover and manipulate Digital Media Renderers. \
+An implementation of such a service for linux is also included."
+HOMEPAGE = "https://01.org/dleyna/"
+
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+                    file://libdleyna/renderer/server.c;endline=21;md5=f51acd4757fb6a779a87122c43cf1346"
+
+DEPENDS = "glib-2.0 gssdp gupnp gupnp-av gupnp-dlna libsoup-2.4 dleyna-core"
+RDEPENDS_${PN} = "dleyna-connector-dbus"
+
+SRC_URI = "git://github.com/01org/${BPN}.git"
+SRCREV = "50fd1ec9d51328e7dea98874129dc8d6fe3ea1dd"
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+CFLAGS += " -I${S}"
+
+FILES_${PN} += "${datadir}/dbus-1"
+FILES_${PN}-dev += "${libdir}/${PN}/*.so"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-server_0.6.0.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-server_0.6.0.bb
new file mode 100644
index 0000000..ae16765
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/dleyna-server_0.6.0.bb
@@ -0,0 +1,21 @@
+SUMMARY = "DLNA server libraries"
+DESCRIPTION = "dleyna-server is a library for implementing services that \
+allow clients to discover, browse and manipulate Digital Media Servers. \
+An implementation of such a service for linux is also included."
+HOMEPAGE = "https://01.org/dleyna/"
+
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+                    file://libdleyna/server/server.c;endline=22;md5=dfa6dc3f914206c2408c0510c234f8c8"
+
+DEPENDS = "glib-2.0 gssdp gupnp gupnp-av gupnp-dlna libsoup-2.4 libxml2 dleyna-core"
+RDEPENDS_${PN} = "dleyna-connector-dbus"
+
+SRC_URI = "git://github.com/01org/${BPN}.git"
+SRCREV = "38651783914c76bd861f7fe8651b25e3986d7be8"
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+FILES_${PN} += "${datadir}/dbus-1"
+FILES_${PN}-dev += "${libdir}/${PN}/*.so"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/media-service-upnp_0.5.0.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/media-service-upnp_0.5.0.bb
new file mode 100644
index 0000000..baaf42b
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/media-service-upnp_0.5.0.bb
@@ -0,0 +1,24 @@
+SUMMARY = "discover, browse and search UPNP/DLNA media servers"
+HOMEPAGE = "https://01.org/dleyna/"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+                    file://src/media-service-upnp.c;beginline=1;endline=21;md5=584eb103b4f6f3432c43d169b6a123a1"
+
+DEPENDS = "dbus glib-2.0 gssdp gupnp gupnp-av gupnp-dlna libsoup-2.4"
+
+SRC_URI = "git://github.com/01org/${BPN}.git"
+SRCREV = "0dbc74a79aa07a8f8c7d32e1d2de6c4d3a0f95bc"
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+do_install_append() {
+    install -d ${D}${bindir}
+    install -m 0755 dms-info ${D}${bindir}
+}
+
+PACKAGES =+ "${PN}-tests"
+
+FILES_${PN} += "${datadir}/dbus-1/services/*.service"
+FILES_${PN}-tests = "${bindir}/dms-info"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/renderer-service-upnp_0.3.0.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/renderer-service-upnp_0.3.0.bb
new file mode 100644
index 0000000..68d59fa
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/dleyna/renderer-service-upnp_0.3.0.bb
@@ -0,0 +1,29 @@
+SUMMARY = "discover and manipulate UPNP/DLNA media renderers"
+HOMEPAGE = "https://01.org/dleyna/"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \
+                    file://src/renderer-service-upnp.c;beginline=1;endline=21;md5=c25c3082684eb4ca87474b7528c6dc15"
+
+PNBLACKLIST[renderer-service-upnp] ?= "BROKEN: doesn't build with B!=S (trying to install rendererconsole.py from ${B} instead of ${S})"
+
+DEPENDS = "dbus glib-2.0 gssdp gupnp gupnp-av gupnp-dlna libsoup-2.4"
+
+SRC_URI = "git://github.com/01org/${BPN}.git"
+SRCREV = "4a0b1d7cd8e22d3cb0e09c77c344ceccbcbbd34f"
+S = "${WORKDIR}/git"
+
+inherit autotools pkgconfig
+
+do_install_append() {
+    install -d ${D}${bindir}
+    install -m 0755 test/rendererconsole.py ${D}${bindir}
+}
+
+PACKAGES =+ "${PN}-tests"
+
+RDEPENDS_${PN}-tests = "python-dbus python-json python-misc python-pkgutil python-xml"
+
+FILES_${PN} += "${datadir}/dbus-1/services/*.service"
+# When we have GI, package cap
+FILES_${PN}-tests = "${bindir}/rendererconsole.py"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/faac/faac_1.28.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/faac/faac_1.28.bb
new file mode 100644
index 0000000..d96c1a4
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/faac/faac_1.28.bb
@@ -0,0 +1,21 @@
+SUMMARY = "Freeware Advanced Audio Coder (MPEG2-AAC, MPEG4-AAC)"
+SECTION = "libs"
+LICENSE = "LGPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7 \
+                    file://libfaac/coder.h;beginline=5;endline=17;md5=fa1fd6a5fa8cdc877d63a12530d273e0"
+
+inherit autotools-brokensep
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/faac/${BP}.tar.gz \
+           file://build-fix.patch"
+
+SRC_URI[md5sum] = "80763728d392c7d789cde25614c878f6"
+SRC_URI[sha256sum] = "c5141199f4cfb17d749c36ba8cfe4b25f838da67c22f0fec40228b6b9c3d19df"
+
+PACKAGES =+ "lib${BPN} lib${BPN}-dev"
+
+FILES_${PN} = " ${bindir}/faac "
+FILES_lib${PN} = " ${libdir}/libfaac.so.*"
+FILES_lib${PN}-dev = "${includedir}/faac.h ${includedir}/faaccfg.h ${libdir}/libfaac.so ${libdir}/libfaac.la"
+FILES_lib${PN}-staticdev = "${libdir}/libfaac.a"
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/faac/files/build-fix.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/faac/files/build-fix.patch
new file mode 100644
index 0000000..83cff8f
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/faac/files/build-fix.patch
@@ -0,0 +1,332 @@
+Patch fixing build error and warnings. Error consisted of redefining
+strcasestr function from string.h. Warnings consisted of deprecated conversions
+of string constants to char*, using '%llu' for type uint64_t (which on 64 bit
+systems, is defined as unsigned long int by stdint.h), and using '==' for
+equality of two strings.
+
+Patch originally from Debian.
+
+Upstream-Status: Pending
+
+==========================================================================
+--- a/common/mp4v2/mpeg4ip.h
++++ b/common/mp4v2/mpeg4ip.h
+@@ -120,14 +120,6 @@
+ #endif
+ #include <sys/param.h>
+ 
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-char *strcasestr(const char *haystack, const char *needle);
+-#ifdef __cplusplus
+-}
+-#endif
+-
+ #define OPEN_RDWR O_RDWR
+ #define OPEN_CREAT O_CREAT 
+ #define OPEN_RDONLY O_RDONLY
+@@ -135,7 +127,6 @@
+ #define closesocket close
+ #define IOSBINARY ios::bin
+ 
+-#if SIZEOF_LONG == 8
+ #define MAX_UINT64 -1LU
+ #define D64F "ld"
+ #define U64F  "lu"
+@@ -143,15 +134,6 @@
+ 
+ #define TO_D64(a) (a##L)
+ #define TO_U64(a) (a##LU)
+-#else
+-#define MAX_UINT64 -1LLU
+-#define D64F "lld"
+-#define U64F  "llu"
+-#define X64F "llx"
+-
+-#define TO_D64(a) (a##LL)
+-#define TO_U64(a) (a##LLU)
+-#endif
+ 
+ #ifdef HAVE_FPOS_T___POS
+ #define FPOS_TO_VAR(fpos, typed, var) (var) = (typed)((fpos).__pos)
+--- a/configure.in
++++ b/configure.in
+@@ -4,6 +4,9 @@
+ AM_INIT_AUTOMAKE
+ 
+ AM_CONFIG_HEADER(config.h)
++AH_TOP([#ifndef CONFIG_H
++#define CONFIG_H])
++AH_BOTTOM([#endif /* CONFIG_H */])
+ 
+ AC_ARG_WITH( mp4v2,  [  --with-mp4v2            compile libmp4v2],WITHMP4V2=$withval, WITHMP4V2=yes)
+ AC_ARG_ENABLE( drm,  [  --enable-drm            Digital Radio Mondiale support], enable_drm=$enableval, enable_drm=no)
+--- a/common/mp4v2/atom_avcC.cpp
++++ b/common/mp4v2/atom_avcC.cpp
+@@ -29,7 +29,7 @@
+ class SizeTableProperty : public MP4TableProperty 
+ {
+  public:
+-  SizeTableProperty(char *name, MP4IntegerProperty *pCountProperty) :
++  SizeTableProperty(const char *name, MP4IntegerProperty *pCountProperty) :
+     MP4TableProperty(name, pCountProperty) {};
+  protected:
+   void ReadEntry(MP4File *pFile, u_int32_t index) {
+--- a/common/mp4v2/atom_ohdr.cpp
++++ b/common/mp4v2/atom_ohdr.cpp
+@@ -21,7 +21,7 @@
+       \param useCountedFormat    counted format flag.
+       \param useUnicode          unicode flag.
+   */
+-	OhdrMP4StringProperty(char* name, bool useCountedFormat = false,
++	OhdrMP4StringProperty(const char* name, bool useCountedFormat = false,
+     bool useUnicode = false): MP4StringProperty(name, useCountedFormat,
+     useUnicode) {
+   }
+--- a/common/mp4v2/atom_stz2.cpp
++++ b/common/mp4v2/atom_stz2.cpp
+@@ -30,7 +30,7 @@
+ class MP4HalfSizeTableProperty : public MP4TableProperty
+ {
+ public:
+-  MP4HalfSizeTableProperty(char *name, MP4IntegerProperty *pCountProperty) :
++  MP4HalfSizeTableProperty(const char *name, MP4IntegerProperty *pCountProperty) :
+     MP4TableProperty(name, pCountProperty) {};
+ 
+   // The count is half the actual size
+--- a/common/mp4v2/mp4atom.cpp
++++ b/common/mp4v2/mp4atom.cpp
+@@ -806,7 +806,7 @@
+ 	AddProperty(new MP4Integer24Property("flags"));
+ }
+ 
+-void MP4Atom::AddReserved(char* name, u_int32_t size) 
++void MP4Atom::AddReserved(const char* name, u_int32_t size)
+ {
+ 	MP4BytesProperty* pReserved = new MP4BytesProperty(name, size); 
+ 	pReserved->SetReadOnly();
+--- a/common/mp4v2/mp4atom.h
++++ b/common/mp4v2/mp4atom.h
+@@ -204,7 +204,7 @@
+ 
+ 	void AddVersionAndFlags();
+ 
+-	void AddReserved(char* name, u_int32_t size);
++	void AddReserved(const char* name, u_int32_t size);
+ 
+ 	void ExpectChildAtom(const char* name, 
+ 		bool mandatory, bool onlyOne = true);
+--- a/common/mp4v2/mp4file.cpp
++++ b/common/mp4v2/mp4file.cpp
+@@ -718,7 +718,7 @@
+ 	}
+ }
+ 
+-void MP4File::ProtectWriteOperation(char* where)
++void MP4File::ProtectWriteOperation(const char* where)
+ {
+ 	if (m_mode == 'r') {
+ 		throw new MP4Error("operation not permitted in read mode", where);
+@@ -1274,7 +1274,7 @@
+ }
+ 
+ // NULL terminated list of brands which require the IODS atom
+-char *brandsWithIods[] = { "mp42",
++const char *brandsWithIods[] = { "mp42",
+                            "isom",
+                            NULL};
+ 
+@@ -2211,11 +2211,11 @@
+ 	for (u_int32_t i = 0; i < m_pTracks.Size(); i++) {
+ 		if (!strcmp(normType, m_pTracks[i]->GetType())) {
+ 			if (subType) {
+-				if (normType == MP4_AUDIO_TRACK_TYPE) {
++				if (!strcmp(normType,MP4_AUDIO_TRACK_TYPE)) {
+ 					if (subType != GetTrackEsdsObjectTypeId(m_pTracks[i]->GetId())) {
+ 						continue;
+ 					}
+-				} else if (normType == MP4_VIDEO_TRACK_TYPE) {
++				} else if (!strcmp(normType,MP4_VIDEO_TRACK_TYPE)) {
+ 					if (subType != GetTrackEsdsObjectTypeId(m_pTracks[i]->GetId())) {
+ 						continue;
+ 					}
+@@ -2278,11 +2278,11 @@
+   for (u_int32_t i = 0; i < m_pTracks.Size(); i++) {
+     if (!strcmp(normType, m_pTracks[i]->GetType())) {
+       if (subType) {
+-	if (normType == MP4_AUDIO_TRACK_TYPE) {
++	if (!strcmp(normType,MP4_AUDIO_TRACK_TYPE)) {
+ 	  if (subType != GetTrackEsdsObjectTypeId(m_pTracks[i]->GetId())) {
+ 	    continue;
+ 	  }
+-	} else if (normType == MP4_VIDEO_TRACK_TYPE) {
++	} else if (!strcmp(normType,MP4_VIDEO_TRACK_TYPE)) {
+ 	  if (subType != GetTrackEsdsObjectTypeId(m_pTracks[i]->GetId())) {
+ 	    continue;
+ 	  }
+--- a/common/mp4v2/mp4file.h
++++ b/common/mp4v2/mp4file.h
+@@ -700,7 +700,7 @@
+ 	const char* TempFileName();
+ 	void Rename(const char* existingFileName, const char* newFileName);
+ 
+-	void ProtectWriteOperation(char* where);
++	void ProtectWriteOperation(const char* where);
+ 
+ 	void FindIntegerProperty(const char* name, 
+ 		MP4Property** ppProperty, u_int32_t* pIndex = NULL);
+--- a/common/mp4v2/mp4property.cpp
++++ b/common/mp4v2/mp4property.cpp
+@@ -313,7 +313,7 @@
+ 
+ // MP4StringProperty
+ 
+-MP4StringProperty::MP4StringProperty(char* name, 
++MP4StringProperty::MP4StringProperty(const char* name,
+ 	bool useCountedFormat, bool useUnicode)
+ 	: MP4Property(name)
+ {
+@@ -420,7 +420,7 @@
+ 
+ // MP4BytesProperty
+ 
+-MP4BytesProperty::MP4BytesProperty(char* name, u_int32_t valueSize,
++MP4BytesProperty::MP4BytesProperty(const char* name, u_int32_t valueSize,
+                                    u_int32_t defaultValueSize)
+ 	: MP4Property(name)
+ {
+@@ -549,7 +549,7 @@
+ 
+ // MP4TableProperty
+ 
+-MP4TableProperty::MP4TableProperty(char* name, MP4IntegerProperty* pCountProperty)
++MP4TableProperty::MP4TableProperty(const char* name, MP4IntegerProperty* pCountProperty)
+ 	: MP4Property(name) 
+ {
+ 	m_pCountProperty = pCountProperty;
+@@ -725,7 +725,7 @@
+ 
+ // MP4DescriptorProperty
+   
+-MP4DescriptorProperty::MP4DescriptorProperty(char* name, 
++MP4DescriptorProperty::MP4DescriptorProperty(const char* name,
+ 	u_int8_t tagsStart, u_int8_t tagsEnd, bool mandatory, bool onlyOne)
+ 	: MP4Property(name) 
+ { 
+--- a/common/mp4v2/mp4property.h
++++ b/common/mp4v2/mp4property.h
+@@ -100,7 +100,7 @@
+ 
+ class MP4IntegerProperty : public MP4Property {
+ protected:
+-	MP4IntegerProperty(char* name)
++	MP4IntegerProperty(const char* name)
+ 		: MP4Property(name) { };
+ 
+ public:
+@@ -118,7 +118,7 @@
+ #define MP4INTEGER_PROPERTY_DECL2(isize, xsize) \
+ 	class MP4Integer##xsize##Property : public MP4IntegerProperty { \
+ 	public: \
+-		MP4Integer##xsize##Property(char* name) \
++		MP4Integer##xsize##Property(const char* name) \
+ 			: MP4IntegerProperty(name) { \
+ 			SetCount(1); \
+ 			m_values[0] = 0; \
+@@ -188,7 +188,7 @@
+ 
+ class MP4BitfieldProperty : public MP4Integer64Property {
+ public:
+-	MP4BitfieldProperty(char* name, u_int8_t numBits)
++	MP4BitfieldProperty(const char* name, u_int8_t numBits)
+ 		: MP4Integer64Property(name) {
+ 		ASSERT(numBits != 0);
+ 		ASSERT(numBits <= 64);
+@@ -213,7 +213,7 @@
+ 
+ class MP4Float32Property : public MP4Property {
+ public:
+-	MP4Float32Property(char* name)
++	MP4Float32Property(const char* name)
+ 		: MP4Property(name) {
+ 		m_useFixed16Format = false;
+ 		m_useFixed32Format = false;
+@@ -280,7 +280,7 @@
+ 
+ class MP4StringProperty : public MP4Property {
+ public:
+-	MP4StringProperty(char* name, 
++	MP4StringProperty(const char* name,
+ 	  bool useCountedFormat = false, bool useUnicode = false);
+ 
+ 	~MP4StringProperty();
+@@ -355,7 +355,7 @@
+ 
+ class MP4BytesProperty : public MP4Property {
+ public:
+-	MP4BytesProperty(char* name, u_int32_t valueSize = 0,
++	MP4BytesProperty(const char* name, u_int32_t valueSize = 0,
+                          u_int32_t defaultValueSize = 0);
+ 
+ 	~MP4BytesProperty();
+@@ -419,7 +419,7 @@
+ 
+ class MP4TableProperty : public MP4Property {
+ public:
+-	MP4TableProperty(char* name, MP4IntegerProperty* pCountProperty);
++	MP4TableProperty(const char* name, MP4IntegerProperty* pCountProperty);
+ 
+ 	~MP4TableProperty();
+ 
+@@ -469,7 +469,7 @@
+ 
+ class MP4DescriptorProperty : public MP4Property {
+ public:
+-	MP4DescriptorProperty(char* name = NULL, 
++	MP4DescriptorProperty(const char* name = NULL,
+ 	  u_int8_t tagsStart = 0, u_int8_t tagsEnd = 0,
+ 	  bool mandatory = false, bool onlyOne = false);
+ 
+@@ -531,7 +531,7 @@
+ 
+ class MP4QosQualifierProperty : public MP4DescriptorProperty {
+ public:
+-	MP4QosQualifierProperty(char* name = NULL, 
++	MP4QosQualifierProperty(const char* name = NULL,
+ 	  u_int8_t tagsStart = 0, u_int8_t tagsEnd = 0,
+ 	  bool mandatory = false, bool onlyOne = false) :
+ 	MP4DescriptorProperty(name, tagsStart, tagsEnd, mandatory, onlyOne) { }
+--- a/common/mp4v2/mp4track.cpp
++++ b/common/mp4v2/mp4track.cpp
+@@ -1360,7 +1360,7 @@
+   }
+ }
+ 
+-MP4Atom* MP4Track::AddAtom(char* parentName, char* childName)
++MP4Atom* MP4Track::AddAtom(const char* parentName, const char* childName)
+ {
+ 	MP4Atom* pChildAtom = MP4Atom::CreateAtom(childName);
+ 
+--- a/common/mp4v2/mp4track.h
++++ b/common/mp4v2/mp4track.h
+@@ -168,7 +168,7 @@
+ 	void UpdateSyncSamples(MP4SampleId sampleId, 
+ 		bool isSyncSample);
+ 
+-	MP4Atom* AddAtom(char* parentName, char* childName);
++	MP4Atom* AddAtom(const char* parentName, const char* childName);
+ 
+ 	void UpdateDurations(MP4Duration duration);
+ 	MP4Duration ToMovieDuration(MP4Duration trackDuration);
+--- a/common/mp4v2/ocidescriptors.cpp
++++ b/common/mp4v2/ocidescriptors.cpp
+@@ -171,7 +171,7 @@
+ 
+ class MP4CreatorTableProperty : public MP4TableProperty {
+ public:
+-	MP4CreatorTableProperty(char* name, MP4Integer8Property* pCountProperty) :
++	MP4CreatorTableProperty(const char* name, MP4Integer8Property* pCountProperty) :
+ 		MP4TableProperty(name, pCountProperty) {
+ 	};
+ protected:
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/fluidsynth/fluidsynth_1.1.6.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/fluidsynth/fluidsynth_1.1.6.bb
new file mode 100644
index 0000000..54e8697
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/fluidsynth/fluidsynth_1.1.6.bb
@@ -0,0 +1,23 @@
+SUMMARY = "Fluidsynth is a software synthesizer"
+HOMEPAGE = "http://www.fluidsynth.org/"
+SECTION = "libs/multimedia"
+LICENSE = "LGPL-2.0+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=e198e9aac94943d0ec29a7dae8c29416"
+
+DEPENDS = "alsa-lib ncurses glib-2.0"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/project/${BPN}/${BP}/${BP}.tar.gz"
+SRC_URI[md5sum] = "ae5aca6de824b4173667cbd3a310b263"
+SRC_URI[sha256sum] = "50853391d9ebeda9b4db787efb23f98b1e26b7296dd2bb5d0d96b5bccee2171c"
+
+inherit autotools-brokensep pkgconfig lib_package
+
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', 'pulseaudio', '', d)}"
+PACKAGECONFIG[sndfile] = "--enable-libsndfile-support,--disable-libsndfile-support,libsndfile1"
+PACKAGECONFIG[jack] = "--enable-jack-support,--disable-jack-support,jack"
+PACKAGECONFIG[pulseaudio] = "--enable-pulse-support,--disable-pulse-support,pulseaudio"
+PACKAGECONFIG[portaudio] = "--enable-portaudio-support,--disable-portaudio-support,portaudio-v19"
+
+do_configure_prepend () {
+    rm -f ${S}/m4/*
+}
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-aacdec-check-channel-count.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-aacdec-check-channel-count.patch
new file mode 100644
index 0000000..7da0e14
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-aacdec-check-channel-count.patch
@@ -0,0 +1,34 @@
+gst-ffmpeg: aacdec: check channel count
+
+Prevent out of array accesses
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit 96f452ac647dae33c53c242ef3266b65a9beafb6)
+
+Upstream-Status: Backport 
+
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+---
+ libavcodec/aacdec.c |    5 +++++
+ 1 files changed, 5 insertions(+), 0 deletions(-)
+
+diff --git a/libavcodec/aacdec.c b/libavcodec/aacdec.c
+index 239153a..6c17c33 100644
+--- a/gst-libs/ext/libav/libavcodec/aacdec.c
++++ b/gst-libs/ext/libav/libavcodec/aacdec.c
+@@ -914,6 +914,11 @@ static av_cold int aac_decode_init(AVCodecContext *avctx)
+         }
+     }
+ 
++    if (avctx->channels > MAX_CHANNELS) {
++        av_log(avctx, AV_LOG_ERROR, "Too many channels\n");
++        return AVERROR_INVALIDDATA;
++    }
++
+     AAC_INIT_VLC_STATIC( 0, 304);
+     AAC_INIT_VLC_STATIC( 1, 270);
+     AAC_INIT_VLC_STATIC( 2, 550);
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-alac-fix-nb_samples-order-case.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-alac-fix-nb_samples-order-case.patch
new file mode 100644
index 0000000..10ce0f3
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-alac-fix-nb_samples-order-case.patch
@@ -0,0 +1,30 @@
+From e0884eadf6a15e93142131b695f48776f9a0ac31 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Sat, 10 Nov 2012 17:14:04 +0100
+Subject: [PATCH] alac: fix nb_samples < order case
+
+Upstream-Status: Backport
+
+Commit e0884eadf6a15e93142131b695f48776f9a0ac31 release/1.0
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit fd4f4923cce6a2cbf4f48640b4ac706e614a1594)
+---
+ libavcodec/alac.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libavcodec/alac.c b/libavcodec/alac.c
+index 9cd1737..e8e844a 100644
+--- a/gst-libs/ext/libav/libavcodec/alac.c
++++ b/gst-libs/ext/libav/libavcodec/alac.c
+@@ -278,7 +278,7 @@ static void predictor_decompress_fir_ada
+ 
+     /* read warm-up samples */
+     if (predictor_coef_num > 0)
+-        for (i = 0; i < predictor_coef_num; i++) {
++        for (i = 0; i < predictor_coef_num && i < output_size; i++) {
+             int32_t val;
+ 
+             val = buffer_out[i] + error_buffer[i+1];
+-- 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-alsdec-check-block-length.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-alsdec-check-block-length.patch
new file mode 100644
index 0000000..73980f4
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-alsdec-check-block-length.patch
@@ -0,0 +1,61 @@
+From 6df0d3e2916c223dbe4262bf1b876dff1cb3f980 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Wed, 12 Dec 2012 12:28:45 +0100
+Subject: [PATCH] alsdec: check block length
+
+Upstream-Status: Backport
+
+Commit 6df0d3e2916c223dbe4262bf1b876dff1cb3f980 release/1.0
+
+Fix writing over the end
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit 0ceca269b66ec12a23bf0907bd2c220513cdbf16)
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/alsdec.c | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/libavcodec/alsdec.c b/libavcodec/alsdec.c
+index 46dd0b4..1095b01 100644
+--- a/gst-libs/ext/libav/libavcodec/alsdec.c
++++ b/gst-libs/ext/libav/libavcodec/alsdec.c
+@@ -552,12 +552,15 @@ static void get_block_sizes(ALSDecContext *ctx, unsigned int *div_blocks,
+ 
+ /** Read the block data for a constant block
+  */
+-static void read_const_block_data(ALSDecContext *ctx, ALSBlockData *bd)
++static int read_const_block_data(ALSDecContext *ctx, ALSBlockData *bd)
+ {
+     ALSSpecificConfig *sconf = &ctx->sconf;
+     AVCodecContext *avctx    = ctx->avctx;
+     GetBitContext *gb        = &ctx->gb;
+ 
++    if (bd->block_length <= 0)
++        return -1;
++
+     *bd->raw_samples = 0;
+     *bd->const_block = get_bits1(gb);    // 1 = constant value, 0 = zero block (silence)
+     bd->js_blocks    = get_bits1(gb);
+@@ -572,6 +575,8 @@ static void read_const_block_data(ALSDecContext *ctx, ALSBlockData *bd)
+ 
+     // ensure constant block decoding by reusing this field
+     *bd->const_block = 1;
++
++    return 0;
+ }
+ 
+ 
+@@ -971,7 +976,8 @@ static int read_block(ALSDecContext *ctx, ALSBlockData *bd)
+         if (read_var_block_data(ctx, bd))
+             return -1;
+     } else {
+-        read_const_block_data(ctx, bd);
++        if (read_const_block_data(ctx, bd) < 0)
++            return -1;
+     }
+ 
+     return 0;
+-- 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-atrac3dec-Check-coding-mode-against-channels.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-atrac3dec-Check-coding-mode-against-channels.patch
new file mode 100644
index 0000000..42cb5f4
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-atrac3dec-Check-coding-mode-against-channels.patch
@@ -0,0 +1,37 @@
+From 2502914c5f8eb77659d7c0868396862557a63245 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Fri, 9 Nov 2012 13:26:20 +0100
+Subject: [PATCH] atrac3dec: Check coding mode against channels.
+
+Upstream-Status: Backport
+
+Commit 2502914c5f8eb77659d7c0868396862557a63245 release/1.0
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit 13451f5520ce6b0afde861b2285dda659f8d4fb4)
+
+Conflicts:
+
+	libavcodec/atrac3.c
+---
+ libavcodec/atrac3.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/libavcodec/atrac3.c b/libavcodec/atrac3.c
+index 7d076be..1da4c78 100644
+--- a/gst-libs/ext/libav/libavcodec/atrac3.c
++++ b/gst-libs/ext/libav/libavcodec/atrac3.c
+@@ -955,6 +955,11 @@ static av_cold int atrac3_decode_init(AVCodecContext *avctx)
+     }
+     /* Check the extradata. */
+ 
++    if (q->codingMode == JOINT_STEREO && avctx->channels < 2) {
++        av_log(avctx, AV_LOG_ERROR, "Invalid coding mode\n");
++        return AVERROR_INVALIDDATA;
++    }
++
+     if (q->atrac3version != 4) {
+         av_log(avctx,AV_LOG_ERROR,"Version %d != 4.\n",q->atrac3version);
+         return AVERROR_INVALIDDATA;
+-- 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-dsputil-fix-signedness-in-sizeof-comparissio.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-dsputil-fix-signedness-in-sizeof-comparissio.patch
new file mode 100644
index 0000000..31fa51a
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-dsputil-fix-signedness-in-sizeof-comparissio.patch
@@ -0,0 +1,40 @@
+From a99aff4e4bbef8e64b51f267cd1769214e1b4e80 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Fri, 30 Aug 2013 23:40:47 +0200
+Subject: [PATCH] avcodec/dsputil: fix signedness in sizeof() comparissions
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit 454a11a1c9c686c78aa97954306fb63453299760)
+
+Upstream-Status: Backport
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/dsputil.c |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/libavcodec/dsputil.c b/libavcodec/dsputil.c
+index 53dc2eb..6264832 100644
+--- a/gst-libs/ext/libav/libavcodec/dsputil.c
++++ b/gst-libs/ext/libav/libavcodec/dsputil.c
+@@ -1912,7 +1912,7 @@ void ff_set_cmp(DSPContext* c, me_cmp_func *cmp, int type){
+ 
+ static void add_bytes_c(uint8_t *dst, uint8_t *src, int w){
+     long i;
+-    for(i=0; i<=w-sizeof(long); i+=sizeof(long)){
++    for(i=0; i<=w-(int)sizeof(long); i+=sizeof(long)){
+         long a = *(long*)(src+i);
+         long b = *(long*)(dst+i);
+         *(long*)(dst+i) = ((a&pb_7f) + (b&pb_7f)) ^ ((a^b)&pb_80);
+@@ -1937,7 +1937,7 @@ static void diff_bytes_c(uint8_t *dst, uint8_t *src1, uint8_t *src2, int w){
+         }
+     }else
+ #endif
+-    for(i=0; i<=w-sizeof(long); i+=sizeof(long)){
++    for(i=0; i<=w-(int)sizeof(long); i+=sizeof(long)){
+         long a = *(long*)(src1+i);
+         long b = *(long*)(src2+i);
+         *(long*)(dst+i) = ((a|pb_80) - (b&pb_7f)) ^ ((a^b^pb_80)&pb_80);
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-msrle-use-av_image_get_linesize-to-calculate.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-msrle-use-av_image_get_linesize-to-calculate.patch
new file mode 100644
index 0000000..b0a3fb1
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-msrle-use-av_image_get_linesize-to-calculate.patch
@@ -0,0 +1,50 @@
+From 573d5fdedae72bf59d8c0b0766fdee171063d36f Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Sun, 16 Feb 2014 23:08:52 +0100
+Subject: [PATCH] avcodec/msrle: use av_image_get_linesize() to calculate the
+ linesize
+
+Upstream-Status: Backport
+
+Commit 573d5fdedae72bf59d8c0b0766fdee171063d36f release/0.9
+
+Fixes out of array access
+Fixes: 14a74a0a2dc67ede543f0e35d834fbbe-asan_heap-oob_49572c_556_cov_215466444_44_001_engine_room.mov
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit c919e1ca2ecfc47d796382973ba0e48b8f6f92a2)
+
+Conflicts:
+
+	libavcodec/msrle.c
+(cherry picked from commit bc1c8ec5e65098fd2ccd8456f667151dfc9cda42)
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/msrle.c |    3 ++-
+ 1 files changed, 2 insertions(+), 1 deletions(-)
+
+diff --git a/libavcodec/msrle.c b/libavcodec/msrle.c
+index 30159bb..c39ae7b 100644
+--- a/gst-libs/ext/libav/libavcodec/msrle.c
++++ b/gst-libs/ext/libav/libavcodec/msrle.c
+@@ -35,6 +35,7 @@
+ #include "avcodec.h"
+ #include "dsputil.h"
+ #include "msrledec.h"
++#include "libavutil/imgutils.h"
+ 
+ typedef struct MsrleContext {
+     AVCodecContext *avctx;
+@@ -107,7 +108,7 @@ static int msrle_decode_frame(AVCodecContext *avctx,
+ 
+     /* FIXME how to correctly detect RLE ??? */
+     if (avctx->height * istride == avpkt->size) { /* assume uncompressed */
+-        int linesize = avctx->width * avctx->bits_per_coded_sample / 8;
++        int linesize = av_image_get_linesize(avctx->pix_fmt, avctx->width, 0);
+         uint8_t *ptr = s->frame.data[0];
+         uint8_t *buf = avpkt->data + (avctx->height-1)*istride;
+         int i, j;
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-parser-reset-indexes-on-realloc-failure.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-parser-reset-indexes-on-realloc-failure.patch
new file mode 100644
index 0000000..5ff6583
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-parser-reset-indexes-on-realloc-failure.patch
@@ -0,0 +1,50 @@
+gst-ffmpeg: avcodec/parser: reset indexes on realloc failure
+
+Fixes Ticket2982
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit f31011e9abfb2ae75bb32bc44e2c34194c8dc40a)
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+
+Upstream-Status: Backport 
+
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+
+---
+ libavcodec/parser.c |   10 +++++++---
+ 1 files changed, 7 insertions(+), 3 deletions(-)
+
+diff --git a/libavcodec/parser.c b/libavcodec/parser.c
+index 2c6de6e..66eca06 100644
+--- a/gst-libs/ext/libav/libavcodec/parser.c
++++ b/gst-libs/ext/libav/libavcodec/parser.c
+@@ -241,8 +241,10 @@ int ff_combine_frame(ParseContext *pc, int next, const uint8_t **buf, int *buf_s
+     if(next == END_NOT_FOUND){
+         void* new_buffer = av_fast_realloc(pc->buffer, &pc->buffer_size, (*buf_size) + pc->index + FF_INPUT_BUFFER_PADDING_SIZE);
+ 
+-        if(!new_buffer)
++        if(!new_buffer) {
++            pc->index = 0;
+             return AVERROR(ENOMEM);
++        }
+         pc->buffer = new_buffer;
+         memcpy(&pc->buffer[pc->index], *buf, *buf_size);
+         pc->index += *buf_size;
+@@ -255,9 +257,11 @@ int ff_combine_frame(ParseContext *pc, int next, const uint8_t **buf, int *buf_s
+     /* append to buffer */
+     if(pc->index){
+         void* new_buffer = av_fast_realloc(pc->buffer, &pc->buffer_size, next + pc->index + FF_INPUT_BUFFER_PADDING_SIZE);
+-
+-        if(!new_buffer)
++        if(!new_buffer) {
++            pc->overread_index =
++            pc->index = 0;
+             return AVERROR(ENOMEM);
++        }
+         pc->buffer = new_buffer;
+         if (next > -FF_INPUT_BUFFER_PADDING_SIZE)
+             memcpy(&pc->buffer[pc->index], *buf,
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-rpza-Perform-pointer-advance-and-checks-befo.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-rpza-Perform-pointer-advance-and-checks-befo.patch
new file mode 100644
index 0000000..7f6eb48
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-rpza-Perform-pointer-advance-and-checks-befo.patch
@@ -0,0 +1,81 @@
+gst-ffmpeg: avcodec/rpza: Perform pointer advance and checks before
+ using the pointers
+
+Fixes out of array accesses
+Fixes Ticket2850
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit 3819db745da2ac7fb3faacb116788c32f4753f34)
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+
+Upstream-Status: Backport 
+
+Singed-off-by: Yue Tao <yue.tao@windriver.com>
+
+---
+ libavcodec/rpza.c |    8 ++++----
+ 1 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/libavcodec/rpza.c b/libavcodec/rpza.c
+index 635b406..f291a95 100644
+--- a/gst-libs/ext/libav/libavcodec/rpza.c
++++ b/gst-libs/ext/libav/libavcodec/rpza.c
+@@ -83,7 +83,7 @@ static void rpza_decode_stream(RpzaContext *s)
+     unsigned short *pixels = (unsigned short *)s->frame.data[0];
+ 
+     int row_ptr = 0;
+-    int pixel_ptr = 0;
++    int pixel_ptr = -4;
+     int block_ptr;
+     int pixel_x, pixel_y;
+     int total_blocks;
+@@ -139,6 +139,7 @@ static void rpza_decode_stream(RpzaContext *s)
+             colorA = AV_RB16 (&s->buf[stream_ptr]);
+             stream_ptr += 2;
+             while (n_blocks--) {
++                ADVANCE_BLOCK()
+                 block_ptr = row_ptr + pixel_ptr;
+                 for (pixel_y = 0; pixel_y < 4; pixel_y++) {
+                     for (pixel_x = 0; pixel_x < 4; pixel_x++){
+@@ -147,7 +148,6 @@ static void rpza_decode_stream(RpzaContext *s)
+                     }
+                     block_ptr += row_inc;
+                 }
+-                ADVANCE_BLOCK();
+             }
+             break;
+ 
+@@ -184,6 +184,7 @@ static void rpza_decode_stream(RpzaContext *s)
+             color4[2] |= ((21 * ta + 11 * tb) >> 5);
+ 
+             while (n_blocks--) {
++                ADVANCE_BLOCK();
+                 block_ptr = row_ptr + pixel_ptr;
+                 for (pixel_y = 0; pixel_y < 4; pixel_y++) {
+                     index = s->buf[stream_ptr++];
+@@ -194,12 +195,12 @@ static void rpza_decode_stream(RpzaContext *s)
+                     }
+                     block_ptr += row_inc;
+                 }
+-                ADVANCE_BLOCK();
+             }
+             break;
+ 
+         /* Fill block with 16 colors */
+         case 0x00:
++            ADVANCE_BLOCK();
+             block_ptr = row_ptr + pixel_ptr;
+             for (pixel_y = 0; pixel_y < 4; pixel_y++) {
+                 for (pixel_x = 0; pixel_x < 4; pixel_x++){
+@@ -213,7 +214,6 @@ static void rpza_decode_stream(RpzaContext *s)
+                 }
+                 block_ptr += row_inc;
+             }
+-            ADVANCE_BLOCK();
+             break;
+ 
+         /* Unknown opcode */
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-smc-fix-off-by-1-error.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-smc-fix-off-by-1-error.patch
new file mode 100644
index 0000000..3ca6fc4
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avcodec-smc-fix-off-by-1-error.patch
@@ -0,0 +1,32 @@
+From c17a0ad1df15a94d0b1239adc2afb593bdf0a153 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Fri, 3 Oct 2014 22:50:45 +0200
+Subject: [PATCH 1/2] avcodec/smc: fix off by 1 error
+
+Upstream-Status: Backport
+
+Fixes out of array access
+Fixes: asan_heap-oob_1685bf0_5_asan_heap-oob_1f35116_430_smc.mov
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/smc.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/gst-libs/ext/libav/libavcodec/smc.c b/gst-libs/ext/libav/libavcodec/smc.c
+index 3cd5e53..dec9f71 100644
+--- a/gst-libs/ext/libav/libavcodec/smc.c
++++ b/gst-libs/ext/libav/libavcodec/smc.c
+@@ -69,7 +69,7 @@ typedef struct SmcContext {
+         row_ptr += stride * 4; \
+     } \
+     total_blocks--; \
+-    if (total_blocks < 0) \
++    if (total_blocks < 0 + !!n_blocks) \
+     { \
+         av_log(s->avctx, AV_LOG_INFO, "warning: block counter just went negative (this should not happen)\n"); \
+         return; \
+-- 
+2.1.0
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avformat-mpegtsenc-Check-data-array-size-in-mpegts_w.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avformat-mpegtsenc-Check-data-array-size-in-mpegts_w.patch
new file mode 100644
index 0000000..68bb66e
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-avformat-mpegtsenc-Check-data-array-size-in-mpegts_w.patch
@@ -0,0 +1,69 @@
+From 12770701856a05b6b3cd706f708f8e9a4e8a1336 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Thu, 13 Feb 2014 13:59:51 +0100
+Subject: [PATCH] avformat/mpegtsenc: Check data array size in
+ mpegts_write_pmt()
+
+Upstream-Status: Backport
+
+COmmit 12770701856a05b6b3cd706f708f8e9a4e8a1336 release/0.11
+
+Prevents out of array writes
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit 842b6c14bcfc1c5da1a2d288fd65386eb8c158ad)
+
+Conflicts:
+
+	libavformat/mpegtsenc.c
+(cherry picked from commit e87de3f50b765134588d0b048c32ed4b8acc16fb)
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavformat/mpegtsenc.c |    9 +++++++--
+ 1 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/libavformat/mpegtsenc.c b/libavformat/mpegtsenc.c
+index 793e205..a12d19f 100644
+--- a/gst-libs/ext/libav/libavformat/mpegtsenc.c
++++ b/gst-libs/ext/libav/libavformat/mpegtsenc.c
+@@ -240,7 +240,7 @@ static void mpegts_write_pat(AVFormatContext *s)
+                           data, q - data);
+ }
+ 
+-static void mpegts_write_pmt(AVFormatContext *s, MpegTSService *service)
++static int mpegts_write_pmt(AVFormatContext *s, MpegTSService *service)
+ {
+     //    MpegTSWrite *ts = s->priv_data;
+     uint8_t data[1012], *q, *desc_length_ptr, *program_info_length_ptr;
+@@ -293,6 +293,10 @@ static void mpegts_write_pmt(AVFormatContext *s, MpegTSService *service)
+             stream_type = STREAM_TYPE_PRIVATE_DATA;
+             break;
+         }
++
++        if (q - data > sizeof(data) - 32)
++            return AVERROR(EINVAL);
++
+         *q++ = stream_type;
+         put16(&q, 0xe000 | ts_st->pid);
+         desc_length_ptr = q;
+@@ -324,7 +328,7 @@ static void mpegts_write_pmt(AVFormatContext *s, MpegTSService *service)
+                 len_ptr = q++;
+                 *len_ptr = 0;
+ 
+-                for (p = lang->value; next && *len_ptr < 255 / 4 * 4; p = next + 1) {
++                for (p = lang->value; next && *len_ptr < 255 / 4 * 4 && q - data < sizeof(data) - 4; p = next + 1) {
+                     next = strchr(p, ',');
+                     if (strlen(p) != 3 && (!next || next != p + 3))
+                         continue; /* not a 3-letter code */
+@@ -386,6 +390,7 @@ static void mpegts_write_pmt(AVFormatContext *s, MpegTSService *service)
+     }
+     mpegts_write_section1(&service->pmt, PMT_TID, service->sid, 0, 0, 0,
+                           data, q - data);
++    return 0;
+ }
+ 
+ /* NOTE: str == NULL is accepted for an empty string */
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-eamad-fix-out-of-array-accesses.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-eamad-fix-out-of-array-accesses.patch
new file mode 100644
index 0000000..f45e3fd
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-eamad-fix-out-of-array-accesses.patch
@@ -0,0 +1,29 @@
+From 63ac64864c6e0e84355aa3caa5b92208997a9a8d Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Sat, 17 Nov 2012 16:26:55 +0100
+Subject: [PATCH] eamad: fix out of array accesses
+
+Upstream-Status: Backport
+
+Commit 63ac64864c6e0e84355aa3caa5b92208997a9a8d release/1.1
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/eamad.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libavcodec/eamad.c b/libavcodec/eamad.c
+index 2805195..e38650e 100644
+--- a/gst-libs/ext/libav/libavcodec/eamad.c
++++ b/gst-libs/ext/libav/libavcodec/eamad.c
+@@ -237,7 +237,7 @@ static int decode_frame(AVCodecContext *avctx,
+     int chunk_type;
+     int inter;
+ 
+-    if (buf_size < 17) {
++    if (buf_size < 26) {
+         av_log(avctx, AV_LOG_ERROR, "Input buffer too small\n");
+         *data_size = 0;
+         return -1;
+-- 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-error-concealment-initialize-block-index.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-error-concealment-initialize-block-index.patch
new file mode 100644
index 0000000..e0e4239
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-error-concealment-initialize-block-index.patch
@@ -0,0 +1,29 @@
+gst-ffmpeg: error concealment: initialize block index.
+
+Fixes CVE-2011-3941 (out of bounds write)
+
+Upstream-Status: Backport 
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/error_resilience.c |    3 +++
+ 1 files changed, 3 insertions(+), 0 deletions(-)
+
+diff --git a/libavcodec/error_resilience.c b/libavcodec/error_resilience.c
+index 8bb5d0c..d55c000 100644
+--- a/gst-libs/ext/libav/libavcodec/error_resilience.c
++++ b/gst-libs/ext/libav/libavcodec/error_resilience.c
+@@ -45,6 +45,9 @@ static void decode_mb(MpegEncContext *s, int ref){
+     s->dest[1] = s->current_picture.data[1] + (s->mb_y * (16>>s->chroma_y_shift) * s->uvlinesize) + s->mb_x * (16>>s->chroma_x_shift);
+     s->dest[2] = s->current_picture.data[2] + (s->mb_y * (16>>s->chroma_y_shift) * s->uvlinesize) + s->mb_x * (16>>s->chroma_x_shift);
+ 
++    ff_init_block_index(s);
++    ff_update_block_index(s);
++
+     if(CONFIG_H264_DECODER && s->codec_id == CODEC_ID_H264){
+         H264Context *h= (void*)s;
+         h->mb_xy= s->mb_x + s->mb_y*s->mb_stride;
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-error_concealment-Check-that-the-picture-is-not-in-a.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-error_concealment-Check-that-the-picture-is-not-in-a.patch
new file mode 100644
index 0000000..8eef6e9
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-error_concealment-Check-that-the-picture-is-not-in-a.patch
@@ -0,0 +1,37 @@
+gst-ffmpeg: error_concealment: Check that the picture is not in a half
+
+Fixes state becoming inconsistent
+Fixes a null pointer dereference
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit 23318a57358358e7a4dc551e830e4503f0638cfe)
+
+Upstream-Status: Backport 
+
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+
+---
+ libavcodec/error_resilience.c |    6 ++++++
+ 1 files changed, 6 insertions(+), 0 deletions(-)
+
+diff --git a/libavcodec/error_resilience.c b/libavcodec/error_resilience.c
+index 01f7424..2b6bc42 100644
+--- a/gst-libs/ext/libav/libavcodec/error_resilience.c
++++ b/gst-libs/ext/libav/libavcodec/error_resilience.c
+@@ -793,6 +793,12 @@ void ff_er_frame_end(MpegEncContext *s){
+        s->picture_structure != PICT_FRAME || // we dont support ER of field pictures yet, though it should not crash if enabled
+        s->error_count==3*s->mb_width*(s->avctx->skip_top + s->avctx->skip_bottom)) return;
+ 
++    if (   s->picture_structure == PICT_FRAME
++        && s->current_picture.linesize[0] != s->current_picture_ptr->linesize[0]) {
++        av_log(s->avctx, AV_LOG_ERROR, "Error concealment not possible, frame not fully initialized\n");
++        return;
++    }
++
+     if(s->current_picture.motion_val[0] == NULL){
+         av_log(s->avctx, AV_LOG_ERROR, "Warning MVs not available\n");
+ 
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-ffserver-set-oformat.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-ffserver-set-oformat.patch
new file mode 100644
index 0000000..80325db
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-ffserver-set-oformat.patch
@@ -0,0 +1,36 @@
+gst-ffmpeg: ffserver: set oformat
+
+Fix Ticket1986
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit cbe43e62c9ac7d4aefdc13476f6f691bd626525f)
+
+Upstream-Status: Backport 
+
+---
+ ffserver.c |    4 +++-
+ 1 files changed, 3 insertions(+), 1 deletions(-)
+
+diff --git a/ffserver.c b/ffserver.c
+index 4044d0f..8740140 100644
+--- a/gst-libs/ext/libav/ffserver.c
++++ b/gst-libs/ext/libav/ffserver.c
+@@ -2937,12 +2937,14 @@ static int prepare_sdp_description(FFStream *stream, uint8_t **pbuffer,
+ {
+     AVFormatContext *avc;
+     AVStream *avs = NULL;
++    AVOutputFormat *rtp_format = av_guess_format("rtp", NULL, NULL);
+     int i;
+ 
+     avc =  avformat_alloc_context();
+-    if (avc == NULL) {
++    if (avc == NULL || !rtp_format) {
+         return -1;
+     }
++    avc->oformat = rtp_format;
+     av_dict_set(&avc->metadata, "title",
+                stream->title[0] ? stream->title : "No Title", 0);
+     avc->nb_streams = stream->nb_streams;
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-h264-correct-ref-count-check-and-limit-fix-out-of-ar.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-h264-correct-ref-count-check-and-limit-fix-out-of-ar.patch
new file mode 100644
index 0000000..d4f55b2
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-h264-correct-ref-count-check-and-limit-fix-out-of-ar.patch
@@ -0,0 +1,29 @@
+From d6c184880ee2e09fd68c0ae217173832cee5afc1 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Sun, 18 Nov 2012 16:29:04 +0100
+Subject: [PATCH] h264: correct ref count check and limit, fix out of array
+ accesses.
+
+Upstream-Status: Backport
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/h264.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libavcodec/h264.c b/libavcodec/h264.c
+index da43f1e..32cede5 100644
+--- a/gst-libs/ext/libav/libavcodec/h264.c
++++ b/gst-libs/ext/libav/libavcodec/h264.c
+@@ -2870,6 +2870,9 @@ static int decode_slice_header(H264Conte
+             h->ref_count[0]= get_ue_golomb(&s->gb) + 1;
+             if(h->slice_type_nos==AV_PICTURE_TYPE_B)
+                 h->ref_count[1]= get_ue_golomb(&s->gb) + 1;
++            else
++                // full range is spec-ok in this case, even for frames
++                h->ref_count[1] = 1;
+ 
+             if(h->ref_count[0]-1 > 32-1 || h->ref_count[1]-1 > 32-1){
+                 av_log(h->s.avctx, AV_LOG_ERROR, "reference overflow\n");
+-- 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-h264-set-parameters-from-SPS-whenever-it-changes.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-h264-set-parameters-from-SPS-whenever-it-changes.patch
new file mode 100644
index 0000000..05a9de3
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-h264-set-parameters-from-SPS-whenever-it-changes.patch
@@ -0,0 +1,145 @@
+gst-ffmpeg: h264: set parameters from SPS whenever it changes
+    
+Fixes a crash in the fuzzed sample sample_varPAR.avi_s26638 with
+alternating bit depths.
+
+Upstream-Status: Backport
+
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+
+diff --git a/gst-libs/ext/libav/libavcodec/h264.c.old b/gst-libs/ext/libav/libavcodec/h264.c
+index 3621f41..718906a 100644
+--- a/gst-libs/ext/libav/libavcodec/h264.c.old
++++ b/gst-libs/ext/libav/libavcodec/h264.c
+@@ -2491,6 +2491,34 @@ int ff_h264_get_profile(SPS *sps)
+     return profile;
+ }
+ 
++static int h264_set_parameter_from_sps(H264Context *h)
++{
++    MpegEncContext *s = &h->s;
++    AVCodecContext * avctx= s->avctx;
++
++    if (s->flags& CODEC_FLAG_LOW_DELAY ||
++        (h->sps.bitstream_restriction_flag && !h->sps.num_reorder_frames))
++        s->low_delay=1;
++
++    if(avctx->has_b_frames < 2)
++        avctx->has_b_frames= !s->low_delay;
++
++    if (avctx->bits_per_raw_sample != h->sps.bit_depth_luma) {
++        if (h->sps.bit_depth_luma >= 8 && h->sps.bit_depth_luma <= 10) {
++            avctx->bits_per_raw_sample = h->sps.bit_depth_luma;
++            h->pixel_shift = h->sps.bit_depth_luma > 8;
++
++            ff_h264dsp_init(&h->h264dsp, h->sps.bit_depth_luma);
++            ff_h264_pred_init(&h->hpc, s->codec_id, h->sps.bit_depth_luma);
++            dsputil_init(&s->dsp, s->avctx);
++        } else {
++            av_log(avctx, AV_LOG_DEBUG, "Unsupported bit depth: %d\n", h->sps.bit_depth_luma);
++            return -1;
++        }
++    }
++    return 0;
++}
++
+ /**
+  * decodes a slice header.
+  * This will also call MPV_common_init() and frame_start() as needed.
+@@ -2505,7 +2533,7 @@ static int decode_slice_header(H264Context *h, H264Context *h0){
+     MpegEncContext * const s0 = &h0->s;
+     unsigned int first_mb_in_slice;
+     unsigned int pps_id;
+-    int num_ref_idx_active_override_flag;
++    int num_ref_idx_active_override_flag, ret;
+     unsigned int slice_type, tmp, i, j;
+     int default_ref_list_done = 0;
+     int last_pic_structure;
+@@ -2569,7 +2597,17 @@ static int decode_slice_header(H264Context *h, H264Context *h0){
+         av_log(h->s.avctx, AV_LOG_ERROR, "non-existing SPS %u referenced\n", h->pps.sps_id);
+         return -1;
+     }
+-    h->sps = *h0->sps_buffers[h->pps.sps_id];
++
++    if (h->pps.sps_id != h->current_sps_id ||
++        h0->sps_buffers[h->pps.sps_id]->new) {
++        h0->sps_buffers[h->pps.sps_id]->new = 0;
++
++        h->current_sps_id = h->pps.sps_id;
++        h->sps            = *h0->sps_buffers[h->pps.sps_id];
++
++        if ((ret = h264_set_parameter_from_sps(h)) < 0)
++            return ret;
++    }
+ 
+     s->avctx->profile = ff_h264_get_profile(&h->sps);
+     s->avctx->level   = h->sps.level_idc;
+@@ -3811,26 +3811,8 @@ static int decode_nal_units(H264Context *h, const uint8_t *buf, int buf_size){
+         case NAL_SPS:
+             init_get_bits(&s->gb, ptr, bit_length);
+             ff_h264_decode_seq_parameter_set(h);
+-
+-            if (s->flags& CODEC_FLAG_LOW_DELAY ||
+-                (h->sps.bitstream_restriction_flag && !h->sps.num_reorder_frames))
+-                s->low_delay=1;
+-
+-            if(avctx->has_b_frames < 2)
+-                avctx->has_b_frames= !s->low_delay;
+-
+-            if (avctx->bits_per_raw_sample != h->sps.bit_depth_luma) {
+-                if (h->sps.bit_depth_luma >= 8 && h->sps.bit_depth_luma <= 10) {
+-                    avctx->bits_per_raw_sample = h->sps.bit_depth_luma;
+-                    h->pixel_shift = h->sps.bit_depth_luma > 8;
+-
+-                    ff_h264dsp_init(&h->h264dsp, h->sps.bit_depth_luma);
+-                    ff_h264_pred_init(&h->hpc, s->codec_id, h->sps.bit_depth_luma);
+-                    dsputil_init(&s->dsp, s->avctx);
+-                } else {
+-                    av_log(avctx, AV_LOG_DEBUG, "Unsupported bit depth: %d\n", h->sps.bit_depth_luma);
+-                    return -1;
+-                }
++            if (h264_set_parameter_from_sps(h) < 0) {
++                return -1;
+             }
+             break;
+         case NAL_PPS:
+diff --git a/gst-libs/ext/libav/libavcodec/h264.h.old b/gst-libs/ext/libav/libavcodec/h264.h
+index e3cc815..b77ad98 100644
+--- a/gst-libs/ext/libav/libavcodec/h264.h.old
++++ b/gst-libs/ext/libav/libavcodec/h264.h
+@@ -202,6 +202,7 @@ typedef struct SPS{
+     int bit_depth_chroma;              ///< bit_depth_chroma_minus8 + 8
+     int residual_color_transform_flag; ///< residual_colour_transform_flag
+     int constraint_set_flags;          ///< constraint_set[0-3]_flag
++    int new;                              ///< flag to keep track if the decoder context needs re-init due to changed SPS
+ }SPS;
+ 
+ /**
+@@ -333,6 +334,7 @@ typedef struct H264Context{
+     int emu_edge_width;
+     int emu_edge_height;
+ 
++    unsigned current_sps_id; ///< id of the current SPS
+     SPS sps; ///< current sps
+ 
+     /**
+diff --git a/gst-libs/ext/libav/libavcodec/h264_ps.c.old b/gst-libs/ext/libav/libavcodec/h264_ps.c
+index 7491807..0929098 100644
+--- a/gst-libs/ext/libav/libavcodec/h264_ps.c.old
++++ b/gst-libs/ext/libav/libavcodec/h264_ps.c
+@@ -438,10 +438,13 @@ int ff_h264_decode_seq_parameter_set(H264Context *h){
+                sps->timing_info_present_flag ? sps->time_scale : 0
+                );
+     }
++    sps->new = 1;
+ 
+     av_free(h->sps_buffers[sps_id]);
+-    h->sps_buffers[sps_id]= sps;
+-    h->sps = *sps;
++    h->sps_buffers[sps_id] = sps;
++    h->sps                 = *sps;
++    h->current_sps_id      = sps_id;
++
+     return 0;
+ fail:
+     av_free(sps);
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-h264-skip-error-concealment-when-SPS-and-slices-are-.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-h264-skip-error-concealment-when-SPS-and-slices-are-.patch
new file mode 100644
index 0000000..5d45c1a
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-h264-skip-error-concealment-when-SPS-and-slices-are-.patch
@@ -0,0 +1,33 @@
+gst-ffmpeg: h264: skip error concealment when SPS and slices are
+ mismatching
+
+Fixes out of array accesses
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit 695af8eed642ff0104834495652d1ee784a4c14d)
+
+Upstream-Status: Backport
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+---
+ libavcodec/h264.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/libavcodec/h264.c b/libavcodec/h264.c
+index da144db..0aab4e7 100644
+--- a/gst-libs/ext/libav/libavcodec/h264.c
++++ b/gst-libs/ext/libav/libavcodec/h264.c
+@@ -2351,7 +2351,7 @@ static int field_end(H264Context *h, int in_setup)
+      * past end by one (callers fault) and resync_mb_y != 0
+      * causes problems for the first MB line, too.
+      */
+-    if (!FIELD_PICTURE)
++    if (!FIELD_PICTURE && h->current_slice && !h->sps.new)
+         ff_er_frame_end(s);
+ 
+     ff_MPV_frame_end(s);
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-h264_sei-Fix-infinite-loop.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-h264_sei-Fix-infinite-loop.patch
new file mode 100644
index 0000000..1e62b50
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-h264_sei-Fix-infinite-loop.patch
@@ -0,0 +1,39 @@
+gst-ffmpeg: h264_sei: Fix infinite loop.
+
+Fixsot yet fixed parts of CVE-2011-3946.
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+
+Upstream-Status: Backport 
+
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+
+---
+ libavcodec/h264_sei.c |    4 ++++
+ 1 files changed, 4 insertions(+), 0 deletions(-)
+
+
+diff --git a/libavcodec/h264_sei.c b/libavcodec/h264_sei.c
+index 374e53d..80d70e5 100644
+--- a/gst-libs/ext/libav/libavcodec/h264_sei.c
++++ b/gst-libs/ext/libav/libavcodec/h264_sei.c
+@@ -169,11 +169,15 @@ int ff_h264_decode_sei(H264Context *h){
+ 
+         type=0;
+         do{
++            if (get_bits_left(&s->gb) < 8)
++                return -1;
+             type+= show_bits(&s->gb, 8);
+         }while(get_bits(&s->gb, 8) == 255);
+ 
+         size=0;
+         do{
++            if (get_bits_left(&s->gb) < 8)
++                return -1;
+             size+= show_bits(&s->gb, 8);
+         }while(get_bits(&s->gb, 8) == 255);
+ 
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-huffyuvdec-Check-init_vlc-return-codes.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-huffyuvdec-Check-init_vlc-return-codes.patch
new file mode 100644
index 0000000..e859e44
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-huffyuvdec-Check-init_vlc-return-codes.patch
@@ -0,0 +1,87 @@
+From b666debffec1fcbb19ef377635a53b9a58bca8a4 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Tue, 29 Jan 2013 18:29:41 +0100
+Subject: [PATCH] huffyuvdec: Check init_vlc() return codes.
+
+Upstream-Status: Backport
+
+Commit b666debffec1fcbb19ef377635a53b9a58bca8a4 release/1.0
+
+Prevents out of array writes
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit f67a0d115254461649470452058fa3c28c0df294)
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/huffyuv.c | 14 ++++++++++----
+ 1 file changed, 10 insertions(+), 4 deletions(-)
+
+diff --git a/libavcodec/huffyuv.c b/libavcodec/huffyuv.c
+index 58da789..993e524 100644
+--- a/gst-libs/ext/libav/libavcodec/huffyuv.c
++++ b/gst-libs/ext/libav/libavcodec/huffyuv.c
+@@ -33,6 +33,7 @@
+ #include "put_bits.h"
+ #include "dsputil.h"
+ #include "thread.h"
++#include "libavutil/avassert.h"
+ 
+ #define VLC_BITS 11
+ 
+@@ -287,6 +287,7 @@ static void generate_joint_tables(HYuvCo
+                     int len1 = s->len[p][u];
+                     if (len1 > limit || !len1)
+                         continue;
++                    av_assert0(i < (1 << VLC_BITS));
+                     len[i] = len0 + len1;
+                     bits[i] = (s->bits[0][y] << len1) + s->bits[p][u];
+                     symbols[i] = (y<<8) + u;
+@@ -320,6 +321,7 @@ static void generate_joint_tables(HYuvCo
+                     int len2 = s->len[2][r&255];
+                     if (len2 > limit1 || !len2)
+                         continue;
++                    av_assert0(i < (1 << VLC_BITS));
+                     len[i] = len0 + len1 + len2;
+                     bits[i] = (code << len2) + s->bits[2][r&255];
+                     if(s->decorrelate){
+@@ -343,6 +345,7 @@ static void generate_joint_tables(HYuvCo
+ static int read_huffman_tables(HYuvContext *s, const uint8_t *src, int length){
+     GetBitContext gb;
+     int i;
++    int ret;
+ 
+     init_get_bits(&gb, src, length*8);
+ 
+@@ -353,7 +356,9 @@ static int read_huffman_tables(HYuvConte
+             return -1;
+         }
+         free_vlc(&s->vlc[i]);
+-        init_vlc(&s->vlc[i], VLC_BITS, 256, s->len[i], 1, 1, s->bits[i], 4, 4, 0);
++        if ((ret = init_vlc(&s->vlc[i], VLC_BITS, 256, s->len[i], 1, 1,
++                           s->bits[i], 4, 4, 0)) < 0)
++            return ret;
+     }
+ 
+     generate_joint_tables(s);
+@@ -365,6 +370,7 @@ static int read_old_huffman_tables(HYuvC
+ #if 1
+     GetBitContext gb;
+     int i;
++    int ret;
+ 
+     init_get_bits(&gb, classic_shift_luma, sizeof(classic_shift_luma)*8);
+     if(read_len_table(s->len[0], &gb)<0)
+@@ -385,7 +391,9 @@ static int read_old_huffman_tables(HYuvC
+ 
+     for(i=0; i<3; i++){
+         free_vlc(&s->vlc[i]);
+-        init_vlc(&s->vlc[i], VLC_BITS, 256, s->len[i], 1, 1, s->bits[i], 4, 4, 0);
++        if ((ret = init_vlc(&s->vlc[i], VLC_BITS, 256, s->len[i], 1, 1,
++                            s->bits[i], 4, 4, 0)) < 0)
++            return ret;
+     }
+ 
+     generate_joint_tables(s);
+-- 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-huffyuvdec-Skip-len-0-cases.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-huffyuvdec-Skip-len-0-cases.patch
new file mode 100644
index 0000000..94bf4b6
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-huffyuvdec-Skip-len-0-cases.patch
@@ -0,0 +1,61 @@
+From db0f7f7394e1f994ed38db043f78ed0f10bde0da Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Tue, 29 Jan 2013 19:22:33 +0100
+Subject: [PATCH] huffyuvdec: Skip len==0 cases
+
+Upstream-Status: Backport
+
+Commit db0f7f7394e1f994ed38db043f78ed0f10bde0da release/1.0
+
+Fixes vlc decoding for hypothetical files that would contain such cases.
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit 0dfc01c2bbf4b71bb56201bc4a393321e15d1b31)
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/huffyuv.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/libavcodec/huffyuv.c b/libavcodec/huffyuv.c
+index 993e524..72ed351 100644
+--- a/gst-libs/ext/libav/libavcodec/huffyuv.c
++++ b/gst-libs/ext/libav/libavcodec/huffyuv.c
+@@ -281,11 +281,11 @@ static void generate_joint_tables(HYuvCo
+             for(i=y=0; y<256; y++){
+                 int len0 = s->len[0][y];
+                 int limit = VLC_BITS - len0;
+-                if(limit <= 0)
++                if(limit <= 0 || !len0)
+                     continue;
+                 for(u=0; u<256; u++){
+                     int len1 = s->len[p][u];
+-                    if(len1 > limit)
++                    if (len1 > limit || !len1)
+                         continue;
+                     len[i] = len0 + len1;
+                     bits[i] = (s->bits[0][y] << len1) + s->bits[p][u];
+@@ -308,17 +308,17 @@ static void generate_joint_tables(HYuvCo
+         for(i=0, g=-16; g<16; g++){
+             int len0 = s->len[p0][g&255];
+             int limit0 = VLC_BITS - len0;
+-            if(limit0 < 2)
++            if (limit0 < 2 || !len0)
+                 continue;
+             for(b=-16; b<16; b++){
+                 int len1 = s->len[p1][b&255];
+                 int limit1 = limit0 - len1;
+-                if(limit1 < 1)
++                if (limit1 < 1 || !len1)
+                     continue;
+                 code = (s->bits[p0][g&255] << len1) + s->bits[p1][b&255];
+                 for(r=-16; r<16; r++){
+                     int len2 = s->len[2][r&255];
+-                    if(len2 > limit1)
++                    if (len2 > limit1 || !len2)
+                         continue;
+                     len[i] = len0 + len1 + len2;
+                     bits[i] = (code << len2) + s->bits[2][r&255];
+-- 
+1.8.5.2.233.g932f7e4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-lavf-compute-probe-buffer-size-more-reliably.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-lavf-compute-probe-buffer-size-more-reliably.patch
new file mode 100644
index 0000000..ea4aa22
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-lavf-compute-probe-buffer-size-more-reliably.patch
@@ -0,0 +1,45 @@
+gst-ffmpeg: lavf: compute probe buffer size more reliably.
+
+The previous code computes the offset by reversing the growth
+of the allocated buffer size: it is complex and did lead to
+inconsistencies when the size limit is reached.
+
+Fix trac ticket #1991.
+(cherry picked from commit 03847eb8259291b4ff1bd840bd779d0699d71f96)
+
+Conflicts:
+	libavformat/utils.c
+
+Upstream-Status: Backport
+
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+
+---
+ libavformat/utils.c |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/libavformat/utils.c b/libavformat/utils.c
+index 7940037..be73c4a 100644
+--- a/gst-libs/ext/libav/libavformat/utils.c
++++ b/gst-libs/ext/libav/libavformat/utils.c
+@@ -459,7 +459,7 @@ int av_probe_input_buffer(AVIOContext *pb, AVInputFormat **fmt,
+ {
+     AVProbeData pd = { filename ? filename : "", NULL, -offset };
+     unsigned char *buf = NULL;
+-    int ret = 0, probe_size;
++    int ret = 0, probe_size, buf_offset = 0;
+ 
+     if (!max_probe_size) {
+         max_probe_size = PROBE_BUF_MAX;
+@@ -499,7 +499,7 @@ int av_probe_input_buffer(AVIOContext *pb, AVInputFormat **fmt,
+             score = 0;
+             ret = 0;            /* error was end of file, nothing read */
+         }
+-        pd.buf_size += ret;
++        pd.buf_size = buf_offset += ret;
+         pd.buf = &buf[offset];
+ 
+         memset(pd.buf + pd.buf_size, 0, AVPROBE_PADDING_SIZE);
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-mjpegdec-check-SE.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-mjpegdec-check-SE.patch
new file mode 100644
index 0000000..d90bafa
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-mjpegdec-check-SE.patch
@@ -0,0 +1,32 @@
+From 1f41cffe1e3e79620f587545bdfcbd7e6e68ed29 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Sun, 11 Nov 2012 00:01:24 +0100
+Subject: [PATCH] mjpegdec: check SE.
+
+Upstream-Status: Backport
+
+Commit 1f41cffe1e3e79620f587545bdfcbd7e6e68ed29 release/1.1
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/mjpegdec.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/libavcodec/mjpegdec.c b/libavcodec/mjpegdec.c
+index 6b5266d..0a71a6f 100644
+--- a/gst-libs/ext/libav/libavcodec/mjpegdec.c
++++ b/gst-libs/ext/libav/libavcodec/mjpegdec.c
+@@ -905,6 +905,11 @@ static int mjpeg_decode_scan_progressive
+     int16_t *quant_matrix = s->quant_matrixes[ s->quant_index[c] ];
+     GetBitContext mb_bitmask_gb;
+ 
++    if (se > 63) {
++        av_log(s->avctx, AV_LOG_ERROR, "SE %d is too large\n", se);
++        return AVERROR_INVALIDDATA;
++    }
++
+     if (mb_bitmask) {
+         init_get_bits(&mb_bitmask_gb, mb_bitmask, s->mb_width*s->mb_height);
+     }
+-- 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-pgssubdec-check-RLE-size-before-copying.-Fix-out-of-.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-pgssubdec-check-RLE-size-before-copying.-Fix-out-of-.patch
new file mode 100644
index 0000000..1041347
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-pgssubdec-check-RLE-size-before-copying.-Fix-out-of-.patch
@@ -0,0 +1,34 @@
+From 28bf685bfc6d0c744369cdf367f61a78d80d0b01 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Thu, 15 Nov 2012 16:41:28 +0100
+Subject: [PATCH] pgssubdec: check RLE size before copying. Fix out of array
+ accesses
+
+Upstream-Status: Backport
+
+Commit 28bf685bfc6d0c744369cdf367f61a78d80d0b01 release/1.1
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit c0d68be555f5858703383040e04fcd6529777061)
+---
+ libavcodec/pgssubdec.c | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/libavcodec/pgssubdec.c b/libavcodec/pgssubdec.c
+index 728f178..26a3c2a 100644
+--- a/gst-libs/ext/libav/libavcodec/pgssubdec.c
++++ b/gst-libs/ext/libav/libavcodec/pgssubdec.c
+@@ -202,6 +202,11 @@ static int parse_picture_segment(AVCodec
+         return -1;
+     }
+ 
++    if (buf_size > rle_bitmap_len) {
++        av_log(avctx, AV_LOG_ERROR, "too much RLE data\n");
++        return AVERROR_INVALIDDATA;
++    }
++
+     ctx->picture.w = width;
+     ctx->picture.h = height;
+ 
+-- 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-pngdec-filter-dont-access-out-of-array-elements-at-t.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-pngdec-filter-dont-access-out-of-array-elements-at-t.patch
new file mode 100644
index 0000000..1e5fb7d
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-pngdec-filter-dont-access-out-of-array-elements-at-t.patch
@@ -0,0 +1,44 @@
+gst-ffmpeg: pngdec/filter: dont access out of array elements at the end
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+
+Upstream-Status: Backport 
+
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+---
+ libavcodec/pngdec.c |   12 ++++--------
+ 1 files changed, 4 insertions(+), 8 deletions(-)
+
+diff --git a/libavcodec/pngdec.c b/libavcodec/pngdec.c
+index 97c0ad1..193e35e 100644
+--- a/gst-libs/ext/libav/libavcodec/pngdec.c
++++ b/gst-libs/ext/libav/libavcodec/pngdec.c
+@@ -190,7 +190,7 @@ void ff_add_png_paeth_prediction(uint8_t *dst, uint8_t *src, uint8_t *top, int w
+     if(bpp >= 2) g = dst[1];\
+     if(bpp >= 3) b = dst[2];\
+     if(bpp >= 4) a = dst[3];\
+-    for(; i < size; i+=bpp) {\
++    for(; i <= size - bpp; i+=bpp) {\
+         dst[i+0] = r = op(r, src[i+0], last[i+0]);\
+         if(bpp == 1) continue;\
+         dst[i+1] = g = op(g, src[i+1], last[i+1]);\
+@@ -206,13 +206,9 @@ void ff_add_png_paeth_prediction(uint8_t *dst, uint8_t *src, uint8_t *top, int w
+     else if(bpp == 2) UNROLL1(2, op)\
+     else if(bpp == 3) UNROLL1(3, op)\
+     else if(bpp == 4) UNROLL1(4, op)\
+-    else {\
+-        for (; i < size; i += bpp) {\
+-            int j;\
+-            for (j = 0; j < bpp; j++)\
+-                dst[i+j] = op(dst[i+j-bpp], src[i+j], last[i+j]);\
+-        }\
+-    }
++    for (; i < size; i++) {\
++        dst[i] = op(dst[i-bpp], src[i], last[i]);\
++    }\
+ 
+ /* NOTE: 'dst' can be equal to 'last' */
+ static void png_filter_row(PNGDSPContext *dsp, uint8_t *dst, int filter_type,
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-qdm2-check-array-index-before-use-fix-out-of-array-a.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-qdm2-check-array-index-before-use-fix-out-of-array-a.patch
new file mode 100644
index 0000000..8c94232
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-qdm2-check-array-index-before-use-fix-out-of-array-a.patch
@@ -0,0 +1,30 @@
+gst-ffmpeg: qdm2: check array index before use, fix out of array
+ accesses
+
+Upstream-Status: Backport 
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/qdm2.c |    5 +++++
+ 1 files changed, 5 insertions(+), 0 deletions(-)
+
+diff --git a/libavcodec/qdm2.c b/libavcodec/qdm2.c
+index 4cf4b2f..1dfb8d5 100644
+--- a/gst-libs/ext/libav/libavcodec/qdm2.c
++++ b/gst-libs/ext/libav/libavcodec/qdm2.c
+@@ -1257,6 +1257,11 @@ static void qdm2_decode_super_block (QDM2Context *q)
+     for (i = 0; packet_bytes > 0; i++) {
+         int j;
+ 
++        if (i>=FF_ARRAY_ELEMS(q->sub_packet_list_A)) {
++            SAMPLES_NEEDED_2("too many packet bytes");
++            return;
++        }
++
+         q->sub_packet_list_A[i].next = NULL;
+ 
+         if (i > 0) {
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-qdm2dec-fix-buffer-overflow.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-qdm2dec-fix-buffer-overflow.patch
new file mode 100644
index 0000000..43ffc03
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-qdm2dec-fix-buffer-overflow.patch
@@ -0,0 +1,58 @@
+gst-ffmpeg: qdm2dec: fix buffer overflow. Fixes NGS00144
+
+This also adds a few lines of code from master that are needed for this fix.
+
+Thanks to Phillip for suggestions to improve the patch.
+Found-by: Phillip Langlois
+
+Upstream-Status: Backport 
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/qdm2.c |    9 +++++++--
+ 1 files changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/libavcodec/qdm2.c b/libavcodec/qdm2.c
+index 3aa9e5b..e000df8 100644
+--- a/gst-libs/ext/libav/libavcodec/qdm2.c
++++ b/gst-libs/ext/libav/libavcodec/qdm2.c
+@@ -76,6 +76,7 @@ do { \
+ #define SAMPLES_NEEDED_2(why) \
+      av_log (NULL,AV_LOG_INFO,"This file triggers some missing code. Please contact the developers.\nPosition: %s\n",why);
+ 
++#define QDM2_MAX_FRAME_SIZE 512
+ 
+ typedef int8_t sb_int8_array[2][30][64];
+ 
+@@ -168,7 +169,7 @@ typedef struct {
+     /// I/O data
+     const uint8_t *compressed_data;
+     int compressed_size;
+-    float output_buffer[1024];
++    float output_buffer[QDM2_MAX_FRAME_SIZE * MPA_MAX_CHANNELS * 2];
+ 
+     /// Synthesis filter
+     MPADSPContext mpadsp;
+@@ -1819,6 +1820,9 @@ static av_cold int qdm2_decode_init(AVCodecContext *avctx)
+     s->group_order = av_log2(s->group_size) + 1;
+     s->frame_size = s->group_size / 16; // 16 iterations per super block
+ 
++    if (s->frame_size > QDM2_MAX_FRAME_SIZE)
++        return AVERROR_INVALIDDATA;
++
+     s->sub_sampling = s->fft_order - 7;
+     s->frequency_range = 255 / (1 << (2 - s->sub_sampling));
+ 
+@@ -1887,6 +1891,9 @@ static int qdm2_decode (QDM2Context *q, const uint8_t *in, int16_t *out)
+     int ch, i;
+     const int frame_size = (q->frame_size * q->channels);
+ 
++    if((unsigned)frame_size > FF_ARRAY_ELEMS(q->output_buffer)/2)
++        return -1;
++
+     /* select input buffer */
+     q->compressed_data = in;
+     q->compressed_size = q->checksum_size;
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-roqvideodec-check-dimensions-validity.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-roqvideodec-check-dimensions-validity.patch
new file mode 100644
index 0000000..7e58afc
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-roqvideodec-check-dimensions-validity.patch
@@ -0,0 +1,36 @@
+From 391e0fc6c90ced6656b74f50f3a487b6dc76ea63 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Thu, 29 Nov 2012 15:18:17 +0100
+Subject: [PATCH] roqvideodec: check dimensions validity
+
+Upstream-Status: Backport
+
+Commit 391e0fc6c90ced6656b74f50f3a487b6dc76ea63 release/0.7
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit 3ae610451170cd5a28b33950006ff0bd23036845)
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/roqvideodec.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/libavcodec/roqvideodec.c b/libavcodec/roqvideodec.c
+index f0977f6..4e34231 100644
+--- a/gst-libs/ext/libav/libavcodec/roqvideodec.c
++++ b/gst-libs/ext/libav/libavcodec/roqvideodec.c
+@@ -157,6 +157,12 @@ static av_cold int roq_decode_init(AVCodecContext *avctx)
+     RoqContext *s = avctx->priv_data;
+ 
+     s->avctx = avctx;
++
++    if (avctx->width%16 || avctx->height%16) {
++         av_log_ask_for_sample(avctx, "dimensions not being a multiple of 16 are unsupported\n");
++         return AVERROR_PATCHWELCOME;
++    }
++
+     s->width = avctx->width;
+     s->height = avctx->height;
+     avcodec_get_frame_defaults(&s->frames[0]);
+-- 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-smackerdec-Check-that-the-last-indexes-are-within-th.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-smackerdec-Check-that-the-last-indexes-are-within-th.patch
new file mode 100644
index 0000000..15b1614
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-smackerdec-Check-that-the-last-indexes-are-within-th.patch
@@ -0,0 +1,32 @@
+gst-ffmpeg: smackerdec: Check that the last indexes are within the
+ table.
+
+Fixes CVE-2011-3944
+
+Upstream-Status: Backport 
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/smacker.c |    5 +++++
+ 1 files changed, 5 insertions(+), 0 deletions(-)
+
+diff --git a/libavcodec/smacker.c b/libavcodec/smacker.c
+index 30f99b4..2a8bae8 100644
+--- a/gst-libs/ext/libav/libavcodec/smacker.c
++++ b/gst-libs/ext/libav/libavcodec/smacker.c
+@@ -259,6 +259,11 @@ static int smacker_decode_header_tree(SmackVContext *smk, GetBitContext *gb, int
+     if(ctx.last[0] == -1) ctx.last[0] = huff.current++;
+     if(ctx.last[1] == -1) ctx.last[1] = huff.current++;
+     if(ctx.last[2] == -1) ctx.last[2] = huff.current++;
++    if(huff.current > huff.length){
++        ctx.last[0] = ctx.last[1] = ctx.last[2] = 1;
++        av_log(smk->avctx, AV_LOG_ERROR, "bigtree damaged\n");
++        return -1;
++    }
+ 
+     *recodes = huff.values;
+ 
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-vp3-Copy-all-3-frames-for-thread-updates.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-vp3-Copy-all-3-frames-for-thread-updates.patch
new file mode 100644
index 0000000..a1989cf
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-vp3-Copy-all-3-frames-for-thread-updates.patch
@@ -0,0 +1,32 @@
+gst-ffmpeg: vp3: Copy all 3 frames for thread updates.
+
+This fixes a double release of the current frame on deinit.
+Fixes CVE-2011-3934
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+
+Upstream-Status: Backport
+
+Signed-off-by: Yue.Tao <yue.tao@windriver.com>
+
+---
+ libavcodec/vp3.c |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/libavcodec/vp3.c b/libavcodec/vp3.c
+index 738ae9f..b5daafc 100644
+--- a/gst-libs/ext/libav/libavcodec/vp3.c
++++ b/gst-libs/ext/libav/libavcodec/vp3.c
+@@ -1859,7 +1859,7 @@ static int vp3_update_thread_context(AVCodecContext *dst, const AVCodecContext *
+         ||s->width != s1->width
+         ||s->height!= s1->height) {
+         if (s != s1)
+-            copy_fields(s, s1, golden_frame, current_frame);
++            copy_fields(s, s1, golden_frame, keyframe);
+         return -1;
+     }
+ 
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-vp3-fix-oob-read-for-negative-tokens-and-memleaks-on.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-vp3-fix-oob-read-for-negative-tokens-and-memleaks-on.patch
new file mode 100644
index 0000000..e83d8f4
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-vp3-fix-oob-read-for-negative-tokens-and-memleaks-on.patch
@@ -0,0 +1,183 @@
+gst-ffmpeg: vp3: fix oob read for negative tokens and memleaks on error.
+
+Upstream-Status: Backport 
+
+Signed-off-by: Yue.Tao <yue.tao@windriver.com>
+
+---
+ libavcodec/vp3.c |   59 +++++++++++++++++++++++++++++++++++++++++------------
+ 1 files changed, 45 insertions(+), 14 deletions(-)
+
+diff --git a/libavcodec/vp3.c b/libavcodec/vp3.c
+index 36715bb..ce14e63 100644
+--- a/gst-libs/ext/libav/libavcodec/vp3.c
++++ b/gst-libs/ext/libav/libavcodec/vp3.c
+@@ -45,6 +45,7 @@
+ #define FRAGMENT_PIXELS 8
+ 
+ static av_cold int vp3_decode_end(AVCodecContext *avctx);
++static void vp3_decode_flush(AVCodecContext *avctx);
+ 
+ //FIXME split things out into their own arrays
+ typedef struct Vp3Fragment {
+@@ -890,7 +891,7 @@ static int unpack_vlcs(Vp3DecodeContext *s, GetBitContext *gb,
+             /* decode a VLC into a token */
+             token = get_vlc2(gb, vlc_table, 11, 3);
+             /* use the token to get a zero run, a coefficient, and an eob run */
+-            if (token <= 6) {
++            if ((unsigned) token <= 6U) {
+                 eob_run = eob_run_base[token];
+                 if (eob_run_get_bits[token])
+                     eob_run += get_bits(gb, eob_run_get_bits[token]);
+@@ -908,7 +909,7 @@ static int unpack_vlcs(Vp3DecodeContext *s, GetBitContext *gb,
+                     coeff_i        += eob_run;
+                     eob_run = 0;
+                 }
+-            } else {
++            } else if (token >= 0) {
+                 bits_to_get = coeff_get_bits[token];
+                 if (bits_to_get)
+                     bits_to_get = get_bits(gb, bits_to_get);
+@@ -942,6 +943,10 @@ static int unpack_vlcs(Vp3DecodeContext *s, GetBitContext *gb,
+                 for (i = coeff_index+1; i <= coeff_index+zero_run; i++)
+                     s->num_coded_frags[plane][i]--;
+                 coeff_i++;
++            } else {
++                av_log(s->avctx, AV_LOG_ERROR,
++                       "Invalid token %d\n", token);
++                return -1;
+             }
+     }
+ 
+@@ -991,6 +996,8 @@ static int unpack_dct_coeffs(Vp3DecodeContext *s, GetBitContext *gb)
+     /* unpack the Y plane DC coefficients */
+     residual_eob_run = unpack_vlcs(s, gb, &s->dc_vlc[dc_y_table], 0,
+         0, residual_eob_run);
++    if (residual_eob_run < 0)
++        return residual_eob_run;
+ 
+     /* reverse prediction of the Y-plane DC coefficients */
+     reverse_dc_prediction(s, 0, s->fragment_width[0], s->fragment_height[0]);
+@@ -998,8 +1005,12 @@ static int unpack_dct_coeffs(Vp3DecodeContext *s, GetBitContext *gb)
+     /* unpack the C plane DC coefficients */
+     residual_eob_run = unpack_vlcs(s, gb, &s->dc_vlc[dc_c_table], 0,
+         1, residual_eob_run);
++    if (residual_eob_run < 0)
++        return residual_eob_run;
+     residual_eob_run = unpack_vlcs(s, gb, &s->dc_vlc[dc_c_table], 0,
+         2, residual_eob_run);
++    if (residual_eob_run < 0)
++        return residual_eob_run;
+ 
+     /* reverse prediction of the C-plane DC coefficients */
+     if (!(s->avctx->flags & CODEC_FLAG_GRAY))
+@@ -1036,11 +1047,17 @@ static int unpack_dct_coeffs(Vp3DecodeContext *s, GetBitContext *gb)
+     for (i = 1; i <= 63; i++) {
+             residual_eob_run = unpack_vlcs(s, gb, y_tables[i], i,
+                 0, residual_eob_run);
++            if (residual_eob_run < 0)
++                return residual_eob_run;
+ 
+             residual_eob_run = unpack_vlcs(s, gb, c_tables[i], i,
+                 1, residual_eob_run);
++            if (residual_eob_run < 0)
++                return residual_eob_run;
+             residual_eob_run = unpack_vlcs(s, gb, c_tables[i], i,
+                 2, residual_eob_run);
++            if (residual_eob_run < 0)
++                return residual_eob_run;
+     }
+ 
+     return 0;
+@@ -1777,10 +1794,15 @@ static int vp3_update_thread_context(AVCodecContext *dst, const AVCodecContext *
+     Vp3DecodeContext *s = dst->priv_data, *s1 = src->priv_data;
+     int qps_changed = 0, i, err;
+ 
++#define copy_fields(to, from, start_field, end_field) memcpy(&to->start_field, &from->start_field, (char*)&to->end_field - (char*)&to->start_field)
++
+     if (!s1->current_frame.data[0]
+         ||s->width != s1->width
+-        ||s->height!= s1->height)
++        ||s->height!= s1->height) {
++        if (s != s1)
++            copy_fields(s, s1, golden_frame, current_frame);
+         return -1;
++    }
+ 
+     if (s != s1) {
+         // init tables if the first frame hasn't been decoded
+@@ -1796,8 +1818,6 @@ static int vp3_update_thread_context(AVCodecContext *dst, const AVCodecContext *
+             memcpy(s->motion_val[1], s1->motion_val[1], c_fragment_count * sizeof(*s->motion_val[1]));
+         }
+ 
+-#define copy_fields(to, from, start_field, end_field) memcpy(&to->start_field, &from->start_field, (char*)&to->end_field - (char*)&to->start_field)
+-
+         // copy previous frame data
+         copy_fields(s, s1, golden_frame, dsp);
+ 
+@@ -1987,9 +2007,6 @@ static av_cold int vp3_decode_end(AVCodecContext *avctx)
+     Vp3DecodeContext *s = avctx->priv_data;
+     int i;
+ 
+-    if (avctx->is_copy && !s->current_frame.data[0])
+-        return 0;
+-
+     av_free(s->superblock_coding);
+     av_free(s->all_fragments);
+     av_free(s->coded_fragment_list[0]);
+@@ -2016,12 +2033,7 @@ static av_cold int vp3_decode_end(AVCodecContext *avctx)
+     free_vlc(&s->motion_vector_vlc);
+ 
+     /* release all frames */
+-    if (s->golden_frame.data[0])
+-        ff_thread_release_buffer(avctx, &s->golden_frame);
+-    if (s->last_frame.data[0] && s->last_frame.type != FF_BUFFER_TYPE_COPY)
+-        ff_thread_release_buffer(avctx, &s->last_frame);
+-    /* no need to release the current_frame since it will always be pointing
+-     * to the same frame as either the golden or last frame */
++    vp3_decode_flush(avctx);
+ 
+     return 0;
+ }
+@@ -2341,6 +2353,23 @@ static void vp3_decode_flush(AVCodecContext *avctx)
+         ff_thread_release_buffer(avctx, &s->current_frame);
+ }
+ 
++static int vp3_init_thread_copy(AVCodecContext *avctx)
++{
++    Vp3DecodeContext *s = avctx->priv_data;
++
++    s->superblock_coding      = NULL;
++    s->all_fragments          = NULL;
++    s->coded_fragment_list[0] = NULL;
++    s->dct_tokens_base        = NULL;
++    s->superblock_fragments   = NULL;
++    s->macroblock_coding      = NULL;
++    s->motion_val[0]          = NULL;
++    s->motion_val[1]          = NULL;
++    s->edge_emu_buffer        = NULL;
++
++    return 0;
++}
++
+ AVCodec ff_theora_decoder = {
+     .name           = "theora",
+     .type           = AVMEDIA_TYPE_VIDEO,
+@@ -2352,6 +2381,7 @@ AVCodec ff_theora_decoder = {
+     .capabilities   = CODEC_CAP_DR1 | CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_FRAME_THREADS,
+     .flush = vp3_decode_flush,
+     .long_name = NULL_IF_CONFIG_SMALL("Theora"),
++    .init_thread_copy      = ONLY_IF_THREADS_ENABLED(vp3_init_thread_copy),
+     .update_thread_context = ONLY_IF_THREADS_ENABLED(vp3_update_thread_context)
+ };
+ #endif
+@@ -2367,5 +2397,6 @@ AVCodec ff_vp3_decoder = {
+     .capabilities   = CODEC_CAP_DR1 | CODEC_CAP_DRAW_HORIZ_BAND | CODEC_CAP_FRAME_THREADS,
+     .flush = vp3_decode_flush,
+     .long_name = NULL_IF_CONFIG_SMALL("On2 VP3"),
++    .init_thread_copy      = ONLY_IF_THREADS_ENABLED(vp3_init_thread_copy),
+     .update_thread_context = ONLY_IF_THREADS_ENABLED(vp3_update_thread_context)
+ };
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-vqavideo-check-chunk-sizes-before-reading-chunks.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-vqavideo-check-chunk-sizes-before-reading-chunks.patch
new file mode 100644
index 0000000..7e4f682
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0001-vqavideo-check-chunk-sizes-before-reading-chunks.patch
@@ -0,0 +1,51 @@
+From 2cac35086c9e103fa98960c546d5017e7363803a Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Fri, 25 Jan 2013 06:11:59 +0100
+Subject: [PATCH] vqavideo: check chunk sizes before reading chunks
+
+Upstream-Status: Backport
+
+Commit 2cac35086c9e103fa98960c546d5017e7363803a release/0.7
+
+Fixes out of array writes
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+(cherry picked from commit ab6c9332bfa1e20127a16392a0b85a4aa4840889)
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+---
+ libavcodec/vqavideo.c |   10 ++++++++++
+ 1 files changed, 10 insertions(+), 0 deletions(-)
+
+diff --git a/libavcodec/vqavideo.c b/libavcodec/vqavideo.c
+index d1eab5b..6e1ce6c 100644
+--- a/gst-libs/ext/libav/libavcodec/vqavideo.c
++++ b/gst-libs/ext/libav/libavcodec/vqavideo.c
+@@ -527,6 +527,11 @@ static void vqa_decode_chunk(VqaContext *s)
+         chunk_size = AV_RB32(&s->buf[cbp0_chunk + 4]);
+         cbp0_chunk += CHUNK_PREAMBLE_SIZE;
+ 
++        if (chunk_size > MAX_CODEBOOK_SIZE - s->next_codebook_buffer_index) {
++            av_log(s->avctx, AV_LOG_ERROR, "cbp0 chunk too large (0x%X bytes)\n", chunk_size);
++            return AVERROR_INVALIDDATA;
++        }
++
+         /* accumulate partial codebook */
+         memcpy(&s->next_codebook_buffer[s->next_codebook_buffer_index],
+             &s->buf[cbp0_chunk], chunk_size);
+@@ -550,6 +555,11 @@ static void vqa_decode_chunk(VqaContext *s)
+         chunk_size = AV_RB32(&s->buf[cbpz_chunk + 4]);
+         cbpz_chunk += CHUNK_PREAMBLE_SIZE;
+ 
++        if (chunk_size > MAX_CODEBOOK_SIZE - s->next_codebook_buffer_index) {
++            av_log(s->avctx, AV_LOG_ERROR, "cbpz chunk too large (0x%X bytes)\n", chunk_size);
++            return AVERROR_INVALIDDATA;
++        }
++
+         /* accumulate partial codebook */
+         memcpy(&s->next_codebook_buffer[s->next_codebook_buffer_index],
+             &s->buf[cbpz_chunk], chunk_size);
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0002-avcodec-mjpegdec-check-bits-per-pixel-for-changes-si.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0002-avcodec-mjpegdec-check-bits-per-pixel-for-changes-si.patch
new file mode 100644
index 0000000..c8bafd5
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/0002-avcodec-mjpegdec-check-bits-per-pixel-for-changes-si.patch
@@ -0,0 +1,68 @@
+From 6043c431c97d55173f339fafbd033d3c0642e2e9 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Fri, 3 Oct 2014 01:50:27 +0200
+Subject: [PATCH 2/2] avcodec/mjpegdec: check bits per pixel for changes
+ similar to dimensions
+
+Upstream-Status: Backport
+
+Fixes out of array accesses
+Fixes: asan_heap-oob_16668e9_2_asan_heap-oob_16668e9_346_miss_congeniality_pegasus_mjpg.avi
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+
+Conflicts:
+	libavcodec/mjpegdec.c
+---
+ libavcodec/mjpegdec.c | 15 ++++++++-------
+ 1 file changed, 8 insertions(+), 7 deletions(-)
+
+diff --git a/gst-libs/ext/libav/libavcodec/mjpegdec.c b/gst-libs/ext/libav/libavcodec/mjpegdec.c
+index 84343c0..c0137d8 100644
+--- a/gst-libs/ext/libav/libavcodec/mjpegdec.c
++++ b/gst-libs/ext/libav/libavcodec/mjpegdec.c
+@@ -210,16 +210,16 @@ int ff_mjpeg_decode_dht(MJpegDecodeContext *s)
+ 
+ int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
+ {
+-    int len, nb_components, i, width, height, pix_fmt_id;
++    int len, nb_components, i, bits, width, height, pix_fmt_id;
+ 
+     /* XXX: verify len field validity */
+     len = get_bits(&s->gb, 16);
+-    s->bits= get_bits(&s->gb, 8);
++    bits= get_bits(&s->gb, 8);
+ 
+-    if(s->pegasus_rct) s->bits=9;
+-    if(s->bits==9 && !s->pegasus_rct) s->rct=1;    //FIXME ugly
++    if(s->pegasus_rct) bits=9;
++    if(bits==9 && !s->pegasus_rct) s->rct=1;    //FIXME ugly
+ 
+-    if (s->bits != 8 && !s->lossless){
++    if (bits != 8 && !s->lossless){
+         av_log(s->avctx, AV_LOG_ERROR, "only 8 bits/component accepted\n");
+         return -1;
+     }
+@@ -239,7 +239,7 @@ int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
+     if (nb_components <= 0 ||
+         nb_components > MAX_COMPONENTS)
+         return -1;
+-    if (s->ls && !(s->bits <= 8 || nb_components == 1)){
++    if (s->ls && !(bits <= 8 || nb_components == 1)){
+         av_log(s->avctx, AV_LOG_ERROR, "only <= 8 bits/component or 16-bit gray accepted for JPEG-LS\n");
+         return -1;
+     }
+@@ -272,10 +272,11 @@ int ff_mjpeg_decode_sof(MJpegDecodeContext *s)
+ 
+     /* if different size, realloc/alloc picture */
+     /* XXX: also check h_count and v_count */
+-    if (width != s->width || height != s->height) {
++    if (width != s->width || height != s->height || bits != s->bits) {
+         av_freep(&s->qscale_table);
+ 
+         s->width = width;
++        s->bits= bits;
+         s->height = height;
+         s->interlaced = 0;
+ 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/configure-fix.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/configure-fix.patch
new file mode 100644
index 0000000..9ef6f7c
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/configure-fix.patch
@@ -0,0 +1,22 @@
+Disable yasm for libav when --disable-yasm
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Shane Wang <shane.wang@intel.com>
+
+diff -r f2f8f74c6e30 configure.ac
+--- a/configure.ac	Thu Dec 22 23:56:09 2011 +0800
++++ b/configure.ac	Thu Dec 22 23:57:37 2011 +0800
+@@ -325,6 +325,12 @@
+         --enable-gpl"
+   fi
+ 
++ AC_ARG_ENABLE(yasm,
++              [AC_HELP_STRING([--disable-yasm], [disable use of yasm assembler])])
++  if test "x$enable_yasm" = "xno"; then
++    embffmpeg_configure_args="$embffmpeg_configure_args --disable-yasm"
++  fi
++
+   # if we are cross-compiling, tell ffmpeg so
+   target_os=`echo $host_os | sed 's/-gnu//'`
+   if test "x$cross_compiling" = xyes; then
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-CVE-2013-0855.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-CVE-2013-0855.patch
new file mode 100644
index 0000000..3c8d8e3
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-CVE-2013-0855.patch
@@ -0,0 +1,100 @@
+gst-ffmpeg: Security Advisory - ffmpeg - CVE-2013-0855
+
+Upstream-Status: Backport 
+
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+
+diff --git a/gst-libs/ext/libav/libavcodec/alac.c.old b/gst-libs/ext/libav/libavcodec/alac.c
+index 2a0df8c..bcbd56d 100644
+--- a/gst-libs/ext/libav/libavcodec/alac.c.old
++++ b/gst-libs/ext/libav/libavcodec/alac.c
+@@ -87,18 +87,44 @@ typedef struct {
+     int wasted_bits;
+ } ALACContext;
+ 
+-static void allocate_buffers(ALACContext *alac)
++static av_cold int alac_decode_close(AVCodecContext *avctx)
++{
++    ALACContext *alac = avctx->priv_data;
++
++    int chan;
++    for (chan = 0; chan < MAX_CHANNELS; chan++) {
++        av_freep(&alac->predicterror_buffer[chan]);
++        av_freep(&alac->outputsamples_buffer[chan]);
++        av_freep(&alac->wasted_bits_buffer[chan]);
++    }
++
++    return 0;
++}
++
++static int allocate_buffers(ALACContext *alac)
+ {
+     int chan;
++    int buf_size;
++
++    if (alac->setinfo_max_samples_per_frame > INT_MAX / sizeof(int32_t))
++        goto buf_alloc_fail;
++    buf_size = alac->setinfo_max_samples_per_frame * sizeof(int32_t);
++
+     for (chan = 0; chan < MAX_CHANNELS; chan++) {
+-        alac->predicterror_buffer[chan] =
+-            av_malloc(alac->setinfo_max_samples_per_frame * 4);
+ 
+-        alac->outputsamples_buffer[chan] =
+-            av_malloc(alac->setinfo_max_samples_per_frame * 4);
++        FF_ALLOC_OR_GOTO(alac->avctx, alac->predicterror_buffer[chan],
++                         buf_size, buf_alloc_fail);
+ 
+-        alac->wasted_bits_buffer[chan] = av_malloc(alac->setinfo_max_samples_per_frame * 4);
++        FF_ALLOC_OR_GOTO(alac->avctx, alac->outputsamples_buffer[chan],
++                         buf_size, buf_alloc_fail);
++
++        FF_ALLOC_OR_GOTO(alac->avctx, alac->wasted_bits_buffer[chan],
++                         buf_size, buf_alloc_fail);
+     }
++    return 0;
++buf_alloc_fail:
++    alac_decode_close(alac->avctx);
++    return AVERROR(ENOMEM);
+ }
+ 
+ static int alac_set_info(ALACContext *alac)
+@@ -131,8 +157,6 @@ static int alac_set_info(ALACContext *alac)
+     bytestream_get_be32(&ptr);      /* bitrate ? */
+     bytestream_get_be32(&ptr);      /* samplerate */
+ 
+-    allocate_buffers(alac);
+-
+     return 0;
+ }
+ 
+@@ -659,6 +683,7 @@ static int alac_decode_frame(AVCodecContext *avctx,
+ 
+ static av_cold int alac_decode_init(AVCodecContext * avctx)
+ {
++    int ret;
+     ALACContext *alac = avctx->priv_data;
+     alac->avctx = avctx;
+     alac->numchannels = alac->avctx->channels;
+@@ -674,18 +699,9 @@ static av_cold int alac_decode_init(AVCodecContext * avctx)
+         return -1;
+     }
+ 
+-    return 0;
+-}
+-
+-static av_cold int alac_decode_close(AVCodecContext *avctx)
+-{
+-    ALACContext *alac = avctx->priv_data;
+-
+-    int chan;
+-    for (chan = 0; chan < MAX_CHANNELS; chan++) {
+-        av_freep(&alac->predicterror_buffer[chan]);
+-        av_freep(&alac->outputsamples_buffer[chan]);
+-        av_freep(&alac->wasted_bits_buffer[chan]);
++    if ((ret = allocate_buffers(alac)) < 0) {
++        av_log(avctx, AV_LOG_ERROR, "Error allocating buffers\n");
++        return ret;
+     }
+ 
+     return 0;
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-CVE-2013-3674.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-CVE-2013-3674.patch
new file mode 100644
index 0000000..aa385f5
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-CVE-2013-3674.patch
@@ -0,0 +1,26 @@
+avcodec/cdgraphics: check buffer size before use
+
+Fixes out of array accesses
+
+Backported from:http://git.videolan.org/?p=ffmpeg.git;a=commit;h=ad002e1a13a8df934bd6cb2c84175a4780ab8942
+
+Upstream-Status: Backport
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+Signed-off-by: Ming Liu <ming.liu@windriver.com>
+
+diff -urpN a/gst-libs/ext/libav/libavcodec/cdgraphics.c b/gst-libs/ext/libav/libavcodec/cdgraphics.c
+--- a/gst-libs/ext/libav/libavcodec/cdgraphics.c	2013-07-18 13:17:08.399876575 +0800
++++ b/gst-libs/ext/libav/libavcodec/cdgraphics.c	2013-07-18 13:18:05.880502267 +0800
+@@ -291,7 +291,9 @@ static int cdg_decode_frame(AVCodecConte
+     inst    = bytestream_get_byte(&buf);
+     inst    &= CDG_MASK;
+     buf += 2;  /// skipping 2 unneeded bytes
+-    bytestream_get_buffer(&buf, cdg_data, buf_size - CDG_HEADER_SIZE);
++
++    if (buf_size > CDG_HEADER_SIZE)
++        bytestream_get_buffer(&buf, cdg_data, buf_size - CDG_HEADER_SIZE);
+ 
+     if ((command & CDG_MASK) == CDG_COMMAND) {
+         switch (inst) {
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2011-4352.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2011-4352.patch
new file mode 100644
index 0000000..90f3fd0
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2011-4352.patch
@@ -0,0 +1,64 @@
+From 8b94df0f2047e9728cb872adc9e64557b7a5152f Mon Sep 17 00:00:00 2001
+From: Reinhard Tartler <siretart@tauware.de>
+Date: Sun, 4 Dec 2011 10:10:33 +0100
+Subject: [PATCH] vp3dec: Check coefficient index in vp3_dequant()
+
+Based on a patch by Michael Niedermayer <michaelni@gmx.at>
+
+Fixes NGS00145, CVE-2011-4352
+
+Found-by: Phillip Langlois
+Signed-off-by: Reinhard Tartler <siretart@tauware.de>
+
+
+Upstream-Status: Backport
+
+http://git.videolan.org/?p=ffmpeg.git;a=commit;h=8b94df0f2047e9728cb872adc9e64557b7a5152f
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ libavcodec/vp3.c | 14 ++++++++++++--
+ 1 file changed, 12 insertions(+), 2 deletions(-)
+
+diff --git a/libavcodec/vp3.c b/libavcodec/vp3.c
+index 51ab048..f44d084 100644
+--- a/gst-libs/ext/libav/libavcodec/vp3.c
++++ b/gst-libs/ext/libav/libavcodec/vp3.c
+@@ -1363,6 +1363,10 @@ static inline int vp3_dequant(Vp3DecodeContext *s, Vp3Fragment *frag,
+         case 1: // zero run
+             s->dct_tokens[plane][i]++;
+             i += (token >> 2) & 0x7f;
++            if (i > 63) {
++                av_log(s->avctx, AV_LOG_ERROR, "Coefficient index overflow\n");
++                return i;
++            }
+             block[perm[i]] = (token >> 9) * dequantizer[perm[i]];
+             i++;
+             break;
+@@ -1566,7 +1570,10 @@ static void render_slice(Vp3DecodeContext *s, int slice)
+                     /* invert DCT and place (or add) in final output */
+ 
+                     if (s->all_fragments[i].coding_method == MODE_INTRA) {
+-                        vp3_dequant(s, s->all_fragments + i, plane, 0, block);
++                        int index;
++                        index = vp3_dequant(s, s->all_fragments + i, plane, 0, block);
++                        if (index > 63)
++                            continue;
+                         if(s->avctx->idct_algo!=FF_IDCT_VP3)
+                             block[0] += 128<<3;
+                         s->dsp.idct_put(
+@@ -1574,7 +1581,10 @@ static void render_slice(Vp3DecodeContext *s, int slice)
+                             stride,
+                             block);
+                     } else {
+-                        if (vp3_dequant(s, s->all_fragments + i, plane, 1, block)) {
++                        int index = vp3_dequant(s, s->all_fragments + i, plane, 1, block);
++                        if (index > 63)
++                            continue;
++                        if (index > 0) {
+                         s->dsp.idct_add(
+                             output_plane + first_pixel,
+                             stride,
+-- 
+2.1.1
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-7933.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-7933.patch
new file mode 100644
index 0000000..3c537c7
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-7933.patch
@@ -0,0 +1,38 @@
+From 2266b8bc3370856d874334ba62b337ce4f1eb255 Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Wed, 13 May 2015 16:46:06 +0800
+Subject: [PATCH 2/2] gst-ffmpeg: fix CVE-2014-7933
+
+Upstream-Status: Backport
+
+http://git.videolan.org/?p=ffmpeg.git;a=commit;h=33301f00
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ gst-libs/ext/libav/libavformat/matroskadec.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
+
+diff --git a/gst-libs/ext/libav/libavformat/matroskadec.c b/gst-libs/ext/libav/libavformat/matroskadec.c
+index 59dce4f..e5f5fc1 100644
+--- a/gst-libs/ext/libav/libavformat/matroskadec.c
++++ b/gst-libs/ext/libav/libavformat/matroskadec.c
+@@ -1916,7 +1916,7 @@ static int matroska_read_seek(AVFormatContext *s, int stream_index,
+                               int64_t timestamp, int flags)
+ {
+     MatroskaDemuxContext *matroska = s->priv_data;
+-    MatroskaTrack *tracks = matroska->tracks.elem;
++    MatroskaTrack *tracks = NULL;
+     AVStream *st = s->streams[stream_index];
+     int i, index, index_sub, index_min;
+ 
+@@ -1939,6 +1939,7 @@ static int matroska_read_seek(AVFormatContext *s, int stream_index,
+         return 0;
+ 
+     index_min = index;
++    tracks = matroska->tracks.elem;
+     for (i=0; i < matroska->tracks.nb_elem; i++) {
+         tracks[i].audio.pkt_cnt = 0;
+         tracks[i].audio.sub_packet_cnt = 0;
+-- 
+1.9.1
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8542.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8542.patch
new file mode 100644
index 0000000..ca47c81
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8542.patch
@@ -0,0 +1,38 @@
+From 105654e376a736d243aef4a1d121abebce912e6b Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Fri, 3 Oct 2014 04:30:58 +0200
+Subject: [PATCH] avcodec/utils: Add case for jv to
+ avcodec_align_dimensions2()
+
+(Upstream commit 105654e376a736d243aef4a1d121abebce912e6b)
+
+Fixes out of array accesses
+Fixes: asan_heap-oob_12304aa_8_asan_heap-oob_4da4f3_300_intro.jv
+
+Upstream-Status: Backport
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+---
+ libavcodec/utils.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+diff --git a/libavcodec/utils.c b/libavcodec/utils.c
+index d4f5532..c2c5579 100644
+--- a/gst-libs/ext/libav/libavcodec/utils.c
++++ b/gst-libs/ext/libav/libavcodec/utils.c
+@@ -173,6 +173,10 @@ void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height, int l
+             w_align=4;
+             h_align=4;
+         }
++        if (s->codec_id == CODEC_ID_JV){
++            w_align = 8;
++            h_align = 8;
++        }
+         break;
+     case PIX_FMT_BGR24:
+         if((s->codec_id == CODEC_ID_MSZH) || (s->codec_id == CODEC_ID_ZLIB)){
+-- 
+1.7.9.5
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8543.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8543.patch
new file mode 100644
index 0000000..b65e55f
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8543.patch
@@ -0,0 +1,35 @@
+From 8b0e96e1f21b761ca15dbb470cd619a1ebf86c3e Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Fri, 3 Oct 2014 14:45:04 +0200
+Subject: [PATCH] avcodec/mmvideo: Bounds check 2nd line of HHV Intra blocks
+
+(Upstream commit 8b0e96e1f21b761ca15dbb470cd619a1ebf86c3e)
+
+Fixes out of array access
+Fixes: asan_heap-oob_4da4f3_8_asan_heap-oob_4da4f3_419_scene1a.mm
+
+Upstream-Status: Backport
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+---
+ libavcodec/mmvideo.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libavcodec/mmvideo.c b/libavcodec/mmvideo.c
+index 026d463..9ff6393 100644
+--- a/gst-libs/ext/libav/libavcodec/mmvideo.c
++++ b/gst-libs/ext/libav/libavcodec/mmvideo.c
+@@ -104,7 +104,7 @@ static void mm_decode_intra(MmContext * s, int half_horiz, int half_vert, const
+ 
+         if (color) {
+             memset(s->frame.data[0] + y*s->frame.linesize[0] + x, color, run_length);
+-            if (half_vert)
++            if (half_vert && y + half_vert < s->avctx->height)
+                 memset(s->frame.data[0] + (y+1)*s->frame.linesize[0] + x, color, run_length);
+         }
+         x+= run_length;
+-- 
+1.7.9.5
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8544.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8544.patch
new file mode 100644
index 0000000..a124e3a
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8544.patch
@@ -0,0 +1,56 @@
+From e1c0cfaa419aa5d320540d5a1b3f8fd9b82ab7e5 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Fri, 3 Oct 2014 16:08:32 +0200
+Subject: [PATCH] avcodec/tiff: more completely check bpp/bppcount
+
+(Upstream commit e1c0cfaa419aa5d320540d5a1b3f8fd9b82ab7e5)
+
+Fixes pixel format selection
+Fixes out of array accesses
+Fixes: asan_heap-oob_1766029_6_asan_heap-oob_20aa045_332_cov_1823216757_m2-d1d366d7965db766c19a66c7a2ccbb6b.tif
+
+Upstream-Status: Backport
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+---
+ libavcodec/tiff.c |   13 ++++++++++---
+ 1 file changed, 10 insertions(+), 3 deletions(-)
+
+diff --git a/libavcodec/tiff.c b/libavcodec/tiff.c
+index 6e2096f..0870e31 100644
+--- a/gst-libs/ext/libav/libavcodec/tiff.c
++++ b/gst-libs/ext/libav/libavcodec/tiff.c
+@@ -324,11 +324,11 @@ static int tiff_decode_tag(TiffContext *s, const uint8_t *start, const uint8_t *
+         s->height = value;
+         break;
+     case TIFF_BPP:
+-        s->bppcount = count;
+-        if(count > 4){
+-            av_log(s->avctx, AV_LOG_ERROR, "This format is not supported (bpp=%d, %d components)\n", s->bpp, count);
++        if(count > 4U){
++            av_log(s->avctx, AV_LOG_ERROR, "This format is not supported (bpp=%d, %d components)\n", value, count);
+             return -1;
+         }
++        s->bppcount = count;
+         if(count == 1) s->bpp = value;
+         else{
+             switch(type){
+@@ -344,6 +344,13 @@ static int tiff_decode_tag(TiffContext *s, const uint8_t *start, const uint8_t *
+                 s->bpp = -1;
+             }
+         }
++        if (s->bpp > 64U) {
++            av_log(s->avctx, AV_LOG_ERROR,
++                   "This format is not supported (bpp=%d, %d components)\n",
++                   s->bpp, count);
++            s->bpp = 0;
++            return AVERROR_INVALIDDATA;
++        }
+         break;
+     case TIFF_SAMPLES_PER_PIXEL:
+         if (count != 1) {
+-- 
+1.7.9.5
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8545.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8545.patch
new file mode 100644
index 0000000..29d5f77
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8545.patch
@@ -0,0 +1,36 @@
+From 3e2b745020c2dbf0201fe7df3dad9e7e0b2e1bb6 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Fri, 3 Oct 2014 17:35:58 +0200
+Subject: [PATCH] avcodec/pngdec: Check bits per pixel before setting
+ monoblack pixel format
+
+(Upstream commit 3e2b745020c2dbf0201fe7df3dad9e7e0b2e1bb6)
+
+Fixes out of array accesses
+Fixes: asan_heap-oob_14dbfcf_4_asan_heap-oob_1ce5767_179_add_method_small.png
+
+Upstream-Status: Backport
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+---
+ libavcodec/pngdec.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libavcodec/pngdec.c b/libavcodec/pngdec.c
+index da91aab..f3603b3 100644
+--- a/gst-libs/ext/libav/libavcodec/pngdec.c
++++ b/gst-libs/ext/libav/libavcodec/pngdec.c
+@@ -481,7 +481,7 @@ static int decode_frame(AVCodecContext *avctx,
+                 } else if (s->bit_depth == 16 &&
+                            s->color_type == PNG_COLOR_TYPE_RGB) {
+                     avctx->pix_fmt = PIX_FMT_RGB48BE;
+-                } else if (s->bit_depth == 1 &&
++                } else if (s->bit_depth == 1 && s->bits_per_pixel == 1 &&
+                            s->color_type == PNG_COLOR_TYPE_GRAY) {
+                     avctx->pix_fmt = PIX_FMT_MONOBLACK;
+                 } else if (s->color_type == PNG_COLOR_TYPE_PALETTE) {
+-- 
+1.7.9.5
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8546.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8546.patch
new file mode 100644
index 0000000..d55d9eb
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8546.patch
@@ -0,0 +1,35 @@
+From e7e5114c506957f40aafd794e06de1a7e341e9d5 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Fri, 3 Oct 2014 19:33:01 +0200
+Subject: [PATCH] avcodec/cinepak: fix integer underflow
+
+(Upstream commit e7e5114c506957f40aafd794e06de1a7e341e9d5)
+
+Fixes out of array access
+Fixes: asan_heap-oob_4da0ba_6_asan_heap-oob_4da0ba_241_cvid_crash.avi
+
+Upstream-status: Backport
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+---
+ libavcodec/cinepak.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libavcodec/cinepak.c b/libavcodec/cinepak.c
+index 4746289..f651c48 100644
+--- a/gst-libs/ext/libav/libavcodec/cinepak.c
++++ b/gst-libs/ext/libav/libavcodec/cinepak.c
+@@ -125,7 +125,7 @@ static int cinepak_decode_vectors (CinepakContext *s, cvid_strip *strip,
+     const uint8_t   *eod = (data + size);
+     uint32_t         flag, mask;
+     cvid_codebook   *codebook;
+-    unsigned int     x, y;
++    int             x, y;
+     uint32_t         iy[4];
+     uint32_t         iu[2];
+     uint32_t         iv[2];
+-- 
+1.7.9.5
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8547.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8547.patch
new file mode 100644
index 0000000..a8616fa
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-8547.patch
@@ -0,0 +1,59 @@
+From 8f1457864be8fb9653643519dea1c6492f1dde57 Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Fri, 3 Oct 2014 20:15:52 +0200
+Subject: [PATCH] avcodec/gifdec: factorize interleave end handling out
+
+(Upstream commit 8f1457864be8fb9653643519dea1c6492f1dde57)
+
+also change it to a loop
+Fixes out of array access
+Fixes: asan_heap-oob_ca5410_8_asan_heap-oob_ca5410_97_ID_LSD_Size_Less_Then_Data_Inter_3.gif
+
+Upstream-Status: Backport
+
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+---
+ libavcodec/gifdec.c |   15 +++++----------
+ 1 file changed, 5 insertions(+), 10 deletions(-)
+
+diff --git a/libavcodec/gifdec.c b/libavcodec/gifdec.c
+index dee48f5..90de38b 100644
+--- a/gst-libs/ext/libav/libavcodec/gifdec.c
++++ b/gst-libs/ext/libav/libavcodec/gifdec.c
+@@ -271,26 +271,21 @@ static int gif_read_image(GifState *s, AVFrame *frame)
+             case 1:
+                 y1 += 8;
+                 ptr += linesize * 8;
+-                if (y1 >= height) {
+-                    y1 = pass ? 2 : 4;
+-                    ptr = ptr1 + linesize * y1;
+-                    pass++;
+-                }
+                 break;
+             case 2:
+                 y1 += 4;
+                 ptr += linesize * 4;
+-                if (y1 >= height) {
+-                    y1 = 1;
+-                    ptr = ptr1 + linesize;
+-                    pass++;
+-                }
+                 break;
+             case 3:
+                 y1 += 2;
+                 ptr += linesize * 2;
+                 break;
+             }
++            while (y1 >= height) {
++                y1 = 4 >> pass;
++                ptr = ptr1 + linesize * y1;
++                pass++;
++            }
+         } else {
+             ptr += linesize;
+         }
+-- 
+1.7.9.5
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-9318.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-9318.patch
new file mode 100644
index 0000000..0553cee
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-9318.patch
@@ -0,0 +1,37 @@
+From 0d3a3b9f8907625b361420d48fe05716859620ff Mon Sep 17 00:00:00 2001
+From: Michael Niedermayer <michaelni@gmx.at>
+Date: Wed, 26 Nov 2014 18:56:39 +0100
+Subject: [PATCH] avcodec/rawdec: Check the return code of
+ avpicture_get_size()
+
+(Upstream commit 1d3a3b9f8907625b361420d48fe05716859620ff)
+
+Fixes out of array access
+Fixes: asan_heap-oob_22388d0_3435_cov_3297128910_small_roll5_FlashCine1.cine
+Found-by: Mateusz "j00ru" Jurczyk and Gynvael Coldwind
+
+Upstream-Status: Backport
+
+Signed-off-by: Michael Niedermayer <michaelni@gmx.at>
+Signed-off-by: Yue Tao <yue.tao@windriver.com>
+---
+ libavcodec/rawdec.c |    3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/libavcodec/rawdec.c b/libavcodec/rawdec.c
+index 28792a1..647dfa9 100644
+--- a/gst-libs/ext/libav/libavcodec/rawdec.c
++++ b/gst-libs/ext/libav/libavcodec/rawdec.c
+@@ -87,6 +87,9 @@ static av_cold int raw_init_decoder(AVCodecContext *avctx)
+ 
+     ff_set_systematic_pal2(context->palette, avctx->pix_fmt);
+     context->length = avpicture_get_size(avctx->pix_fmt, avctx->width, avctx->height);
++    if (context->length < 0)
++        return context->length;
++
+     if((avctx->bits_per_coded_sample == 4 || avctx->bits_per_coded_sample == 2) &&
+        avctx->pix_fmt==PIX_FMT_PAL8 &&
+        (!avctx->codec_tag || avctx->codec_tag == MKTAG('r','a','w',' '))){
+-- 
+1.7.9.5
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-9603.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-9603.patch
new file mode 100644
index 0000000..5dda4cc
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/gst-ffmpeg-fix-CVE-2014-9603.patch
@@ -0,0 +1,41 @@
+From dc68faf8339a885bc55fabe5b01f1de4f8f3782c Mon Sep 17 00:00:00 2001
+From: Kai Kang <kai.kang@windriver.com>
+Date: Wed, 13 May 2015 16:30:53 +0800
+Subject: [PATCH 1/2] gst-ffmpeg: fix CVE-2014-9603
+
+Upstream-Status: Backport
+
+Upstream is version 2.x and vmdav.c is splitted into 2 files vmdaudio.c
+and vmdvideo.c. Becuase source code changes, just partly backport commit which
+is applicable to version 0.10.13 to fix CVE-2014-9603.
+
+http://git.videolan.org/?p=ffmpeg.git;a=commit;h=3030fb7e0d41836f8add6399e9a7c7b740b48bfd
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+ gst-libs/ext/libav/libavcodec/vmdav.c | 7 +++++--
+ 1 file changed, 5 insertions(+), 2 deletions(-)
+
+diff --git a/gst-libs/ext/libav/libavcodec/vmdav.c b/gst-libs/ext/libav/libavcodec/vmdav.c
+index d258252..ba88ad8 100644
+--- a/gst-libs/ext/libav/libavcodec/vmdav.c
++++ b/gst-libs/ext/libav/libavcodec/vmdav.c
+@@ -294,10 +294,13 @@ static void vmd_decode(VmdVideoContext *s)
+                     len = *pb++;
+                     if (len & 0x80) {
+                         len = (len & 0x7F) + 1;
+-                        if (*pb++ == 0xFF)
++                        if (*pb++ == 0xFF) {
+                             len = rle_unpack(pb, &dp[ofs], len, frame_width - ofs);
+-                        else
++                        } else {
++                            if (ofs + len > frame_width)
++                                return;
+                             memcpy(&dp[ofs], pb, len);
++                        }
+                         pb += len;
+                         ofs += len;
+                     } else {
+-- 
+1.9.1
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/h264_qpel_mmx.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/h264_qpel_mmx.patch
new file mode 100644
index 0000000..ade24dc
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/h264_qpel_mmx.patch
@@ -0,0 +1,57 @@
+Backport http://git.videolan.org/?p=ffmpeg.git;a=commitdiff;h=5f654897e325349dacf2546674e0510bb72ecb50;hp=250cebeb3b348c3da71f9972eb500d6005dc01f1
+
+Fixes these errors on x86
+
+libavcodec/x86/h264_qpel_mmx.c: Assembler messages:
+libavcodec/x86/h264_qpel_mmx.c:1294: Error: operand type mismatch for `cmp'
+libavcodec/x86/h264_qpel_mmx.c:1294: Error: operand type mismatch for `cmp'
+libavcodec/x86/h264_qpel_mmx.c:1298: Error: operand type mismatch for `cmp'
+libavcodec/x86/h264_qpel_mmx.c:1298: Error: operand type mismatch for `cmp'
+libavcodec/x86/h264_qpel_mmx.c:964: Error: operand type mismatch for `cmp'
+libavcodec/x86/h264_qpel_mmx.c:964: Error: operand type mismatch for `cmp'
+libavcodec/x86/h264_qpel_mmx.c:964: Error: operand type mismatch for `cmp'
+make[5]: *** [libavcodec/x86/dsputil_mmx.o] Error 1
+
+
+Signed-off-by: Khem Raj <raj.khem@gmail.com>
+Upstream-Status: Backport
+Index: gst-ffmpeg-0.10.13/gst-libs/ext/libav/libavcodec/x86/h264_qpel_mmx.c
+===================================================================
+--- gst-ffmpeg-0.10.13.orig/gst-libs/ext/libav/libavcodec/x86/h264_qpel_mmx.c	2012-03-30 11:39:41.324522051 -0700
++++ gst-ffmpeg-0.10.13/gst-libs/ext/libav/libavcodec/x86/h264_qpel_mmx.c	2012-03-30 11:54:08.152564075 -0700
+@@ -398,7 +398,7 @@
+             "2:                         \n\t"\
+             \
+             : "+a"(src), "+c"(dst)\
+-            : "S"((x86_reg)srcStride), "D"((x86_reg)dstStride), "g"(h)\
++            : "S"((x86_reg)srcStride), "D"((x86_reg)dstStride), "rm"(h)\
+             : "memory"\
+         );\
+         src += 4-(h+5)*srcStride;\
+@@ -446,7 +446,7 @@
+             QPEL_H264HV(%%mm3, %%mm4, %%mm5, %%mm0, %%mm1, %%mm2, 15*48)\
+             "2:                     \n\t"\
+             : "+a"(src)\
+-            : "c"(tmp), "S"((x86_reg)srcStride), "g"(size)\
++            : "c"(tmp), "S"((x86_reg)srcStride), "rm"(size)\
+             : "memory"\
+             );\
+         tmp += 4;\
+@@ -823,7 +823,7 @@
+         "2:                          \n\t"\
+         \
+         : "+a"(src), "+c"(dst)\
+-        : "S"((x86_reg)srcStride), "D"((x86_reg)dstStride), "g"(h)\
++        : "S"((x86_reg)srcStride), "D"((x86_reg)dstStride), "rm"(h)\
+         : XMM_CLOBBERS("%xmm0", "%xmm1", "%xmm2", "%xmm3", \
+                        "%xmm4", "%xmm5", "%xmm6", "%xmm7",)\
+           "memory"\
+@@ -878,7 +878,7 @@
+             QPEL_H264HV_XMM(%%xmm3, %%xmm4, %%xmm5, %%xmm0, %%xmm1, %%xmm2, 15*48)
+             "2:                         \n\t"
+             : "+a"(src)
+-            : "c"(tmp), "S"((x86_reg)srcStride), "g"(size)
++            : "c"(tmp), "S"((x86_reg)srcStride), "rm"(size)
+             : XMM_CLOBBERS("%xmm0", "%xmm1", "%xmm2", "%xmm3",
+                            "%xmm4", "%xmm5", "%xmm6", "%xmm7",)
+               "memory"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/libav-9.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/libav-9.patch
new file mode 100644
index 0000000..1860752
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/libav-9.patch
@@ -0,0 +1,9304 @@
+Taken from gentoo patchset:
+http://dev.gentoo.org/~tetromino/distfiles/gst-plugins-ffmpeg/gst-ffmpeg-0.10.13_p2012.11-libav-9-patches.tar.xz
+
+Upstream-Status: Pending
+
+Contains following changes, rebased to apply on top of our changes
+0002-Fix-includes-for-systemwide-build.patch
+0003-libav-Switch-to-non-deprecated-symbols.patch
+0005-av-Update-for-some-constant-changes.patch
+0006-av-Remove-palette-support-for-now.patch
+0007-av-Port-remaining-simple-bits.patch
+0008-av-Use-av_codec_is_-en-de-coder-API-instead-of-priva.patch
+0009-avprotocol-Port-from-the-URL-protocol-handler-to-san.patch
+0010-avdec-don-t-wait-for-keyframe.patch
+
+Following changes were skipped:
+0001-Partially-revert-commit-0300801b.patch
+0004-av-update-to-use-AVOption-variants.patch
+0011-av_get_bits_per_sample_format-was-removed-in-libav-9.patch
+
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpeg.c gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpeg.c
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpeg.c	2011-10-31 11:14:03.000000000 +0100
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpeg.c	2014-08-08 15:26:07.872857555 +0200
+@@ -151,9 +151,6 @@
+ #endif
+   gst_ffmpegaudioresample_register (plugin);
+ 
+-  av_register_protocol2 (&gstreamer_protocol, sizeof (URLProtocol));
+-  av_register_protocol2 (&gstpipe_protocol, sizeof (URLProtocol));
+-
+   /* Now we can return the pointer to the newly created Plugin object. */
+   return TRUE;
+ }
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpeg.h gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpeg.h
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpeg.h	2011-05-17 10:53:16.000000000 +0200
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpeg.h	2014-08-08 15:26:07.872857555 +0200
+@@ -58,10 +58,13 @@
+ int gst_ffmpeg_avcodec_close (AVCodecContext *avctx);
+ int gst_ffmpeg_av_find_stream_info(AVFormatContext *ic);
+ 
+-G_END_DECLS
++int gst_ffmpegdata_open (GstPad * pad, int flags, AVIOContext ** context);
++int gst_ffmpegdata_close (AVIOContext * h);
++typedef struct _GstFFMpegPipe GstFFMpegPipe;
++int gst_ffmpeg_pipe_open (GstFFMpegPipe *ffpipe, int flags, AVIOContext ** context);
++int gst_ffmpeg_pipe_close (AVIOContext * h);
+ 
+-extern URLProtocol gstreamer_protocol;
+-extern URLProtocol gstpipe_protocol;
++G_END_DECLS
+ 
+ /* use GST_FFMPEG URL_STREAMHEADER with URL_WRONLY if the first
+  * buffer should be used as streamheader property on the pad's caps. */
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegcfg.c gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegcfg.c
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegcfg.c	2011-07-12 16:35:27.000000000 +0200
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegcfg.c	2014-08-08 15:24:17.899853612 +0200
+@@ -147,7 +147,6 @@
+       {FF_DCT_FASTINT, "Fast Integer", "fastint"},
+       {FF_DCT_INT, "Accurate Integer", "int"},
+       {FF_DCT_MMX, "MMX", "mmx"},
+-      {FF_DCT_MLIB, "MLIB", "mlib"},
+       {FF_DCT_ALTIVEC, "ALTIVEC", "altivec"},
+       {FF_DCT_FAAN, "FAAN", "faan"},
+       {0, NULL, NULL},
+@@ -173,8 +172,6 @@
+       {FF_IDCT_SIMPLE, "Simple", "simple"},
+       {FF_IDCT_SIMPLEMMX, "Simple MMX", "simplemmx"},
+       {FF_IDCT_LIBMPEG2MMX, "LIBMPEG2MMX", "libmpeg2mmx"},
+-      {FF_IDCT_PS2, "PS2", "ps2"},
+-      {FF_IDCT_MLIB, "MLIB", "mlib"},
+       {FF_IDCT_ARM, "ARM", "arm"},
+       {FF_IDCT_ALTIVEC, "ALTIVEC", "altivec"},
+       {FF_IDCT_SH4, "SH4", "sh4"},
+@@ -263,16 +260,11 @@
+ 
+   if (!ffmpeg_flags_type) {
+     static const GFlagsValue ffmpeg_flags[] = {
+-      {CODEC_FLAG_OBMC, "Use overlapped block motion compensation (h263+)",
+-          "obmc"},
+       {CODEC_FLAG_QSCALE, "Use fixed qscale", "qscale"},
+       {CODEC_FLAG_4MV, "Allow 4 MV per MB", "4mv"},
+-      {CODEC_FLAG_H263P_AIV, "H.263 alternative inter VLC", "aiv"},
+       {CODEC_FLAG_QPEL, "Quartel Pel Motion Compensation", "qpel"},
+       {CODEC_FLAG_GMC, "GMC", "gmc"},
+       {CODEC_FLAG_MV0, "Always try a MB with MV (0,0)", "mv0"},
+-      {CODEC_FLAG_PART,
+-          "Store MV, DC and AC coefficients in seperate partitions", "part"},
+       {CODEC_FLAG_LOOP_FILTER, "Loop filter", "loop-filter"},
+       {CODEC_FLAG_GRAY, "Only decode/encode grayscale", "gray"},
+       {CODEC_FLAG_NORMALIZE_AQP,
+@@ -282,13 +274,9 @@
+           "global-headers"},
+       {CODEC_FLAG_AC_PRED, "H263 Advanced Intra Coding / MPEG4 AC prediction",
+           "aic"},
+-      {CODEC_FLAG_H263P_UMV, "Unlimited Motion Vector", "umv"},
+       {CODEC_FLAG_CBP_RD, "Rate Distoration Optimization for CBP", "cbp-rd"},
+       {CODEC_FLAG_QP_RD, "Rate Distoration Optimization for QP selection",
+           "qp-rd"},
+-      {CODEC_FLAG_H263P_SLICE_STRUCT, "H263 slice struct", "ss"},
+-      {CODEC_FLAG_SVCD_SCAN_OFFSET,
+-          "Reserve space for SVCD scan offset user data", "scanoffset"},
+       {CODEC_FLAG_CLOSED_GOP, "Closed GOP", "closedgop"},
+       {0, NULL, NULL},
+     };
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegcodecmap.c gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegcodecmap.c
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegcodecmap.c	2011-10-31 11:14:03.000000000 +0100
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegcodecmap.c	2014-08-08 15:31:30.968869139 +0200
+@@ -25,8 +25,10 @@
+ #include <gst/gst.h>
+ #ifdef HAVE_FFMPEG_UNINSTALLED
+ #include <avcodec.h>
++#include <channel_layout.h>
+ #else
+ #include <libavcodec/avcodec.h>
++#include <libavutil/channel_layout.h>
+ #endif
+ #include <string.h>
+ 
+@@ -35,43 +37,6 @@
+ 
+ #include <gst/pbutils/codec-utils.h>
+ 
+-/*
+- * Read a palette from a caps.
+- */
+-
+-static void
+-gst_ffmpeg_get_palette (const GstCaps * caps, AVCodecContext * context)
+-{
+-  GstStructure *str = gst_caps_get_structure (caps, 0);
+-  const GValue *palette_v;
+-  const GstBuffer *palette;
+-
+-  /* do we have a palette? */
+-  if ((palette_v = gst_structure_get_value (str, "palette_data")) && context) {
+-    palette = gst_value_get_buffer (palette_v);
+-    if (GST_BUFFER_SIZE (palette) >= AVPALETTE_SIZE) {
+-      if (context->palctrl)
+-        av_free (context->palctrl);
+-      context->palctrl = av_malloc (sizeof (AVPaletteControl));
+-      context->palctrl->palette_changed = 1;
+-      memcpy (context->palctrl->palette, GST_BUFFER_DATA (palette),
+-          AVPALETTE_SIZE);
+-    }
+-  }
+-}
+-
+-static void
+-gst_ffmpeg_set_palette (GstCaps * caps, AVCodecContext * context)
+-{
+-  if (context->palctrl) {
+-    GstBuffer *palette = gst_buffer_new_and_alloc (AVPALETTE_SIZE);
+-
+-    memcpy (GST_BUFFER_DATA (palette), context->palctrl->palette,
+-        AVPALETTE_SIZE);
+-    gst_caps_set_simple (caps, "palette_data", GST_TYPE_BUFFER, palette, NULL);
+-  }
+-}
+-
+ /* IMPORTANT: Keep this sorted by the ffmpeg channel masks */
+ static const struct
+ {
+@@ -79,26 +44,26 @@
+   GstAudioChannelPosition gst;
+ } _ff_to_gst_layout[] = {
+   {
+-  CH_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT}, {
+-  CH_FRONT_RIGHT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT}, {
+-  CH_FRONT_CENTER, GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER}, {
+-  CH_LOW_FREQUENCY, GST_AUDIO_CHANNEL_POSITION_LFE}, {
+-  CH_BACK_LEFT, GST_AUDIO_CHANNEL_POSITION_REAR_LEFT}, {
+-  CH_BACK_RIGHT, GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT}, {
+-  CH_FRONT_LEFT_OF_CENTER, GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER}, {
+-  CH_FRONT_RIGHT_OF_CENTER, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER}, {
+-  CH_BACK_CENTER, GST_AUDIO_CHANNEL_POSITION_REAR_CENTER}, {
+-  CH_SIDE_LEFT, GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT}, {
+-  CH_SIDE_RIGHT, GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT}, {
+-  CH_TOP_CENTER, GST_AUDIO_CHANNEL_POSITION_NONE}, {
+-  CH_TOP_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_NONE}, {
+-  CH_TOP_FRONT_CENTER, GST_AUDIO_CHANNEL_POSITION_NONE}, {
+-  CH_TOP_FRONT_RIGHT, GST_AUDIO_CHANNEL_POSITION_NONE}, {
+-  CH_TOP_BACK_LEFT, GST_AUDIO_CHANNEL_POSITION_NONE}, {
+-  CH_TOP_BACK_CENTER, GST_AUDIO_CHANNEL_POSITION_NONE}, {
+-  CH_TOP_BACK_RIGHT, GST_AUDIO_CHANNEL_POSITION_NONE}, {
+-  CH_STEREO_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT}, {
+-  CH_STEREO_RIGHT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT}
++  AV_CH_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT}, {
++  AV_CH_FRONT_RIGHT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT}, {
++  AV_CH_FRONT_CENTER, GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER}, {
++  AV_CH_LOW_FREQUENCY, GST_AUDIO_CHANNEL_POSITION_LFE}, {
++  AV_CH_BACK_LEFT, GST_AUDIO_CHANNEL_POSITION_REAR_LEFT}, {
++  AV_CH_BACK_RIGHT, GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT}, {
++  AV_CH_FRONT_LEFT_OF_CENTER, GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER}, {
++  AV_CH_FRONT_RIGHT_OF_CENTER, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER}, {
++  AV_CH_BACK_CENTER, GST_AUDIO_CHANNEL_POSITION_REAR_CENTER}, {
++  AV_CH_SIDE_LEFT, GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT}, {
++  AV_CH_SIDE_RIGHT, GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT}, {
++  AV_CH_TOP_CENTER, GST_AUDIO_CHANNEL_POSITION_NONE}, {
++  AV_CH_TOP_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_NONE}, {
++  AV_CH_TOP_FRONT_CENTER, GST_AUDIO_CHANNEL_POSITION_NONE}, {
++  AV_CH_TOP_FRONT_RIGHT, GST_AUDIO_CHANNEL_POSITION_NONE}, {
++  AV_CH_TOP_BACK_LEFT, GST_AUDIO_CHANNEL_POSITION_NONE}, {
++  AV_CH_TOP_BACK_CENTER, GST_AUDIO_CHANNEL_POSITION_NONE}, {
++  AV_CH_TOP_BACK_RIGHT, GST_AUDIO_CHANNEL_POSITION_NONE}, {
++  AV_CH_STEREO_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT}, {
++  AV_CH_STEREO_RIGHT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT}
+ };
+ 
+ static GstAudioChannelPosition *
+@@ -342,8 +307,8 @@
+ 
+     if (channel_layout == 0) {
+       const guint64 default_channel_set[] = {
+-        0, 0, CH_LAYOUT_SURROUND, CH_LAYOUT_QUAD, CH_LAYOUT_5POINT0,
+-        CH_LAYOUT_5POINT1, 0, CH_LAYOUT_7POINT1
++        0, 0, AV_CH_LAYOUT_SURROUND, AV_CH_LAYOUT_QUAD, AV_CH_LAYOUT_5POINT0,
++        AV_CH_LAYOUT_5POINT1, 0, AV_CH_LAYOUT_7POINT1
+       };
+ 
+       switch (codec_id) {
+@@ -1267,8 +1232,6 @@
+     case CODEC_ID_FLIC:
+     case CODEC_ID_VMDVIDEO:
+     case CODEC_ID_VMDAUDIO:
+-    case CODEC_ID_SONIC:
+-    case CODEC_ID_SONIC_LS:
+     case CODEC_ID_SNOW:
+     case CODEC_ID_VIXL:
+     case CODEC_ID_QPEG:
+@@ -1689,11 +1652,6 @@
+       gst_buffer_unref (data);
+     }
+ 
+-    /* palette */
+-    if (context) {
+-      gst_ffmpeg_set_palette (caps, context);
+-    }
+-
+     GST_LOG ("caps for codec_id=%d: %" GST_PTR_FORMAT, codec_id, caps);
+ 
+   } else {
+@@ -1830,9 +1788,6 @@
+             "bpp", G_TYPE_INT, bpp,
+             "depth", G_TYPE_INT, depth,
+             "endianness", G_TYPE_INT, endianness, NULL);
+-        if (caps && context) {
+-          gst_ffmpeg_set_palette (caps, context);
+-        }
+       }
+     } else if (fmt) {
+       caps = gst_ff_vid_caps_new (context, codec_id, "video/x-raw-yuv",
+@@ -1857,7 +1812,7 @@
+  */
+ 
+ static GstCaps *
+-gst_ffmpeg_smpfmt_to_caps (enum SampleFormat sample_fmt,
++gst_ffmpeg_smpfmt_to_caps (enum AVSampleFormat sample_fmt,
+     AVCodecContext * context, enum CodecID codec_id)
+ {
+   GstCaps *caps = NULL;
+@@ -1867,22 +1822,22 @@
+   gboolean signedness = FALSE;
+ 
+   switch (sample_fmt) {
+-    case SAMPLE_FMT_S16:
++    case AV_SAMPLE_FMT_S16:
+       signedness = TRUE;
+       bpp = 16;
+       break;
+ 
+-    case SAMPLE_FMT_S32:
++    case AV_SAMPLE_FMT_S32:
+       signedness = TRUE;
+       bpp = 32;
+       break;
+ 
+-    case SAMPLE_FMT_FLT:
++    case AV_SAMPLE_FMT_FLT:
+       integer = FALSE;
+       bpp = 32;
+       break;
+ 
+-    case SAMPLE_FMT_DBL:
++    case AV_SAMPLE_FMT_DBL:
+       integer = FALSE;
+       bpp = 64;
+       break;
+@@ -1941,12 +1896,12 @@
+     }
+   } else {
+     GstCaps *temp;
+-    enum SampleFormat i;
++    enum AVSampleFormat i;
+     AVCodecContext ctx = { 0, };
+ 
+     ctx.channels = -1;
+     caps = gst_caps_new_empty ();
+-    for (i = 0; i <= SAMPLE_FMT_DBL; i++) {
++    for (i = 0; i <= AV_SAMPLE_FMT_DBL; i++) {
+       temp = gst_ffmpeg_smpfmt_to_caps (i, encode ? &ctx : NULL, codec_id);
+       if (temp != NULL) {
+         gst_caps_append (caps, temp);
+@@ -2049,9 +2004,9 @@
+         gst_structure_get_int (structure, "endianness", &endianness)) {
+       if (endianness == G_BYTE_ORDER) {
+         if (width == 32)
+-          context->sample_fmt = SAMPLE_FMT_FLT;
++          context->sample_fmt = AV_SAMPLE_FMT_FLT;
+         else if (width == 64)
+-          context->sample_fmt = SAMPLE_FMT_DBL;
++          context->sample_fmt = AV_SAMPLE_FMT_DBL;
+       }
+     }
+   } else {
+@@ -2062,9 +2017,9 @@
+         gst_structure_get_int (structure, "endianness", &endianness)) {
+       if ((endianness == G_BYTE_ORDER) && (signedness == TRUE)) {
+         if ((width == 16) && (depth == 16))
+-          context->sample_fmt = SAMPLE_FMT_S16;
++          context->sample_fmt = AV_SAMPLE_FMT_S16;
+         else if ((width == 32) && (depth == 32))
+-          context->sample_fmt = SAMPLE_FMT_S32;
++          context->sample_fmt = AV_SAMPLE_FMT_S32;
+       }
+     }
+   }
+@@ -2190,7 +2145,6 @@
+       } else {
+         if (bpp == 8) {
+           context->pix_fmt = PIX_FMT_PAL8;
+-          gst_ffmpeg_get_palette (caps, context);
+         }
+       }
+     }
+@@ -2576,7 +2530,6 @@
+   switch (codec_type) {
+     case AVMEDIA_TYPE_VIDEO:
+       gst_ffmpeg_caps_to_pixfmt (caps, context, codec_id == CODEC_ID_RAWVIDEO);
+-      gst_ffmpeg_get_palette (caps, context);
+       break;
+     case AVMEDIA_TYPE_AUDIO:
+       gst_ffmpeg_caps_to_smpfmt (caps, context, FALSE);
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegcodecmap.c.orig gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegcodecmap.c.orig
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegcodecmap.c.orig	1970-01-01 01:00:00.000000000 +0100
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegcodecmap.c.orig	2014-08-08 15:30:34.006867097 +0200
+@@ -0,0 +1,3447 @@
++/* GStreamer
++ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
++ * This file:
++ * Copyright (c) 2002-2004 Ronald Bultje <rbultje@ronald.bitfreak.net>
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library 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
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library General Public
++ * License along with this library; if not, write to the
++ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ * Boston, MA 02111-1307, USA.
++ */
++
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++#include <gst/gst.h>
++#ifdef HAVE_FFMPEG_UNINSTALLED
++#include <avcodec.h>
++#include <channel_layout.h>>
++#else
++#include <libavcodec/avcodec.h>
++#include <libavutil/channel_layout.h>
++#endif
++#include <string.h>
++
++#include "gstffmpeg.h"
++#include "gstffmpegcodecmap.h"
++
++#include <gst/pbutils/codec-utils.h>
++
++/*
++ * Read a palette from a caps.
++ */
++
++static void
++gst_ffmpeg_get_palette (const GstCaps * caps, AVCodecContext * context)
++{
++  GstStructure *str = gst_caps_get_structure (caps, 0);
++  const GValue *palette_v;
++  const GstBuffer *palette;
++
++  /* do we have a palette? */
++  if ((palette_v = gst_structure_get_value (str, "palette_data")) && context) {
++    palette = gst_value_get_buffer (palette_v);
++    if (GST_BUFFER_SIZE (palette) >= AVPALETTE_SIZE) {
++      if (context->palctrl)
++        av_free (context->palctrl);
++      context->palctrl = av_malloc (sizeof (AVPaletteControl));
++      context->palctrl->palette_changed = 1;
++      memcpy (context->palctrl->palette, GST_BUFFER_DATA (palette),
++          AVPALETTE_SIZE);
++    }
++  }
++}
++
++static void
++gst_ffmpeg_set_palette (GstCaps * caps, AVCodecContext * context)
++{
++  if (context->palctrl) {
++    GstBuffer *palette = gst_buffer_new_and_alloc (AVPALETTE_SIZE);
++
++    memcpy (GST_BUFFER_DATA (palette), context->palctrl->palette,
++        AVPALETTE_SIZE);
++    gst_caps_set_simple (caps, "palette_data", GST_TYPE_BUFFER, palette, NULL);
++  }
++}
++
++/* IMPORTANT: Keep this sorted by the ffmpeg channel masks */
++static const struct
++{
++  guint64 ff;
++  GstAudioChannelPosition gst;
++} _ff_to_gst_layout[] = {
++  {
++  AV_CH_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT}, {
++  AV_CH_FRONT_RIGHT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT}, {
++  AV_CH_FRONT_CENTER, GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER}, {
++  AV_CH_LOW_FREQUENCY, GST_AUDIO_CHANNEL_POSITION_LFE}, {
++  AV_CH_BACK_LEFT, GST_AUDIO_CHANNEL_POSITION_REAR_LEFT}, {
++  AV_CH_BACK_RIGHT, GST_AUDIO_CHANNEL_POSITION_REAR_RIGHT}, {
++  AV_CH_FRONT_LEFT_OF_CENTER, GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT_OF_CENTER}, {
++  AV_CH_FRONT_RIGHT_OF_CENTER, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT_OF_CENTER}, {
++  AV_CH_BACK_CENTER, GST_AUDIO_CHANNEL_POSITION_REAR_CENTER}, {
++  AV_CH_SIDE_LEFT, GST_AUDIO_CHANNEL_POSITION_SIDE_LEFT}, {
++  AV_CH_SIDE_RIGHT, GST_AUDIO_CHANNEL_POSITION_SIDE_RIGHT}, {
++  AV_CH_TOP_CENTER, GST_AUDIO_CHANNEL_POSITION_NONE}, {
++  AV_CH_TOP_FRONT_LEFT, GST_AUDIO_CHANNEL_POSITION_NONE}, {
++  AV_CH_TOP_FRONT_CENTER, GST_AUDIO_CHANNEL_POSITION_NONE}, {
++  AV_CH_TOP_FRONT_RIGHT, GST_AUDIO_CHANNEL_POSITION_NONE}, {
++  AV_CH_TOP_BACK_LEFT, GST_AUDIO_CHANNEL_POSITION_NONE}, {
++  AV_CH_TOP_BACK_CENTER, GST_AUDIO_CHANNEL_POSITION_NONE}, {
++  AV_CH_TOP_BACK_RIGHT, GST_AUDIO_CHANNEL_POSITION_NONE}, {
++  AV_CH_STEREO_LEFT, GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT}, {
++  AV_CH_STEREO_RIGHT, GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT}
++};
++
++static GstAudioChannelPosition *
++gst_ff_channel_layout_to_gst (guint64 channel_layout, guint channels)
++{
++  guint nchannels = 0, i, j;
++  GstAudioChannelPosition *pos = NULL;
++  gboolean none_layout = FALSE;
++
++  for (i = 0; i < 64; i++) {
++    if ((channel_layout & (G_GUINT64_CONSTANT (1) << i)) != 0) {
++      nchannels++;
++    }
++  }
++
++  if (channel_layout == 0) {
++    nchannels = channels;
++    none_layout = TRUE;
++  }
++
++  if (nchannels != channels) {
++    GST_ERROR ("Number of channels is different (%u != %u)", channels,
++        nchannels);
++    return NULL;
++  }
++
++  pos = g_new (GstAudioChannelPosition, nchannels);
++
++  for (i = 0, j = 0; i < G_N_ELEMENTS (_ff_to_gst_layout); i++) {
++    if ((channel_layout & _ff_to_gst_layout[i].ff) != 0) {
++      pos[j++] = _ff_to_gst_layout[i].gst;
++
++      if (_ff_to_gst_layout[i].gst == GST_AUDIO_CHANNEL_POSITION_NONE)
++        none_layout = TRUE;
++    }
++  }
++
++  if (j != nchannels) {
++    GST_WARNING ("Unknown channels in channel layout - assuming NONE layout");
++    none_layout = TRUE;
++  }
++
++  if (!none_layout && !gst_audio_check_channel_positions (pos, nchannels)) {
++    GST_ERROR ("Invalid channel layout %" G_GUINT64_FORMAT
++        " - assuming NONE layout", channel_layout);
++    none_layout = TRUE;
++  }
++
++  if (none_layout) {
++    if (nchannels == 1) {
++      pos[0] = GST_AUDIO_CHANNEL_POSITION_FRONT_MONO;
++    } else if (nchannels == 2) {
++      pos[0] = GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT;
++      pos[1] = GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT;
++    } else if (channel_layout == 0) {
++      g_free (pos);
++      pos = NULL;
++    } else {
++      for (i = 0; i < nchannels; i++)
++        pos[i] = GST_AUDIO_CHANNEL_POSITION_NONE;
++    }
++  }
++
++  if (nchannels == 1 && pos[0] == GST_AUDIO_CHANNEL_POSITION_FRONT_CENTER) {
++    GST_DEBUG ("mono common case; won't set channel positions");
++    g_free (pos);
++    pos = NULL;
++  } else if (nchannels == 2 && pos[0] == GST_AUDIO_CHANNEL_POSITION_FRONT_LEFT
++      && pos[1] == GST_AUDIO_CHANNEL_POSITION_FRONT_RIGHT) {
++    GST_DEBUG ("stereo common case; won't set channel positions");
++    g_free (pos);
++    pos = NULL;
++  }
++
++  return pos;
++}
++
++/* this macro makes a caps width fixed or unfixed width/height
++ * properties depending on whether we've got a context.
++ *
++ * See below for why we use this.
++ *
++ * We should actually do this stuff at the end, like in riff-media.c,
++ * but I'm too lazy today. Maybe later.
++ */
++static GstCaps *
++gst_ff_vid_caps_new (AVCodecContext * context, enum CodecID codec_id,
++    const char *mimetype, const char *fieldname, ...)
++{
++  GstStructure *structure = NULL;
++  GstCaps *caps = NULL;
++  va_list var_args;
++  gint i;
++
++  GST_LOG ("context:%p, codec_id:%d, mimetype:%s", context, codec_id, mimetype);
++
++  /* fixed, non probing context */
++  if (context != NULL && context->width != -1) {
++    gint num, denom;
++
++    caps = gst_caps_new_simple (mimetype,
++        "width", G_TYPE_INT, context->width,
++        "height", G_TYPE_INT, context->height, NULL);
++
++    num = context->time_base.den / context->ticks_per_frame;
++    denom = context->time_base.num;
++
++    if (!denom) {
++      GST_LOG ("invalid framerate: %d/0, -> %d/1", num, num);
++      denom = 1;
++    }
++    if (gst_util_fraction_compare (num, denom, 1000, 1) > 0) {
++      GST_LOG ("excessive framerate: %d/%d, -> 0/1", num, denom);
++      num = 0;
++      denom = 1;
++    }
++    GST_LOG ("setting framerate: %d/%d", num, denom);
++    gst_caps_set_simple (caps,
++        "framerate", GST_TYPE_FRACTION, num, denom, NULL);
++  } else {
++    /* so we are after restricted caps in this case */
++    switch (codec_id) {
++      case CODEC_ID_H261:
++      {
++        caps = gst_caps_new_simple (mimetype,
++            "width", G_TYPE_INT, 352,
++            "height", G_TYPE_INT, 288,
++            "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL);
++        gst_caps_append (caps, gst_caps_new_simple (mimetype,
++                "width", G_TYPE_INT, 176,
++                "height", G_TYPE_INT, 144,
++                "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL));
++        break;
++      }
++      case CODEC_ID_H263:
++      {
++        /* 128x96, 176x144, 352x288, 704x576, and 1408x1152. slightly reordered
++         * because we want automatic negotiation to go as close to 320x240 as
++         * possible. */
++        const static gint widths[] = { 352, 704, 176, 1408, 128 };
++        const static gint heights[] = { 288, 576, 144, 1152, 96 };
++        GstCaps *temp;
++        gint n_sizes = G_N_ELEMENTS (widths);
++
++        caps = gst_caps_new_empty ();
++        for (i = 0; i < n_sizes; i++) {
++          temp = gst_caps_new_simple (mimetype,
++              "width", G_TYPE_INT, widths[i],
++              "height", G_TYPE_INT, heights[i],
++              "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL);
++
++          gst_caps_append (caps, temp);
++        }
++        break;
++      }
++      case CODEC_ID_DVVIDEO:
++      {
++        static struct
++        {
++          guint32 csp;
++          gint width, height;
++          gint par_n, par_d;
++          gint framerate_n, framerate_d;
++        } profiles[] = {
++          {
++          GST_MAKE_FOURCC ('Y', '4', '1', 'B'), 720, 480, 10, 11, 30000, 1001}, {
++          GST_MAKE_FOURCC ('Y', '4', '1', 'B'), 720, 480, 40, 33, 30000, 1001}, {
++          GST_MAKE_FOURCC ('I', '4', '2', '0'), 720, 576, 59, 54, 25, 1}, {
++          GST_MAKE_FOURCC ('I', '4', '2', '0'), 720, 576, 118, 81, 25, 1}, {
++          GST_MAKE_FOURCC ('Y', '4', '1', 'B'), 720, 576, 59, 54, 25, 1}, {
++          GST_MAKE_FOURCC ('Y', '4', '1', 'B'), 720, 576, 118, 81, 25, 1}
++        };
++        GstCaps *temp;
++        gint n_sizes = G_N_ELEMENTS (profiles);
++
++        caps = gst_caps_new_empty ();
++        for (i = 0; i < n_sizes; i++) {
++          temp = gst_caps_new_simple (mimetype,
++              "width", G_TYPE_INT, profiles[i].width,
++              "height", G_TYPE_INT, profiles[i].height,
++              "framerate", GST_TYPE_FRACTION, profiles[i].framerate_n,
++              profiles[i].framerate_d, "pixel-aspect-ratio", GST_TYPE_FRACTION,
++              profiles[i].par_n, profiles[i].par_d, NULL);
++
++          gst_caps_append (caps, temp);
++        }
++        break;
++      }
++      case CODEC_ID_DNXHD:
++      {
++        caps = gst_caps_new_simple (mimetype,
++            "width", G_TYPE_INT, 1920,
++            "height", G_TYPE_INT, 1080,
++            "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL);
++        gst_caps_append (caps, gst_caps_new_simple (mimetype,
++                "width", G_TYPE_INT, 1280,
++                "height", G_TYPE_INT, 720,
++                "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL));
++        break;
++      }
++      default:
++        break;
++    }
++  }
++
++  /* no fixed caps or special restrictions applied;
++   * default unfixed setting */
++  if (!caps) {
++    GST_DEBUG ("Creating default caps");
++    caps = gst_caps_new_simple (mimetype,
++        "width", GST_TYPE_INT_RANGE, 16, 4096,
++        "height", GST_TYPE_INT_RANGE, 16, 4096,
++        "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, G_MAXINT, 1, NULL);
++  }
++
++  for (i = 0; i < gst_caps_get_size (caps); i++) {
++    va_start (var_args, fieldname);
++    structure = gst_caps_get_structure (caps, i);
++    gst_structure_set_valist (structure, fieldname, var_args);
++    va_end (var_args);
++  }
++
++  return caps;
++}
++
++/* same for audio - now with channels/sample rate
++ */
++static GstCaps *
++gst_ff_aud_caps_new (AVCodecContext * context, enum CodecID codec_id,
++    const char *mimetype, const char *fieldname, ...)
++{
++  GstCaps *caps = NULL;
++  GstStructure *structure = NULL;
++  gint i;
++  va_list var_args;
++
++  /* fixed, non-probing context */
++  if (context != NULL && context->channels != -1) {
++    GstAudioChannelPosition *pos;
++    guint64 channel_layout = context->channel_layout;
++
++    if (channel_layout == 0) {
++      const guint64 default_channel_set[] = {
++        0, 0, AV_CH_LAYOUT_SURROUND, AV_CH_LAYOUT_QUAD, AV_CH_LAYOUT_5POINT0,
++        AV_CH_LAYOUT_5POINT1, 0, AV_CH_LAYOUT_7POINT1
++      };
++
++      switch (codec_id) {
++        case CODEC_ID_EAC3:
++        case CODEC_ID_AC3:
++        case CODEC_ID_DTS:
++          if (context->channels > 0
++              && context->channels < G_N_ELEMENTS (default_channel_set))
++            channel_layout = default_channel_set[context->channels - 1];
++          break;
++        default:
++          break;
++      }
++    }
++
++    caps = gst_caps_new_simple (mimetype,
++        "rate", G_TYPE_INT, context->sample_rate,
++        "channels", G_TYPE_INT, context->channels, NULL);
++
++    pos = gst_ff_channel_layout_to_gst (channel_layout, context->channels);
++    if (pos != NULL) {
++      gst_audio_set_channel_positions (gst_caps_get_structure (caps, 0), pos);
++      g_free (pos);
++    }
++  } else {
++    gint maxchannels = 2;
++    const gint *rates = NULL;
++    gint n_rates = 0;
++
++    /* so we must be after restricted caps in this case */
++    switch (codec_id) {
++      case CODEC_ID_AAC:
++      case CODEC_ID_AAC_LATM:
++      case CODEC_ID_DTS:
++        maxchannels = 6;
++        break;
++      case CODEC_ID_MP2:
++      {
++        const static gint l_rates[] =
++            { 48000, 44100, 32000, 24000, 22050, 16000 };
++        n_rates = G_N_ELEMENTS (l_rates);
++        rates = l_rates;
++        break;
++      }
++      case CODEC_ID_EAC3:
++      case CODEC_ID_AC3:
++      {
++        const static gint l_rates[] = { 48000, 44100, 32000 };
++        maxchannels = 6;
++        n_rates = G_N_ELEMENTS (l_rates);
++        rates = l_rates;
++        break;
++      }
++      case CODEC_ID_ADPCM_G722:
++      {
++        const static gint l_rates[] = { 16000 };
++        n_rates = G_N_ELEMENTS (l_rates);
++        rates = l_rates;
++        maxchannels = 1;
++        break;
++      }
++      case CODEC_ID_ADPCM_G726:
++      {
++        const static gint l_rates[] = { 8000 };
++        n_rates = G_N_ELEMENTS (l_rates);
++        rates = l_rates;
++        maxchannels = 1;
++        break;
++      }
++      case CODEC_ID_ADPCM_SWF:
++      {
++        const static gint l_rates[] = { 11025, 22050, 44100 };
++        n_rates = G_N_ELEMENTS (l_rates);
++        rates = l_rates;
++        break;
++      }
++      case CODEC_ID_ROQ_DPCM:
++      {
++        const static gint l_rates[] = { 22050 };
++        n_rates = G_N_ELEMENTS (l_rates);
++        rates = l_rates;
++        break;
++      }
++      case CODEC_ID_AMR_NB:
++      {
++        const static gint l_rates[] = { 8000 };
++        maxchannels = 1;
++        n_rates = G_N_ELEMENTS (l_rates);
++        rates = l_rates;
++        break;
++      }
++      case CODEC_ID_AMR_WB:
++      {
++        const static gint l_rates[] = { 16000 };
++        maxchannels = 1;
++        n_rates = G_N_ELEMENTS (l_rates);
++        rates = l_rates;
++        break;
++      }
++      default:
++        break;
++    }
++
++    /* TODO: handle context->channel_layouts here to set
++     * the list of channel layouts supported by the encoder.
++     * Unfortunately no encoder uses this yet....
++     */
++    /* regardless of encode/decode, open up channels if applicable */
++    /* Until decoders/encoders expose the maximum number of channels
++     * they support, we whitelist them here. */
++    switch (codec_id) {
++      case CODEC_ID_WMAPRO:
++      case CODEC_ID_TRUEHD:
++        maxchannels = 8;
++        break;
++      default:
++        break;
++    }
++
++    if (maxchannels == 1)
++      caps = gst_caps_new_simple (mimetype,
++          "channels", G_TYPE_INT, maxchannels, NULL);
++    else
++      caps = gst_caps_new_simple (mimetype,
++          "channels", GST_TYPE_INT_RANGE, 1, maxchannels, NULL);
++    if (n_rates) {
++      GValue list = { 0, };
++      GstStructure *structure;
++
++      g_value_init (&list, GST_TYPE_LIST);
++      for (i = 0; i < n_rates; i++) {
++        GValue v = { 0, };
++
++        g_value_init (&v, G_TYPE_INT);
++        g_value_set_int (&v, rates[i]);
++        gst_value_list_append_value (&list, &v);
++        g_value_unset (&v);
++      }
++      structure = gst_caps_get_structure (caps, 0);
++      gst_structure_set_value (structure, "rate", &list);
++      g_value_unset (&list);
++    } else
++      gst_caps_set_simple (caps, "rate", GST_TYPE_INT_RANGE, 4000, 96000, NULL);
++  }
++
++  for (i = 0; i < gst_caps_get_size (caps); i++) {
++    va_start (var_args, fieldname);
++    structure = gst_caps_get_structure (caps, i);
++    gst_structure_set_valist (structure, fieldname, var_args);
++    va_end (var_args);
++  }
++
++  return caps;
++}
++
++/* Convert a FFMPEG codec ID and optional AVCodecContext
++ * to a GstCaps. If the context is ommitted, no fixed values
++ * for video/audio size will be included in the GstCaps
++ *
++ * CodecID is primarily meant for compressed data GstCaps!
++ *
++ * encode is a special parameter. gstffmpegdec will say
++ * FALSE, gstffmpegenc will say TRUE. The output caps
++ * depends on this, in such a way that it will be very
++ * specific, defined, fixed and correct caps for encoders,
++ * yet very wide, "forgiving" caps for decoders. Example
++ * for mp3: decode: audio/mpeg,mpegversion=1,layer=[1-3]
++ * but encode: audio/mpeg,mpegversion=1,layer=3,bitrate=x,
++ * rate=x,channels=x.
++ */
++
++GstCaps *
++gst_ffmpeg_codecid_to_caps (enum CodecID codec_id,
++    AVCodecContext * context, gboolean encode)
++{
++  GstCaps *caps = NULL;
++  gboolean buildcaps = FALSE;
++
++  GST_LOG ("codec_id:%d, context:%p, encode:%d", codec_id, context, encode);
++
++  switch (codec_id) {
++    case CODEC_ID_MPEG1VIDEO:
++      /* FIXME: bitrate */
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/mpeg",
++          "mpegversion", G_TYPE_INT, 1,
++          "systemstream", G_TYPE_BOOLEAN, FALSE, NULL);
++      break;
++
++    case CODEC_ID_MPEG2VIDEO:
++      if (encode) {
++        /* FIXME: bitrate */
++        caps = gst_ff_vid_caps_new (context, codec_id, "video/mpeg",
++            "mpegversion", G_TYPE_INT, 2,
++            "systemstream", G_TYPE_BOOLEAN, FALSE, NULL);
++      } else {
++        /* decode both MPEG-1 and MPEG-2; width/height/fps are all in
++         * the MPEG video stream headers, so may be omitted from caps. */
++        caps = gst_caps_new_simple ("video/mpeg",
++            "mpegversion", GST_TYPE_INT_RANGE, 1, 2,
++            "systemstream", G_TYPE_BOOLEAN, FALSE, NULL);
++      }
++      break;
++
++    case CODEC_ID_MPEG2VIDEO_XVMC:
++      /* this is a special ID - don't need it in GStreamer, I think */
++      break;
++
++    case CODEC_ID_H263:
++      if (encode) {
++        caps = gst_ff_vid_caps_new (context, codec_id, "video/x-h263",
++            "variant", G_TYPE_STRING, "itu",
++            "h263version", G_TYPE_STRING, "h263", NULL);
++      } else {
++        /* don't pass codec_id, we can decode other variants with the H263
++         * decoder that don't have specific size requirements
++         */
++        caps = gst_ff_vid_caps_new (context, CODEC_ID_NONE, "video/x-h263",
++            "variant", G_TYPE_STRING, "itu", NULL);
++      }
++      break;
++
++    case CODEC_ID_H263P:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-h263",
++          "variant", G_TYPE_STRING, "itu",
++          "h263version", G_TYPE_STRING, "h263p", NULL);
++      if (encode && context) {
++
++        gst_caps_set_simple (caps,
++            "annex-f", G_TYPE_BOOLEAN, context->flags & CODEC_FLAG_4MV,
++            "annex-j", G_TYPE_BOOLEAN, context->flags & CODEC_FLAG_LOOP_FILTER,
++            "annex-i", G_TYPE_BOOLEAN, context->flags & CODEC_FLAG_AC_PRED,
++            "annex-t", G_TYPE_BOOLEAN, context->flags & CODEC_FLAG_AC_PRED,
++            NULL);
++      }
++      break;
++
++    case CODEC_ID_H263I:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-intel-h263",
++          "variant", G_TYPE_STRING, "intel", NULL);
++      break;
++
++    case CODEC_ID_H261:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-h261", NULL);
++      break;
++
++    case CODEC_ID_RV10:
++    case CODEC_ID_RV20:
++    case CODEC_ID_RV30:
++    case CODEC_ID_RV40:
++    {
++      gint version;
++
++      switch (codec_id) {
++        case CODEC_ID_RV40:
++          version = 4;
++          break;
++        case CODEC_ID_RV30:
++          version = 3;
++          break;
++        case CODEC_ID_RV20:
++          version = 2;
++          break;
++        default:
++          version = 1;
++          break;
++      }
++
++      /* FIXME: context->sub_id must be filled in during decoding */
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-pn-realvideo",
++          "systemstream", G_TYPE_BOOLEAN, FALSE,
++          "rmversion", G_TYPE_INT, version, NULL);
++      if (context) {
++        gst_caps_set_simple (caps, "format", G_TYPE_INT, context->sub_id, NULL);
++        if (context->extradata_size >= 8) {
++          gst_caps_set_simple (caps,
++              "subformat", G_TYPE_INT, GST_READ_UINT32_BE (context->extradata),
++              NULL);
++        }
++      }
++    }
++      break;
++
++    case CODEC_ID_MP1:
++      /* FIXME: bitrate */
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/mpeg",
++          "mpegversion", G_TYPE_INT, 1, "layer", G_TYPE_INT, 1, NULL);
++      break;
++
++    case CODEC_ID_MP2:
++      /* FIXME: bitrate */
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/mpeg",
++          "mpegversion", G_TYPE_INT, 1, "layer", G_TYPE_INT, 2, NULL);
++      break;
++
++    case CODEC_ID_MP3:
++      if (encode) {
++        /* FIXME: bitrate */
++        caps = gst_ff_aud_caps_new (context, codec_id, "audio/mpeg",
++            "mpegversion", G_TYPE_INT, 1, "layer", G_TYPE_INT, 3, NULL);
++      } else {
++        /* Decodes MPEG-1 layer 1/2/3. Samplerate, channels et al are
++         * in the MPEG audio header, so may be omitted from caps. */
++        caps = gst_caps_new_simple ("audio/mpeg",
++            "mpegversion", G_TYPE_INT, 1,
++            "layer", GST_TYPE_INT_RANGE, 1, 3, NULL);
++      }
++      break;
++
++    case CODEC_ID_MUSEPACK7:
++      caps =
++          gst_ff_aud_caps_new (context, codec_id,
++          "audio/x-ffmpeg-parsed-musepack", "streamversion", G_TYPE_INT, 7,
++          NULL);
++      break;
++
++    case CODEC_ID_MUSEPACK8:
++      caps =
++          gst_ff_aud_caps_new (context, codec_id,
++          "audio/x-ffmpeg-parsed-musepack", "streamversion", G_TYPE_INT, 8,
++          NULL);
++      break;
++
++    case CODEC_ID_AC3:
++      /* FIXME: bitrate */
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-ac3", NULL);
++      break;
++
++    case CODEC_ID_EAC3:
++      /* FIXME: bitrate */
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-eac3", NULL);
++      break;
++
++    case CODEC_ID_TRUEHD:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-true-hd", NULL);
++      break;
++
++    case CODEC_ID_ATRAC1:
++      caps =
++          gst_ff_aud_caps_new (context, codec_id, "audio/x-vnd.sony.atrac1",
++          NULL);
++      break;
++
++    case CODEC_ID_ATRAC3:
++      caps =
++          gst_ff_aud_caps_new (context, codec_id, "audio/x-vnd.sony.atrac3",
++          NULL);
++      break;
++
++    case CODEC_ID_DTS:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-dts", NULL);
++      break;
++
++    case CODEC_ID_APE:
++      caps =
++          gst_ff_aud_caps_new (context, codec_id, "audio/x-ffmpeg-parsed-ape",
++          NULL);
++      if (context) {
++        gst_caps_set_simple (caps,
++            "depth", G_TYPE_INT, context->bits_per_coded_sample, NULL);
++      }
++      break;
++
++    case CODEC_ID_MLP:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-mlp", NULL);
++      break;
++
++    case CODEC_ID_IMC:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-imc", NULL);
++      break;
++
++      /* MJPEG is normal JPEG, Motion-JPEG and Quicktime MJPEG-A. MJPEGB
++       * is Quicktime's MJPEG-B. LJPEG is lossless JPEG. I don't know what
++       * sp5x is, but it's apparently something JPEG... We don't separate
++       * between those in GStreamer. Should we (at least between MJPEG,
++       * MJPEG-B and sp5x decoding...)? */
++    case CODEC_ID_MJPEG:
++    case CODEC_ID_LJPEG:
++      caps = gst_ff_vid_caps_new (context, codec_id, "image/jpeg", NULL);
++      break;
++
++    case CODEC_ID_SP5X:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/sp5x", NULL);
++      break;
++
++    case CODEC_ID_MJPEGB:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-mjpeg-b", NULL);
++      break;
++
++    case CODEC_ID_MPEG4:
++      if (encode && context != NULL) {
++        /* I'm not exactly sure what ffmpeg outputs... ffmpeg itself uses
++         * the AVI fourcc 'DIVX', but 'mp4v' for Quicktime... */
++        switch (context->codec_tag) {
++          case GST_MAKE_FOURCC ('D', 'I', 'V', 'X'):
++            caps = gst_ff_vid_caps_new (context, codec_id, "video/x-divx",
++                "divxversion", G_TYPE_INT, 5, NULL);
++            break;
++          case GST_MAKE_FOURCC ('m', 'p', '4', 'v'):
++          default:
++            /* FIXME: bitrate */
++            caps = gst_ff_vid_caps_new (context, codec_id, "video/mpeg",
++                "systemstream", G_TYPE_BOOLEAN, FALSE,
++                "mpegversion", G_TYPE_INT, 4, NULL);
++            break;
++        }
++      } else {
++        /* The trick here is to separate xvid, divx, mpeg4, 3ivx et al */
++        caps = gst_ff_vid_caps_new (context, codec_id, "video/mpeg",
++            "mpegversion", G_TYPE_INT, 4,
++            "systemstream", G_TYPE_BOOLEAN, FALSE, NULL);
++        if (encode) {
++          gst_caps_append (caps, gst_ff_vid_caps_new (context, codec_id,
++                  "video/x-divx", "divxversion", G_TYPE_INT, 5, NULL));
++        } else {
++          gst_caps_append (caps, gst_ff_vid_caps_new (context, codec_id,
++                  "video/x-divx", "divxversion", GST_TYPE_INT_RANGE, 4, 5,
++                  NULL));
++          gst_caps_append (caps, gst_ff_vid_caps_new (context, codec_id,
++                  "video/x-xvid", NULL));
++          gst_caps_append (caps, gst_ff_vid_caps_new (context, codec_id,
++                  "video/x-3ivx", NULL));
++        }
++      }
++      break;
++
++    case CODEC_ID_RAWVIDEO:
++      caps =
++          gst_ffmpeg_codectype_to_caps (AVMEDIA_TYPE_VIDEO, context, codec_id,
++          encode);
++      break;
++
++    case CODEC_ID_MSMPEG4V1:
++    case CODEC_ID_MSMPEG4V2:
++    case CODEC_ID_MSMPEG4V3:
++    {
++      gint version = 41 + codec_id - CODEC_ID_MSMPEG4V1;
++
++      /* encode-FIXME: bitrate */
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-msmpeg",
++          "msmpegversion", G_TYPE_INT, version, NULL);
++      if (!encode && codec_id == CODEC_ID_MSMPEG4V3) {
++        gst_caps_append (caps, gst_ff_vid_caps_new (context, codec_id,
++                "video/x-divx", "divxversion", G_TYPE_INT, 3, NULL));
++      }
++    }
++      break;
++
++    case CODEC_ID_WMV1:
++    case CODEC_ID_WMV2:
++    {
++      gint version = (codec_id == CODEC_ID_WMV1) ? 1 : 2;
++
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-wmv",
++          "wmvversion", G_TYPE_INT, version, NULL);
++    }
++      break;
++
++    case CODEC_ID_FLV1:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-flash-video",
++          "flvversion", G_TYPE_INT, 1, NULL);
++      break;
++
++    case CODEC_ID_SVQ1:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-svq",
++          "svqversion", G_TYPE_INT, 1, NULL);
++      break;
++
++    case CODEC_ID_SVQ3:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-svq",
++          "svqversion", G_TYPE_INT, 3, NULL);
++      break;
++
++    case CODEC_ID_DVAUDIO:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-dv", NULL);
++      break;
++
++    case CODEC_ID_DVVIDEO:
++    {
++      if (encode && context) {
++        guint32 fourcc;
++
++        switch (context->pix_fmt) {
++          case PIX_FMT_YUYV422:
++            fourcc = GST_MAKE_FOURCC ('Y', 'U', 'Y', '2');
++            break;
++          case PIX_FMT_YUV420P:
++            fourcc = GST_MAKE_FOURCC ('I', '4', '2', '0');
++            break;
++          case PIX_FMT_YUVA420P:
++            fourcc = GST_MAKE_FOURCC ('A', '4', '2', '0');
++            break;
++          case PIX_FMT_YUV411P:
++            fourcc = GST_MAKE_FOURCC ('Y', '4', '1', 'B');
++            break;
++          case PIX_FMT_YUV422P:
++            fourcc = GST_MAKE_FOURCC ('Y', '4', '2', 'B');
++            break;
++          case PIX_FMT_YUV410P:
++            fourcc = GST_MAKE_FOURCC ('Y', 'U', 'V', '9');
++            break;
++          default:
++            GST_WARNING
++                ("Couldnt' find fourcc for pixfmt %d, defaulting to I420",
++                context->pix_fmt);
++            fourcc = GST_MAKE_FOURCC ('I', '4', '2', '0');
++            break;
++        }
++        caps = gst_ff_vid_caps_new (context, codec_id, "video/x-dv",
++            "systemstream", G_TYPE_BOOLEAN, FALSE,
++            "format", GST_TYPE_FOURCC, fourcc, NULL);
++      } else {
++        caps = gst_ff_vid_caps_new (context, codec_id, "video/x-dv",
++            "systemstream", G_TYPE_BOOLEAN, FALSE, NULL);
++      }
++    }
++      break;
++
++    case CODEC_ID_WMAV1:
++    case CODEC_ID_WMAV2:
++    {
++      gint version = (codec_id == CODEC_ID_WMAV1) ? 1 : 2;
++
++      if (context) {
++        caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-wma",
++            "wmaversion", G_TYPE_INT, version,
++            "block_align", G_TYPE_INT, context->block_align,
++            "bitrate", G_TYPE_INT, context->bit_rate, NULL);
++      } else {
++        caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-wma",
++            "wmaversion", G_TYPE_INT, version,
++            "block_align", GST_TYPE_INT_RANGE, 0, G_MAXINT,
++            "bitrate", GST_TYPE_INT_RANGE, 0, G_MAXINT, NULL);
++      }
++    }
++      break;
++    case CODEC_ID_WMAPRO:
++    {
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-wma",
++          "wmaversion", G_TYPE_INT, 3, NULL);
++      break;
++    }
++
++    case CODEC_ID_WMAVOICE:
++    {
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-wms", NULL);
++      break;
++    }
++
++    case CODEC_ID_MACE3:
++    case CODEC_ID_MACE6:
++    {
++      gint version = (codec_id == CODEC_ID_MACE3) ? 3 : 6;
++
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-mace",
++          "maceversion", G_TYPE_INT, version, NULL);
++    }
++      break;
++
++    case CODEC_ID_HUFFYUV:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-huffyuv", NULL);
++      if (context) {
++        gst_caps_set_simple (caps,
++            "bpp", G_TYPE_INT, context->bits_per_coded_sample, NULL);
++      }
++      break;
++
++    case CODEC_ID_CYUV:
++      caps =
++          gst_ff_vid_caps_new (context, codec_id, "video/x-compressed-yuv",
++          NULL);
++      break;
++
++    case CODEC_ID_H264:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-h264", NULL);
++      break;
++
++    case CODEC_ID_INDEO5:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-indeo",
++          "indeoversion", G_TYPE_INT, 5, NULL);
++      break;
++
++    case CODEC_ID_INDEO3:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-indeo",
++          "indeoversion", G_TYPE_INT, 3, NULL);
++      break;
++
++    case CODEC_ID_INDEO2:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-indeo",
++          "indeoversion", G_TYPE_INT, 2, NULL);
++      break;
++
++    case CODEC_ID_FLASHSV:
++      caps =
++          gst_ff_vid_caps_new (context, codec_id, "video/x-flash-screen", NULL);
++      break;
++
++    case CODEC_ID_VP3:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-vp3", NULL);
++      break;
++
++    case CODEC_ID_VP5:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-vp5", NULL);
++      break;
++
++    case CODEC_ID_VP6:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-vp6", NULL);
++      break;
++
++    case CODEC_ID_VP6F:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-vp6-flash", NULL);
++      break;
++
++    case CODEC_ID_VP6A:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-vp6-alpha", NULL);
++      break;
++
++    case CODEC_ID_VP8:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-vp8", NULL);
++      break;
++
++    case CODEC_ID_THEORA:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-theora", NULL);
++      break;
++
++    case CODEC_ID_AAC:
++    {
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/mpeg", NULL);
++
++      if (!encode) {
++        GValue arr = { 0, };
++        GValue item = { 0, };
++
++        g_value_init (&arr, GST_TYPE_LIST);
++        g_value_init (&item, G_TYPE_INT);
++        g_value_set_int (&item, 2);
++        gst_value_list_append_value (&arr, &item);
++        g_value_set_int (&item, 4);
++        gst_value_list_append_value (&arr, &item);
++        g_value_unset (&item);
++
++        gst_caps_set_value (caps, "mpegversion", &arr);
++        g_value_unset (&arr);
++
++        g_value_init (&arr, GST_TYPE_LIST);
++        g_value_init (&item, G_TYPE_STRING);
++        g_value_set_string (&item, "raw");
++        gst_value_list_append_value (&arr, &item);
++        g_value_set_string (&item, "adts");
++        gst_value_list_append_value (&arr, &item);
++        g_value_set_string (&item, "adif");
++        gst_value_list_append_value (&arr, &item);
++        g_value_unset (&item);
++
++        gst_caps_set_value (caps, "stream-format", &arr);
++        g_value_unset (&arr);
++      } else {
++        gst_caps_set_simple (caps, "mpegversion", G_TYPE_INT, 4,
++            "stream-format", G_TYPE_STRING, "raw",
++            "base-profile", G_TYPE_STRING, "lc", NULL);
++
++        if (context && context->extradata_size > 0)
++          gst_codec_utils_aac_caps_set_level_and_profile (caps,
++              context->extradata, context->extradata_size);
++      }
++
++      break;
++    }
++    case CODEC_ID_AAC_LATM:    /* LATM/LOAS AAC syntax */
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/mpeg",
++          "mpegversion", G_TYPE_INT, 4, "stream-format", G_TYPE_STRING, "loas",
++          NULL);
++      break;
++
++    case CODEC_ID_ASV1:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-asus",
++          "asusversion", G_TYPE_INT, 1, NULL);
++      break;
++    case CODEC_ID_ASV2:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-asus",
++          "asusversion", G_TYPE_INT, 2, NULL);
++      break;
++
++    case CODEC_ID_FFV1:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-ffv",
++          "ffvversion", G_TYPE_INT, 1, NULL);
++      break;
++
++    case CODEC_ID_4XM:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-4xm", NULL);
++      break;
++
++    case CODEC_ID_XAN_WC3:
++    case CODEC_ID_XAN_WC4:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-xan",
++          "wcversion", G_TYPE_INT, 3 - CODEC_ID_XAN_WC3 + codec_id, NULL);
++      break;
++
++    case CODEC_ID_CLJR:
++      caps =
++          gst_ff_vid_caps_new (context, codec_id,
++          "video/x-cirrus-logic-accupak", NULL);
++      break;
++
++    case CODEC_ID_FRAPS:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-fraps", NULL);
++      break;
++
++    case CODEC_ID_MDEC:
++    case CODEC_ID_ROQ:
++    case CODEC_ID_INTERPLAY_VIDEO:
++      buildcaps = TRUE;
++      break;
++
++    case CODEC_ID_VCR1:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-ati-vcr",
++          "vcrversion", G_TYPE_INT, 1, NULL);
++      break;
++
++    case CODEC_ID_RPZA:
++      caps =
++          gst_ff_vid_caps_new (context, codec_id, "video/x-apple-video", NULL);
++      break;
++
++    case CODEC_ID_CINEPAK:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-cinepak", NULL);
++      break;
++
++      /* WS_VQA belogns here (order) */
++
++    case CODEC_ID_MSRLE:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-rle",
++          "layout", G_TYPE_STRING, "microsoft", NULL);
++      if (context) {
++        gst_caps_set_simple (caps,
++            "depth", G_TYPE_INT, (gint) context->bits_per_coded_sample, NULL);
++      } else {
++        gst_caps_set_simple (caps, "depth", GST_TYPE_INT_RANGE, 1, 64, NULL);
++      }
++      break;
++
++    case CODEC_ID_QTRLE:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-rle",
++          "layout", G_TYPE_STRING, "quicktime", NULL);
++      if (context) {
++        gst_caps_set_simple (caps,
++            "depth", G_TYPE_INT, (gint) context->bits_per_coded_sample, NULL);
++      } else {
++        gst_caps_set_simple (caps, "depth", GST_TYPE_INT_RANGE, 1, 64, NULL);
++      }
++      break;
++
++    case CODEC_ID_MSVIDEO1:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-msvideocodec",
++          "msvideoversion", G_TYPE_INT, 1, NULL);
++      break;
++
++    case CODEC_ID_WMV3:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-wmv",
++          "wmvversion", G_TYPE_INT, 3, NULL);
++      break;
++    case CODEC_ID_VC1:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-wmv",
++          "wmvversion", G_TYPE_INT, 3, "format", GST_TYPE_FOURCC,
++          GST_MAKE_FOURCC ('W', 'V', 'C', '1'), NULL);
++      break;
++    case CODEC_ID_QDM2:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-qdm2", NULL);
++      break;
++
++    case CODEC_ID_MSZH:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-mszh", NULL);
++      break;
++
++    case CODEC_ID_ZLIB:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-zlib", NULL);
++      break;
++
++    case CODEC_ID_TRUEMOTION1:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-truemotion",
++          "trueversion", G_TYPE_INT, 1, NULL);
++      break;
++    case CODEC_ID_TRUEMOTION2:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-truemotion",
++          "trueversion", G_TYPE_INT, 2, NULL);
++      break;
++
++    case CODEC_ID_ULTI:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-ultimotion",
++          NULL);
++      break;
++
++    case CODEC_ID_TSCC:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-camtasia", NULL);
++      if (context) {
++        gst_caps_set_simple (caps,
++            "depth", G_TYPE_INT, (gint) context->bits_per_coded_sample, NULL);
++      } else {
++        gst_caps_set_simple (caps, "depth", GST_TYPE_INT_RANGE, 8, 32, NULL);
++      }
++      break;
++
++    case CODEC_ID_KMVC:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-kmvc", NULL);
++      break;
++
++    case CODEC_ID_NUV:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-nuv", NULL);
++      break;
++
++    case CODEC_ID_GIF:
++      caps = gst_ff_vid_caps_new (context, codec_id, "image/gif", NULL);
++      break;
++
++    case CODEC_ID_PNG:
++      caps = gst_ff_vid_caps_new (context, codec_id, "image/png", NULL);
++      break;
++
++    case CODEC_ID_PPM:
++      caps = gst_ff_vid_caps_new (context, codec_id, "image/ppm", NULL);
++      break;
++
++    case CODEC_ID_PBM:
++      caps = gst_ff_vid_caps_new (context, codec_id, "image/pbm", NULL);
++      break;
++
++    case CODEC_ID_PAM:
++      caps =
++          gst_ff_vid_caps_new (context, codec_id, "image/x-portable-anymap",
++          NULL);
++      break;
++
++    case CODEC_ID_PGM:
++      caps =
++          gst_ff_vid_caps_new (context, codec_id, "image/x-portable-graymap",
++          NULL);
++      break;
++
++    case CODEC_ID_PCX:
++      caps = gst_ff_vid_caps_new (context, codec_id, "image/x-pcx", NULL);
++      break;
++
++    case CODEC_ID_SGI:
++      caps = gst_ff_vid_caps_new (context, codec_id, "image/x-sgi", NULL);
++      break;
++
++    case CODEC_ID_TARGA:
++      caps = gst_ff_vid_caps_new (context, codec_id, "image/x-tga", NULL);
++      break;
++
++    case CODEC_ID_TIFF:
++      caps = gst_ff_vid_caps_new (context, codec_id, "image/tiff", NULL);
++      break;
++
++    case CODEC_ID_SUNRAST:
++      caps =
++          gst_ff_vid_caps_new (context, codec_id, "image/x-sun-raster", NULL);
++      break;
++
++    case CODEC_ID_SMC:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-smc", NULL);
++      break;
++
++    case CODEC_ID_QDRAW:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-qdrw", NULL);
++      break;
++
++    case CODEC_ID_DNXHD:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-dnxhd", NULL);
++      break;
++
++    case CODEC_ID_MIMIC:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-mimic", NULL);
++      break;
++
++    case CODEC_ID_VMNC:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-vmnc", NULL);
++      break;
++
++    case CODEC_ID_TRUESPEECH:
++      caps =
++          gst_ff_aud_caps_new (context, codec_id, "audio/x-truespeech", NULL);
++      break;
++
++    case CODEC_ID_QCELP:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/qcelp", NULL);
++      break;
++
++    case CODEC_ID_AMV:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-amv", NULL);
++      break;
++
++    case CODEC_ID_AASC:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-aasc", NULL);
++      break;
++
++    case CODEC_ID_LOCO:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-loco", NULL);
++      break;
++
++    case CODEC_ID_ZMBV:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-zmbv", NULL);
++      break;
++
++    case CODEC_ID_LAGARITH:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-lagarith", NULL);
++      break;
++
++    case CODEC_ID_CSCD:
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-camstudio", NULL);
++      if (context) {
++        gst_caps_set_simple (caps,
++            "depth", G_TYPE_INT, (gint) context->bits_per_coded_sample, NULL);
++      } else {
++        gst_caps_set_simple (caps, "depth", GST_TYPE_INT_RANGE, 8, 32, NULL);
++      }
++      break;
++
++    case CODEC_ID_WS_VQA:
++    case CODEC_ID_IDCIN:
++    case CODEC_ID_8BPS:
++    case CODEC_ID_FLIC:
++    case CODEC_ID_VMDVIDEO:
++    case CODEC_ID_VMDAUDIO:
++    case CODEC_ID_SNOW:
++    case CODEC_ID_VIXL:
++    case CODEC_ID_QPEG:
++    case CODEC_ID_PGMYUV:
++    case CODEC_ID_FFVHUFF:
++    case CODEC_ID_WNV1:
++    case CODEC_ID_MP3ADU:
++    case CODEC_ID_MP3ON4:
++    case CODEC_ID_WESTWOOD_SND1:
++    case CODEC_ID_MMVIDEO:
++    case CODEC_ID_AVS:
++    case CODEC_ID_CAVS:
++      buildcaps = TRUE;
++      break;
++
++      /* weird quasi-codecs for the demuxers only */
++    case CODEC_ID_PCM_S16LE:
++    case CODEC_ID_PCM_S16BE:
++    case CODEC_ID_PCM_U16LE:
++    case CODEC_ID_PCM_U16BE:
++    case CODEC_ID_PCM_S8:
++    case CODEC_ID_PCM_U8:
++    {
++      gint width = 0, depth = 0, endianness = 0;
++      gboolean signedness = FALSE;      /* blabla */
++
++      switch (codec_id) {
++        case CODEC_ID_PCM_S16LE:
++          width = 16;
++          depth = 16;
++          endianness = G_LITTLE_ENDIAN;
++          signedness = TRUE;
++          break;
++        case CODEC_ID_PCM_S16BE:
++          width = 16;
++          depth = 16;
++          endianness = G_BIG_ENDIAN;
++          signedness = TRUE;
++          break;
++        case CODEC_ID_PCM_U16LE:
++          width = 16;
++          depth = 16;
++          endianness = G_LITTLE_ENDIAN;
++          signedness = FALSE;
++          break;
++        case CODEC_ID_PCM_U16BE:
++          width = 16;
++          depth = 16;
++          endianness = G_BIG_ENDIAN;
++          signedness = FALSE;
++          break;
++        case CODEC_ID_PCM_S8:
++          width = 8;
++          depth = 8;
++          endianness = G_BYTE_ORDER;
++          signedness = TRUE;
++          break;
++        case CODEC_ID_PCM_U8:
++          width = 8;
++          depth = 8;
++          endianness = G_BYTE_ORDER;
++          signedness = FALSE;
++          break;
++        default:
++          g_assert (0);         /* don't worry, we never get here */
++          break;
++      }
++
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-raw-int",
++          "width", G_TYPE_INT, width,
++          "depth", G_TYPE_INT, depth,
++          "endianness", G_TYPE_INT, endianness,
++          "signed", G_TYPE_BOOLEAN, signedness, NULL);
++    }
++      break;
++
++    case CODEC_ID_PCM_MULAW:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-mulaw", NULL);
++      break;
++
++    case CODEC_ID_PCM_ALAW:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-alaw", NULL);
++      break;
++
++    case CODEC_ID_ADPCM_G722:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/G722", NULL);
++      if (context)
++        gst_caps_set_simple (caps,
++            "block_align", G_TYPE_INT, context->block_align,
++            "bitrate", G_TYPE_INT, context->bit_rate, NULL);
++      break;
++
++    case CODEC_ID_ADPCM_G726:
++    {
++      /* the G726 decoder can also handle G721 */
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-adpcm",
++          "layout", G_TYPE_STRING, "g726", NULL);
++      if (context)
++        gst_caps_set_simple (caps,
++            "block_align", G_TYPE_INT, context->block_align,
++            "bitrate", G_TYPE_INT, context->bit_rate, NULL);
++
++      if (!encode) {
++        gst_caps_append (caps, gst_caps_new_simple ("audio/x-adpcm",
++                "layout", G_TYPE_STRING, "g721",
++                "channels", G_TYPE_INT, 1, "rate", G_TYPE_INT, 8000, NULL));
++      }
++      break;
++    }
++    case CODEC_ID_ADPCM_IMA_QT:
++    case CODEC_ID_ADPCM_IMA_WAV:
++    case CODEC_ID_ADPCM_IMA_DK3:
++    case CODEC_ID_ADPCM_IMA_DK4:
++    case CODEC_ID_ADPCM_IMA_WS:
++    case CODEC_ID_ADPCM_IMA_SMJPEG:
++    case CODEC_ID_ADPCM_IMA_AMV:
++    case CODEC_ID_ADPCM_IMA_ISS:
++    case CODEC_ID_ADPCM_IMA_EA_EACS:
++    case CODEC_ID_ADPCM_IMA_EA_SEAD:
++    case CODEC_ID_ADPCM_MS:
++    case CODEC_ID_ADPCM_4XM:
++    case CODEC_ID_ADPCM_XA:
++    case CODEC_ID_ADPCM_ADX:
++    case CODEC_ID_ADPCM_EA:
++    case CODEC_ID_ADPCM_CT:
++    case CODEC_ID_ADPCM_SWF:
++    case CODEC_ID_ADPCM_YAMAHA:
++    case CODEC_ID_ADPCM_SBPRO_2:
++    case CODEC_ID_ADPCM_SBPRO_3:
++    case CODEC_ID_ADPCM_SBPRO_4:
++    case CODEC_ID_ADPCM_EA_R1:
++    case CODEC_ID_ADPCM_EA_R2:
++    case CODEC_ID_ADPCM_EA_R3:
++    case CODEC_ID_ADPCM_EA_MAXIS_XA:
++    case CODEC_ID_ADPCM_EA_XAS:
++    case CODEC_ID_ADPCM_THP:
++    {
++      const gchar *layout = NULL;
++
++      switch (codec_id) {
++        case CODEC_ID_ADPCM_IMA_QT:
++          layout = "quicktime";
++          break;
++        case CODEC_ID_ADPCM_IMA_WAV:
++          layout = "dvi";
++          break;
++        case CODEC_ID_ADPCM_IMA_DK3:
++          layout = "dk3";
++          break;
++        case CODEC_ID_ADPCM_IMA_DK4:
++          layout = "dk4";
++          break;
++        case CODEC_ID_ADPCM_IMA_WS:
++          layout = "westwood";
++          break;
++        case CODEC_ID_ADPCM_IMA_SMJPEG:
++          layout = "smjpeg";
++          break;
++        case CODEC_ID_ADPCM_IMA_AMV:
++          layout = "amv";
++          break;
++        case CODEC_ID_ADPCM_IMA_ISS:
++          layout = "iss";
++          break;
++        case CODEC_ID_ADPCM_IMA_EA_EACS:
++          layout = "ea-eacs";
++          break;
++        case CODEC_ID_ADPCM_IMA_EA_SEAD:
++          layout = "ea-sead";
++          break;
++        case CODEC_ID_ADPCM_MS:
++          layout = "microsoft";
++          break;
++        case CODEC_ID_ADPCM_4XM:
++          layout = "4xm";
++          break;
++        case CODEC_ID_ADPCM_XA:
++          layout = "xa";
++          break;
++        case CODEC_ID_ADPCM_ADX:
++          layout = "adx";
++          break;
++        case CODEC_ID_ADPCM_EA:
++          layout = "ea";
++          break;
++        case CODEC_ID_ADPCM_CT:
++          layout = "ct";
++          break;
++        case CODEC_ID_ADPCM_SWF:
++          layout = "swf";
++          break;
++        case CODEC_ID_ADPCM_YAMAHA:
++          layout = "yamaha";
++          break;
++        case CODEC_ID_ADPCM_SBPRO_2:
++          layout = "sbpro2";
++          break;
++        case CODEC_ID_ADPCM_SBPRO_3:
++          layout = "sbpro3";
++          break;
++        case CODEC_ID_ADPCM_SBPRO_4:
++          layout = "sbpro4";
++          break;
++        case CODEC_ID_ADPCM_EA_R1:
++          layout = "ea-r1";
++          break;
++        case CODEC_ID_ADPCM_EA_R2:
++          layout = "ea-r3";
++          break;
++        case CODEC_ID_ADPCM_EA_R3:
++          layout = "ea-r3";
++          break;
++        case CODEC_ID_ADPCM_EA_MAXIS_XA:
++          layout = "ea-maxis-xa";
++          break;
++        case CODEC_ID_ADPCM_EA_XAS:
++          layout = "ea-xas";
++          break;
++        case CODEC_ID_ADPCM_THP:
++          layout = "thp";
++          break;
++        default:
++          g_assert (0);         /* don't worry, we never get here */
++          break;
++      }
++
++      /* FIXME: someone please check whether we need additional properties
++       * in this caps definition. */
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-adpcm",
++          "layout", G_TYPE_STRING, layout, NULL);
++      if (context)
++        gst_caps_set_simple (caps,
++            "block_align", G_TYPE_INT, context->block_align,
++            "bitrate", G_TYPE_INT, context->bit_rate, NULL);
++    }
++      break;
++
++    case CODEC_ID_AMR_NB:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/AMR", NULL);
++      break;
++
++    case CODEC_ID_AMR_WB:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/AMR-WB", NULL);
++      break;
++
++    case CODEC_ID_GSM:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-gsm", NULL);
++      break;
++
++    case CODEC_ID_GSM_MS:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/ms-gsm", NULL);
++      break;
++
++    case CODEC_ID_NELLYMOSER:
++      caps =
++          gst_ff_aud_caps_new (context, codec_id, "audio/x-nellymoser", NULL);
++      break;
++
++    case CODEC_ID_SIPR:
++    {
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-sipro", NULL);
++      if (context) {
++        gst_caps_set_simple (caps,
++            "leaf_size", G_TYPE_INT, context->block_align,
++            "bitrate", G_TYPE_INT, context->bit_rate, NULL);
++      }
++    }
++      break;
++
++    case CODEC_ID_RA_144:
++    case CODEC_ID_RA_288:
++    case CODEC_ID_COOK:
++    {
++      gint version = 0;
++
++      switch (codec_id) {
++        case CODEC_ID_RA_144:
++          version = 1;
++          break;
++        case CODEC_ID_RA_288:
++          version = 2;
++          break;
++        case CODEC_ID_COOK:
++          version = 8;
++          break;
++        default:
++          break;
++      }
++
++      /* FIXME: properties? */
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-pn-realaudio",
++          "raversion", G_TYPE_INT, version, NULL);
++      if (context) {
++        gst_caps_set_simple (caps,
++            "leaf_size", G_TYPE_INT, context->block_align,
++            "bitrate", G_TYPE_INT, context->bit_rate, NULL);
++      }
++    }
++      break;
++
++    case CODEC_ID_ROQ_DPCM:
++    case CODEC_ID_INTERPLAY_DPCM:
++    case CODEC_ID_XAN_DPCM:
++    case CODEC_ID_SOL_DPCM:
++    {
++      const gchar *layout = NULL;
++
++      switch (codec_id) {
++        case CODEC_ID_ROQ_DPCM:
++          layout = "roq";
++          break;
++        case CODEC_ID_INTERPLAY_DPCM:
++          layout = "interplay";
++          break;
++        case CODEC_ID_XAN_DPCM:
++          layout = "xan";
++          break;
++        case CODEC_ID_SOL_DPCM:
++          layout = "sol";
++          break;
++        default:
++          g_assert (0);         /* don't worry, we never get here */
++          break;
++      }
++
++      /* FIXME: someone please check whether we need additional properties
++       * in this caps definition. */
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-dpcm",
++          "layout", G_TYPE_STRING, layout, NULL);
++      if (context)
++        gst_caps_set_simple (caps,
++            "block_align", G_TYPE_INT, context->block_align,
++            "bitrate", G_TYPE_INT, context->bit_rate, NULL);
++    }
++      break;
++
++    case CODEC_ID_SHORTEN:
++      caps = gst_caps_new_simple ("audio/x-shorten", NULL);
++      break;
++
++    case CODEC_ID_ALAC:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-alac", NULL);
++      if (context) {
++        gst_caps_set_simple (caps,
++            "samplesize", G_TYPE_INT, context->bits_per_coded_sample, NULL);
++      }
++      break;
++
++    case CODEC_ID_FLAC:
++      /* Note that ffmpeg has no encoder yet, but just for safety. In the
++       * encoder case, we want to add things like samplerate, channels... */
++      if (!encode) {
++        caps = gst_caps_new_simple ("audio/x-flac", NULL);
++      }
++      break;
++
++    case CODEC_ID_DVD_SUBTITLE:
++    case CODEC_ID_DVB_SUBTITLE:
++      caps = NULL;
++      break;
++    case CODEC_ID_BMP:
++      caps = gst_caps_new_simple ("image/bmp", NULL);
++      break;
++    case CODEC_ID_TTA:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-tta", NULL);
++      if (context) {
++        gst_caps_set_simple (caps,
++            "samplesize", G_TYPE_INT, context->bits_per_coded_sample, NULL);
++      }
++      break;
++    case CODEC_ID_TWINVQ:
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-twin-vq", NULL);
++      break;
++    default:
++      GST_DEBUG ("Unknown codec ID %d, please add mapping here", codec_id);
++      break;
++  }
++
++  if (buildcaps) {
++    AVCodec *codec;
++
++    if ((codec = avcodec_find_decoder (codec_id)) ||
++        (codec = avcodec_find_encoder (codec_id))) {
++      gchar *mime = NULL;
++
++      GST_LOG ("Could not create stream format caps for %s", codec->name);
++
++      switch (codec->type) {
++        case AVMEDIA_TYPE_VIDEO:
++          mime = g_strdup_printf ("video/x-gst_ff-%s", codec->name);
++          caps = gst_ff_vid_caps_new (context, codec_id, mime, NULL);
++          g_free (mime);
++          break;
++        case AVMEDIA_TYPE_AUDIO:
++          mime = g_strdup_printf ("audio/x-gst_ff-%s", codec->name);
++          caps = gst_ff_aud_caps_new (context, codec_id, mime, NULL);
++          if (context)
++            gst_caps_set_simple (caps,
++                "block_align", G_TYPE_INT, context->block_align,
++                "bitrate", G_TYPE_INT, context->bit_rate, NULL);
++          g_free (mime);
++          break;
++        default:
++          break;
++      }
++    }
++  }
++
++  if (caps != NULL) {
++
++    /* set private data */
++    if (context && context->extradata_size > 0) {
++      GstBuffer *data = gst_buffer_new_and_alloc (context->extradata_size);
++
++      memcpy (GST_BUFFER_DATA (data), context->extradata,
++          context->extradata_size);
++      gst_caps_set_simple (caps, "codec_data", GST_TYPE_BUFFER, data, NULL);
++      gst_buffer_unref (data);
++    }
++
++    /* palette */
++    if (context) {
++      gst_ffmpeg_set_palette (caps, context);
++    }
++
++    GST_LOG ("caps for codec_id=%d: %" GST_PTR_FORMAT, codec_id, caps);
++
++  } else {
++    GST_LOG ("No caps found for codec_id=%d", codec_id);
++  }
++
++  return caps;
++}
++
++/* Convert a FFMPEG Pixel Format and optional AVCodecContext
++ * to a GstCaps. If the context is ommitted, no fixed values
++ * for video/audio size will be included in the GstCaps
++ *
++ * See below for usefullness
++ */
++
++GstCaps *
++gst_ffmpeg_pixfmt_to_caps (enum PixelFormat pix_fmt, AVCodecContext * context,
++    enum CodecID codec_id)
++{
++  GstCaps *caps = NULL;
++
++  int bpp = 0, depth = 0, endianness = 0;
++  gulong g_mask = 0, r_mask = 0, b_mask = 0, a_mask = 0;
++  guint32 fmt = 0;
++
++  switch (pix_fmt) {
++    case PIX_FMT_YUVJ420P:
++    case PIX_FMT_YUV420P:
++      fmt = GST_MAKE_FOURCC ('I', '4', '2', '0');
++      break;
++    case PIX_FMT_YUVA420P:
++      fmt = GST_MAKE_FOURCC ('A', '4', '2', '0');
++      break;
++    case PIX_FMT_YUYV422:
++      fmt = GST_MAKE_FOURCC ('Y', 'U', 'Y', '2');
++      break;
++    case PIX_FMT_RGB24:
++      bpp = depth = 24;
++      endianness = G_BIG_ENDIAN;
++      r_mask = 0xff0000;
++      g_mask = 0x00ff00;
++      b_mask = 0x0000ff;
++      break;
++    case PIX_FMT_BGR24:
++      bpp = depth = 24;
++      endianness = G_BIG_ENDIAN;
++      r_mask = 0x0000ff;
++      g_mask = 0x00ff00;
++      b_mask = 0xff0000;
++      break;
++    case PIX_FMT_YUVJ422P:
++    case PIX_FMT_YUV422P:
++      fmt = GST_MAKE_FOURCC ('Y', '4', '2', 'B');
++      break;
++    case PIX_FMT_YUVJ444P:
++    case PIX_FMT_YUV444P:
++      fmt = GST_MAKE_FOURCC ('Y', '4', '4', '4');
++      break;
++    case PIX_FMT_RGB32:
++      bpp = 32;
++      depth = 32;
++      endianness = G_BIG_ENDIAN;
++#if (G_BYTE_ORDER == G_BIG_ENDIAN)
++      r_mask = 0x00ff0000;
++      g_mask = 0x0000ff00;
++      b_mask = 0x000000ff;
++      a_mask = 0xff000000;
++#else
++      r_mask = 0x0000ff00;
++      g_mask = 0x00ff0000;
++      b_mask = 0xff000000;
++      a_mask = 0x000000ff;
++#endif
++      break;
++    case PIX_FMT_YUV410P:
++      fmt = GST_MAKE_FOURCC ('Y', 'U', 'V', '9');
++      break;
++    case PIX_FMT_YUV411P:
++      fmt = GST_MAKE_FOURCC ('Y', '4', '1', 'B');
++      break;
++    case PIX_FMT_RGB565:
++      bpp = depth = 16;
++      endianness = G_BYTE_ORDER;
++      r_mask = 0xf800;
++      g_mask = 0x07e0;
++      b_mask = 0x001f;
++      break;
++    case PIX_FMT_RGB555:
++      bpp = 16;
++      depth = 15;
++      endianness = G_BYTE_ORDER;
++      r_mask = 0x7c00;
++      g_mask = 0x03e0;
++      b_mask = 0x001f;
++      break;
++    case PIX_FMT_PAL8:
++      bpp = depth = 8;
++      endianness = G_BYTE_ORDER;
++      break;
++    case PIX_FMT_GRAY8:
++      bpp = depth = 8;
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-raw-gray",
++          "bpp", G_TYPE_INT, bpp, "depth", G_TYPE_INT, depth, NULL);
++      break;
++    default:
++      /* give up ... */
++      break;
++  }
++
++  if (caps == NULL) {
++    if (bpp != 0) {
++      if (r_mask != 0) {
++        if (a_mask) {
++          caps = gst_ff_vid_caps_new (context, codec_id, "video/x-raw-rgb",
++              "bpp", G_TYPE_INT, bpp,
++              "depth", G_TYPE_INT, depth,
++              "red_mask", G_TYPE_INT, r_mask,
++              "green_mask", G_TYPE_INT, g_mask,
++              "blue_mask", G_TYPE_INT, b_mask,
++              "alpha_mask", G_TYPE_INT, a_mask,
++              "endianness", G_TYPE_INT, endianness, NULL);
++        } else {
++          caps = gst_ff_vid_caps_new (context, codec_id, "video/x-raw-rgb",
++              "bpp", G_TYPE_INT, bpp,
++              "depth", G_TYPE_INT, depth,
++              "red_mask", G_TYPE_INT, r_mask,
++              "green_mask", G_TYPE_INT, g_mask,
++              "blue_mask", G_TYPE_INT, b_mask,
++              "endianness", G_TYPE_INT, endianness, NULL);
++        }
++      } else {
++        caps = gst_ff_vid_caps_new (context, codec_id, "video/x-raw-rgb",
++            "bpp", G_TYPE_INT, bpp,
++            "depth", G_TYPE_INT, depth,
++            "endianness", G_TYPE_INT, endianness, NULL);
++        if (caps && context) {
++          gst_ffmpeg_set_palette (caps, context);
++        }
++      }
++    } else if (fmt) {
++      caps = gst_ff_vid_caps_new (context, codec_id, "video/x-raw-yuv",
++          "format", GST_TYPE_FOURCC, fmt, NULL);
++    }
++  }
++
++  if (caps != NULL) {
++    GST_DEBUG ("caps for pix_fmt=%d: %" GST_PTR_FORMAT, pix_fmt, caps);
++  } else {
++    GST_LOG ("No caps found for pix_fmt=%d", pix_fmt);
++  }
++
++  return caps;
++}
++
++/* Convert a FFMPEG Sample Format and optional AVCodecContext
++ * to a GstCaps. If the context is ommitted, no fixed values
++ * for video/audio size will be included in the GstCaps
++ *
++ * See below for usefullness
++ */
++
++static GstCaps *
++gst_ffmpeg_smpfmt_to_caps (enum AVSampleFormat sample_fmt,
++    AVCodecContext * context, enum CodecID codec_id)
++{
++  GstCaps *caps = NULL;
++
++  int bpp = 0;
++  gboolean integer = TRUE;
++  gboolean signedness = FALSE;
++
++  switch (sample_fmt) {
++    case AV_SAMPLE_FMT_S16:
++      signedness = TRUE;
++      bpp = 16;
++      break;
++
++    case AV_SAMPLE_FMT_S32:
++      signedness = TRUE;
++      bpp = 32;
++      break;
++
++    case AV_SAMPLE_FMT_FLT:
++      integer = FALSE;
++      bpp = 32;
++      break;
++
++    case AV_SAMPLE_FMT_DBL:
++      integer = FALSE;
++      bpp = 64;
++      break;
++    default:
++      /* .. */
++      break;
++  }
++
++  if (bpp) {
++    if (integer) {
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-raw-int",
++          "signed", G_TYPE_BOOLEAN, signedness,
++          "endianness", G_TYPE_INT, G_BYTE_ORDER,
++          "width", G_TYPE_INT, bpp, "depth", G_TYPE_INT, bpp, NULL);
++    } else {
++      caps = gst_ff_aud_caps_new (context, codec_id, "audio/x-raw-float",
++          "endianness", G_TYPE_INT, G_BYTE_ORDER,
++          "width", G_TYPE_INT, bpp, NULL);
++    }
++  }
++
++  if (caps != NULL) {
++    GST_LOG ("caps for sample_fmt=%d: %" GST_PTR_FORMAT, sample_fmt, caps);
++  } else {
++    GST_LOG ("No caps found for sample_fmt=%d", sample_fmt);
++  }
++
++  return caps;
++}
++
++GstCaps *
++gst_ffmpeg_codectype_to_audio_caps (AVCodecContext * context,
++    enum CodecID codec_id, gboolean encode, AVCodec * codec)
++{
++  GstCaps *caps = NULL;
++
++  GST_DEBUG ("context:%p, codec_id:%d, encode:%d, codec:%p",
++      context, codec_id, encode, codec);
++  if (codec)
++    GST_DEBUG ("sample_fmts:%p, samplerates:%p",
++        codec->sample_fmts, codec->supported_samplerates);
++
++  if (context) {
++    /* Specific codec context */
++    caps = gst_ffmpeg_smpfmt_to_caps (context->sample_fmt, context, codec_id);
++  } else if (codec && codec->sample_fmts) {
++    GstCaps *temp;
++    int i;
++
++    caps = gst_caps_new_empty ();
++    for (i = 0; codec->sample_fmts[i] != -1; i++) {
++      temp =
++          gst_ffmpeg_smpfmt_to_caps (codec->sample_fmts[i], context, codec_id);
++      if (temp != NULL)
++        gst_caps_append (caps, temp);
++    }
++  } else {
++    GstCaps *temp;
++    enum AVSampleFormat i;
++    AVCodecContext ctx = { 0, };
++
++    ctx.channels = -1;
++    caps = gst_caps_new_empty ();
++    for (i = 0; i <= AV_SAMPLE_FMT_DBL; i++) {
++      temp = gst_ffmpeg_smpfmt_to_caps (i, encode ? &ctx : NULL, codec_id);
++      if (temp != NULL) {
++        gst_caps_append (caps, temp);
++      }
++    }
++  }
++  return caps;
++}
++
++GstCaps *
++gst_ffmpeg_codectype_to_video_caps (AVCodecContext * context,
++    enum CodecID codec_id, gboolean encode, AVCodec * codec)
++{
++  GstCaps *caps;
++
++  GST_LOG ("context:%p, codec_id:%d, encode:%d, codec:%p",
++      context, codec_id, encode, codec);
++
++  if (context) {
++    caps = gst_ffmpeg_pixfmt_to_caps (context->pix_fmt, context, codec_id);
++  } else {
++    GstCaps *temp;
++    enum PixelFormat i;
++    AVCodecContext ctx = { 0, };
++
++    caps = gst_caps_new_empty ();
++    for (i = 0; i < PIX_FMT_NB; i++) {
++      ctx.width = -1;
++      ctx.pix_fmt = i;
++      temp = gst_ffmpeg_pixfmt_to_caps (i, encode ? &ctx : NULL, codec_id);
++      if (temp != NULL) {
++        gst_caps_append (caps, temp);
++      }
++    }
++  }
++  return caps;
++}
++
++/* Convert a FFMPEG codec Type and optional AVCodecContext
++ * to a GstCaps. If the context is ommitted, no fixed values
++ * for video/audio size will be included in the GstCaps
++ *
++ * AVMediaType is primarily meant for uncompressed data GstCaps!
++ */
++
++GstCaps *
++gst_ffmpeg_codectype_to_caps (enum AVMediaType codec_type,
++    AVCodecContext * context, enum CodecID codec_id, gboolean encode)
++{
++  GstCaps *caps;
++
++  switch (codec_type) {
++    case AVMEDIA_TYPE_VIDEO:
++      caps =
++          gst_ffmpeg_codectype_to_video_caps (context, codec_id, encode, NULL);
++      break;
++    case AVMEDIA_TYPE_AUDIO:
++      caps =
++          gst_ffmpeg_codectype_to_audio_caps (context, codec_id, encode, NULL);
++      break;
++    default:
++      caps = NULL;
++      break;
++  }
++
++  return caps;
++}
++
++/* Convert a GstCaps (audio/raw) to a FFMPEG SampleFmt
++ * and other audio properties in a AVCodecContext.
++ *
++ * For usefullness, see below
++ */
++
++static void
++gst_ffmpeg_caps_to_smpfmt (const GstCaps * caps,
++    AVCodecContext * context, gboolean raw)
++{
++  GstStructure *structure;
++  gint depth = 0, width = 0, endianness = 0;
++  gboolean signedness = FALSE;
++  const gchar *name;
++
++  g_return_if_fail (gst_caps_get_size (caps) == 1);
++  structure = gst_caps_get_structure (caps, 0);
++
++  gst_structure_get_int (structure, "channels", &context->channels);
++  gst_structure_get_int (structure, "rate", &context->sample_rate);
++  gst_structure_get_int (structure, "block_align", &context->block_align);
++  gst_structure_get_int (structure, "bitrate", &context->bit_rate);
++
++  if (!raw)
++    return;
++
++  name = gst_structure_get_name (structure);
++
++  if (!strcmp (name, "audio/x-raw-float")) {
++    /* FLOAT */
++    if (gst_structure_get_int (structure, "width", &width) &&
++        gst_structure_get_int (structure, "endianness", &endianness)) {
++      if (endianness == G_BYTE_ORDER) {
++        if (width == 32)
++          context->sample_fmt = AV_SAMPLE_FMT_FLT;
++        else if (width == 64)
++          context->sample_fmt = AV_SAMPLE_FMT_DBL;
++      }
++    }
++  } else {
++    /* INT */
++    if (gst_structure_get_int (structure, "width", &width) &&
++        gst_structure_get_int (structure, "depth", &depth) &&
++        gst_structure_get_boolean (structure, "signed", &signedness) &&
++        gst_structure_get_int (structure, "endianness", &endianness)) {
++      if ((endianness == G_BYTE_ORDER) && (signedness == TRUE)) {
++        if ((width == 16) && (depth == 16))
++          context->sample_fmt = AV_SAMPLE_FMT_S16;
++        else if ((width == 32) && (depth == 32))
++          context->sample_fmt = AV_SAMPLE_FMT_S32;
++      }
++    }
++  }
++}
++
++
++/* Convert a GstCaps (video/raw) to a FFMPEG PixFmt
++ * and other video properties in a AVCodecContext.
++ *
++ * For usefullness, see below
++ */
++
++static void
++gst_ffmpeg_caps_to_pixfmt (const GstCaps * caps,
++    AVCodecContext * context, gboolean raw)
++{
++  GstStructure *structure;
++  const GValue *fps;
++  const GValue *par = NULL;
++
++  GST_DEBUG ("converting caps %" GST_PTR_FORMAT, caps);
++  g_return_if_fail (gst_caps_get_size (caps) == 1);
++  structure = gst_caps_get_structure (caps, 0);
++
++  gst_structure_get_int (structure, "width", &context->width);
++  gst_structure_get_int (structure, "height", &context->height);
++  gst_structure_get_int (structure, "bpp", &context->bits_per_coded_sample);
++
++  fps = gst_structure_get_value (structure, "framerate");
++  if (fps != NULL && GST_VALUE_HOLDS_FRACTION (fps)) {
++
++    /* somehow these seem mixed up.. */
++    context->time_base.den = gst_value_get_fraction_numerator (fps);
++    context->time_base.num = gst_value_get_fraction_denominator (fps);
++    context->ticks_per_frame = 1;
++
++    GST_DEBUG ("setting framerate %d/%d = %lf",
++        context->time_base.den, context->time_base.num,
++        1. * context->time_base.den / context->time_base.num);
++  }
++
++  par = gst_structure_get_value (structure, "pixel-aspect-ratio");
++  if (par && GST_VALUE_HOLDS_FRACTION (par)) {
++
++    context->sample_aspect_ratio.num = gst_value_get_fraction_numerator (par);
++    context->sample_aspect_ratio.den = gst_value_get_fraction_denominator (par);
++
++    GST_DEBUG ("setting pixel-aspect-ratio %d/%d = %lf",
++        context->sample_aspect_ratio.den, context->sample_aspect_ratio.num,
++        1. * context->sample_aspect_ratio.den /
++        context->sample_aspect_ratio.num);
++  }
++
++  if (!raw)
++    return;
++
++  g_return_if_fail (fps != NULL && GST_VALUE_HOLDS_FRACTION (fps));
++
++  if (strcmp (gst_structure_get_name (structure), "video/x-raw-yuv") == 0) {
++    guint32 fourcc;
++
++    if (gst_structure_get_fourcc (structure, "format", &fourcc)) {
++      switch (fourcc) {
++        case GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'):
++          context->pix_fmt = PIX_FMT_YUYV422;
++          break;
++        case GST_MAKE_FOURCC ('I', '4', '2', '0'):
++          context->pix_fmt = PIX_FMT_YUV420P;
++          break;
++        case GST_MAKE_FOURCC ('A', '4', '2', '0'):
++          context->pix_fmt = PIX_FMT_YUVA420P;
++          break;
++        case GST_MAKE_FOURCC ('Y', '4', '1', 'B'):
++          context->pix_fmt = PIX_FMT_YUV411P;
++          break;
++        case GST_MAKE_FOURCC ('Y', '4', '2', 'B'):
++          context->pix_fmt = PIX_FMT_YUV422P;
++          break;
++        case GST_MAKE_FOURCC ('Y', 'U', 'V', '9'):
++          context->pix_fmt = PIX_FMT_YUV410P;
++          break;
++#if 0
++        case FIXME:
++          context->pix_fmt = PIX_FMT_YUV444P;
++          break;
++#endif
++      }
++    }
++  } else if (strcmp (gst_structure_get_name (structure),
++          "video/x-raw-rgb") == 0) {
++    gint bpp = 0, rmask = 0, endianness = 0;
++
++    if (gst_structure_get_int (structure, "bpp", &bpp) &&
++        gst_structure_get_int (structure, "endianness", &endianness)) {
++      if (gst_structure_get_int (structure, "red_mask", &rmask)) {
++        switch (bpp) {
++          case 32:
++#if (G_BYTE_ORDER == G_BIG_ENDIAN)
++            if (rmask == 0x00ff0000)
++#else
++            if (rmask == 0x0000ff00)
++#endif
++              context->pix_fmt = PIX_FMT_RGB32;
++            break;
++          case 24:
++            if (rmask == 0x0000FF)
++              context->pix_fmt = PIX_FMT_BGR24;
++            else
++              context->pix_fmt = PIX_FMT_RGB24;
++            break;
++          case 16:
++            if (endianness == G_BYTE_ORDER)
++              context->pix_fmt = PIX_FMT_RGB565;
++            break;
++          case 15:
++            if (endianness == G_BYTE_ORDER)
++              context->pix_fmt = PIX_FMT_RGB555;
++            break;
++          default:
++            /* nothing */
++            break;
++        }
++      } else {
++        if (bpp == 8) {
++          context->pix_fmt = PIX_FMT_PAL8;
++          gst_ffmpeg_get_palette (caps, context);
++        }
++      }
++    }
++  } else if (strcmp (gst_structure_get_name (structure),
++          "video/x-raw-gray") == 0) {
++    gint bpp = 0;
++
++    if (gst_structure_get_int (structure, "bpp", &bpp)) {
++      switch (bpp) {
++        case 8:
++          context->pix_fmt = PIX_FMT_GRAY8;
++          break;
++      }
++    }
++  }
++}
++
++/* Convert a GstCaps and a FFMPEG codec Type to a
++ * AVCodecContext. If the context is ommitted, no fixed values
++ * for video/audio size will be included in the context
++ *
++ * AVMediaType is primarily meant for uncompressed data GstCaps!
++ */
++
++void
++gst_ffmpeg_caps_with_codectype (enum AVMediaType type,
++    const GstCaps * caps, AVCodecContext * context)
++{
++  if (context == NULL)
++    return;
++
++  switch (type) {
++    case AVMEDIA_TYPE_VIDEO:
++      gst_ffmpeg_caps_to_pixfmt (caps, context, TRUE);
++      break;
++
++    case AVMEDIA_TYPE_AUDIO:
++      gst_ffmpeg_caps_to_smpfmt (caps, context, TRUE);
++      break;
++
++    default:
++      /* unknown */
++      break;
++  }
++}
++
++#if 0
++static void
++nal_escape (guint8 * dst, guint8 * src, guint size, guint * destsize)
++{
++  guint8 *dstp = dst;
++  guint8 *srcp = src;
++  guint8 *end = src + size;
++  gint count = 0;
++
++  while (srcp < end) {
++    if (count == 2 && *srcp <= 0x03) {
++      GST_DEBUG ("added escape code");
++      *dstp++ = 0x03;
++      count = 0;
++    }
++    if (*srcp == 0)
++      count++;
++    else
++      count = 0;
++
++    GST_DEBUG ("copy %02x, count %d", *srcp, count);
++    *dstp++ = *srcp++;
++  }
++  *destsize = dstp - dst;
++}
++
++/* copy the config, escaping NAL units as we iterate them, if something fails we
++ * copy everything and hope for the best. */
++static void
++copy_config (guint8 * dst, guint8 * src, guint size, guint * destsize)
++{
++  guint8 *dstp = dst;
++  guint8 *srcp = src;
++  gint cnt, i;
++  guint nalsize, esize;
++
++  /* check size */
++  if (size < 7)
++    goto full_copy;
++
++  /* check version */
++  if (*srcp != 1)
++    goto full_copy;
++
++  cnt = *(srcp + 5) & 0x1f;     /* Number of sps */
++
++  GST_DEBUG ("num SPS %d", cnt);
++
++  memcpy (dstp, srcp, 6);
++  srcp += 6;
++  dstp += 6;
++
++  for (i = 0; i < cnt; i++) {
++    GST_DEBUG ("copy SPS %d", i);
++    nalsize = (srcp[0] << 8) | srcp[1];
++    nal_escape (dstp + 2, srcp + 2, nalsize, &esize);
++    dstp[0] = esize >> 8;
++    dstp[1] = esize & 0xff;
++    dstp += esize + 2;
++    srcp += nalsize + 2;
++  }
++
++  cnt = *(dstp++) = *(srcp++);  /* Number of pps */
++
++  GST_DEBUG ("num PPS %d", cnt);
++
++  for (i = 0; i < cnt; i++) {
++    GST_DEBUG ("copy PPS %d", i);
++    nalsize = (srcp[0] << 8) | srcp[1];
++    nal_escape (dstp + 2, srcp + 2, nalsize, &esize);
++    dstp[0] = esize >> 8;
++    dstp[1] = esize & 0xff;
++    dstp += esize + 2;
++    srcp += nalsize + 2;
++  }
++  *destsize = dstp - dst;
++
++  return;
++
++full_copy:
++  {
++    GST_DEBUG ("something unexpected, doing full copy");
++    memcpy (dst, src, size);
++    *destsize = size;
++    return;
++  }
++}
++#endif
++
++/*
++ * caps_with_codecid () transforms a GstCaps for a known codec
++ * ID into a filled-in context.
++ * codec_data from caps will override possible extradata already in the context
++ */
++
++void
++gst_ffmpeg_caps_with_codecid (enum CodecID codec_id,
++    enum AVMediaType codec_type, const GstCaps * caps, AVCodecContext * context)
++{
++  GstStructure *str;
++  const GValue *value;
++  const GstBuffer *buf;
++
++  GST_LOG ("codec_id:%d, codec_type:%d, caps:%" GST_PTR_FORMAT " context:%p",
++      codec_id, codec_type, caps, context);
++
++  if (!context || !gst_caps_get_size (caps))
++    return;
++
++  str = gst_caps_get_structure (caps, 0);
++
++  /* extradata parsing (esds [mpeg4], wma/wmv, msmpeg4v1/2/3, etc.) */
++  if ((value = gst_structure_get_value (str, "codec_data"))) {
++    guint size;
++    guint8 *data;
++
++    buf = GST_BUFFER_CAST (gst_value_get_mini_object (value));
++    size = GST_BUFFER_SIZE (buf);
++    data = GST_BUFFER_DATA (buf);
++
++    /* free the old one if it is there */
++    if (context->extradata)
++      av_free (context->extradata);
++
++#if 0
++    if (codec_id == CODEC_ID_H264) {
++      guint extrasize;
++
++      GST_DEBUG ("copy, escaping codec_data %d", size);
++      /* ffmpeg h264 expects the codec_data to be escaped, there is no real
++       * reason for this but let's just escape it for now. Start by allocating
++       * enough space, x2 is more than enough.
++       *
++       * FIXME, we disabled escaping because some file already contain escaped
++       * codec_data and then we escape twice and fail. It's better to leave it
++       * as is, as that is what most players do. */
++      context->extradata =
++          av_mallocz (GST_ROUND_UP_16 (size * 2 +
++              FF_INPUT_BUFFER_PADDING_SIZE));
++      copy_config (context->extradata, data, size, &extrasize);
++      GST_DEBUG ("escaped size: %d", extrasize);
++      context->extradata_size = extrasize;
++    } else
++#endif
++    {
++      /* allocate with enough padding */
++      GST_DEBUG ("copy codec_data");
++      context->extradata =
++          av_mallocz (GST_ROUND_UP_16 (size + FF_INPUT_BUFFER_PADDING_SIZE));
++      memcpy (context->extradata, data, size);
++      context->extradata_size = size;
++    }
++
++    /* Hack for VC1. Sometimes the first (length) byte is 0 for some files */
++    if (codec_id == CODEC_ID_VC1 && size > 0 && data[0] == 0) {
++      context->extradata[0] = (guint8) size;
++    }
++
++    GST_DEBUG ("have codec data of size %d", size);
++  } else if (context->extradata == NULL && codec_id != CODEC_ID_AAC_LATM &&
++      codec_id != CODEC_ID_FLAC) {
++    /* no extradata, alloc dummy with 0 sized, some codecs insist on reading
++     * extradata anyway which makes then segfault. */
++    context->extradata =
++        av_mallocz (GST_ROUND_UP_16 (FF_INPUT_BUFFER_PADDING_SIZE));
++    context->extradata_size = 0;
++    GST_DEBUG ("no codec data");
++  }
++
++  switch (codec_id) {
++    case CODEC_ID_MPEG4:
++    {
++      const gchar *mime = gst_structure_get_name (str);
++
++      if (!strcmp (mime, "video/x-divx"))
++        context->codec_tag = GST_MAKE_FOURCC ('D', 'I', 'V', 'X');
++      else if (!strcmp (mime, "video/x-xvid"))
++        context->codec_tag = GST_MAKE_FOURCC ('X', 'V', 'I', 'D');
++      else if (!strcmp (mime, "video/x-3ivx"))
++        context->codec_tag = GST_MAKE_FOURCC ('3', 'I', 'V', '1');
++      else if (!strcmp (mime, "video/mpeg"))
++        context->codec_tag = GST_MAKE_FOURCC ('m', 'p', '4', 'v');
++    }
++      break;
++
++    case CODEC_ID_SVQ3:
++      /* FIXME: this is a workaround for older gst-plugins releases
++       * (<= 0.8.9). This should be removed at some point, because
++       * it causes wrong decoded frame order. */
++      if (!context->extradata) {
++        gint halfpel_flag, thirdpel_flag, low_delay, unknown_svq3_flag;
++        guint16 flags;
++
++        if (gst_structure_get_int (str, "halfpel_flag", &halfpel_flag) ||
++            gst_structure_get_int (str, "thirdpel_flag", &thirdpel_flag) ||
++            gst_structure_get_int (str, "low_delay", &low_delay) ||
++            gst_structure_get_int (str, "unknown_svq3_flag",
++                &unknown_svq3_flag)) {
++          context->extradata = (guint8 *) av_mallocz (0x64);
++          g_stpcpy ((gchar *) context->extradata, "SVQ3");
++          flags = 1 << 3;
++          flags |= low_delay;
++          flags = flags << 2;
++          flags |= unknown_svq3_flag;
++          flags = flags << 6;
++          flags |= halfpel_flag;
++          flags = flags << 1;
++          flags |= thirdpel_flag;
++          flags = flags << 3;
++
++          flags = GUINT16_FROM_LE (flags);
++
++          memcpy ((gchar *) context->extradata + 0x62, &flags, 2);
++          context->extradata_size = 0x64;
++        }
++      }
++      break;
++
++    case CODEC_ID_MSRLE:
++    case CODEC_ID_QTRLE:
++    case CODEC_ID_TSCC:
++    case CODEC_ID_CSCD:
++    case CODEC_ID_APE:
++    {
++      gint depth;
++
++      if (gst_structure_get_int (str, "depth", &depth)) {
++        context->bits_per_coded_sample = depth;
++      } else {
++        GST_WARNING ("No depth field in caps %" GST_PTR_FORMAT, caps);
++      }
++
++    }
++      break;
++
++    case CODEC_ID_RV10:
++    case CODEC_ID_RV20:
++    case CODEC_ID_RV30:
++    case CODEC_ID_RV40:
++    {
++      gint format;
++
++      if (gst_structure_get_int (str, "format", &format))
++        context->sub_id = format;
++
++      break;
++    }
++    case CODEC_ID_COOK:
++    case CODEC_ID_RA_288:
++    case CODEC_ID_RA_144:
++    case CODEC_ID_SIPR:
++    {
++      gint leaf_size;
++      gint bitrate;
++
++      if (gst_structure_get_int (str, "leaf_size", &leaf_size))
++        context->block_align = leaf_size;
++      if (gst_structure_get_int (str, "bitrate", &bitrate))
++        context->bit_rate = bitrate;
++    }
++    case CODEC_ID_ALAC:
++      gst_structure_get_int (str, "samplesize",
++          &context->bits_per_coded_sample);
++      break;
++
++    case CODEC_ID_DVVIDEO:
++    {
++      guint32 fourcc;
++
++      if (gst_structure_get_fourcc (str, "format", &fourcc))
++        switch (fourcc) {
++          case GST_MAKE_FOURCC ('Y', 'U', 'Y', '2'):
++            context->pix_fmt = PIX_FMT_YUYV422;
++            break;
++          case GST_MAKE_FOURCC ('I', '4', '2', '0'):
++            context->pix_fmt = PIX_FMT_YUV420P;
++            break;
++          case GST_MAKE_FOURCC ('A', '4', '2', '0'):
++            context->pix_fmt = PIX_FMT_YUVA420P;
++            break;
++          case GST_MAKE_FOURCC ('Y', '4', '1', 'B'):
++            context->pix_fmt = PIX_FMT_YUV411P;
++            break;
++          case GST_MAKE_FOURCC ('Y', '4', '2', 'B'):
++            context->pix_fmt = PIX_FMT_YUV422P;
++            break;
++          case GST_MAKE_FOURCC ('Y', 'U', 'V', '9'):
++            context->pix_fmt = PIX_FMT_YUV410P;
++            break;
++          default:
++            GST_WARNING ("couldn't convert fourcc %" GST_FOURCC_FORMAT
++                " to a pixel format", GST_FOURCC_ARGS (fourcc));
++            break;
++        }
++      break;
++    }
++    case CODEC_ID_H263P:
++    {
++      gboolean val;
++
++      if (!gst_structure_get_boolean (str, "annex-f", &val) || val)
++        context->flags |= CODEC_FLAG_4MV;
++      else
++        context->flags &= ~CODEC_FLAG_4MV;
++      if ((!gst_structure_get_boolean (str, "annex-i", &val) || val) &&
++          (!gst_structure_get_boolean (str, "annex-t", &val) || val))
++        context->flags |= CODEC_FLAG_AC_PRED;
++      else
++        context->flags &= ~CODEC_FLAG_AC_PRED;
++      if (!gst_structure_get_boolean (str, "annex-j", &val) || val)
++        context->flags |= CODEC_FLAG_LOOP_FILTER;
++      else
++        context->flags &= ~CODEC_FLAG_LOOP_FILTER;
++      break;
++    }
++    case CODEC_ID_ADPCM_G726:
++    {
++      const gchar *layout;
++
++      if ((layout = gst_structure_get_string (str, "layout"))) {
++        if (!strcmp (layout, "g721")) {
++          context->sample_rate = 8000;
++          context->channels = 1;
++          context->bit_rate = 32000;
++        }
++      }
++      break;
++    }
++    default:
++      break;
++  }
++
++  if (!gst_caps_is_fixed (caps))
++    return;
++
++  /* common properties (width, height, fps) */
++  switch (codec_type) {
++    case AVMEDIA_TYPE_VIDEO:
++      gst_ffmpeg_caps_to_pixfmt (caps, context, codec_id == CODEC_ID_RAWVIDEO);
++      gst_ffmpeg_get_palette (caps, context);
++      break;
++    case AVMEDIA_TYPE_AUDIO:
++      gst_ffmpeg_caps_to_smpfmt (caps, context, FALSE);
++      break;
++    default:
++      break;
++  }
++
++  /* fixup of default settings */
++  switch (codec_id) {
++    case CODEC_ID_QCELP:
++      /* QCELP is always mono, no matter what the caps say */
++      context->channels = 1;
++      break;
++    default:
++      break;
++  }
++}
++
++/* _formatid_to_caps () is meant for muxers/demuxers, it
++ * transforms a name (ffmpeg way of ID'ing these, why don't
++ * they have unique numerical IDs?) to the corresponding
++ * caps belonging to that mux-format
++ *
++ * Note: we don't need any additional info because the caps
++ * isn't supposed to contain any useful info besides the
++ * media type anyway
++ */
++
++GstCaps *
++gst_ffmpeg_formatid_to_caps (const gchar * format_name)
++{
++  GstCaps *caps = NULL;
++
++  if (!strcmp (format_name, "mpeg")) {
++    caps = gst_caps_new_simple ("video/mpeg",
++        "systemstream", G_TYPE_BOOLEAN, TRUE, NULL);
++  } else if (!strcmp (format_name, "mpegts")) {
++    caps = gst_caps_new_simple ("video/mpegts",
++        "systemstream", G_TYPE_BOOLEAN, TRUE, NULL);
++  } else if (!strcmp (format_name, "rm")) {
++    caps = gst_caps_new_simple ("application/x-pn-realmedia",
++        "systemstream", G_TYPE_BOOLEAN, TRUE, NULL);
++  } else if (!strcmp (format_name, "asf")) {
++    caps = gst_caps_new_simple ("video/x-ms-asf", NULL);
++  } else if (!strcmp (format_name, "avi")) {
++    caps = gst_caps_new_simple ("video/x-msvideo", NULL);
++  } else if (!strcmp (format_name, "wav")) {
++    caps = gst_caps_new_simple ("audio/x-wav", NULL);
++  } else if (!strcmp (format_name, "ape")) {
++    caps = gst_caps_new_simple ("application/x-ape", NULL);
++  } else if (!strcmp (format_name, "swf")) {
++    caps = gst_caps_new_simple ("application/x-shockwave-flash", NULL);
++  } else if (!strcmp (format_name, "au")) {
++    caps = gst_caps_new_simple ("audio/x-au", NULL);
++  } else if (!strcmp (format_name, "dv")) {
++    caps = gst_caps_new_simple ("video/x-dv",
++        "systemstream", G_TYPE_BOOLEAN, TRUE, NULL);
++  } else if (!strcmp (format_name, "4xm")) {
++    caps = gst_caps_new_simple ("video/x-4xm", NULL);
++  } else if (!strcmp (format_name, "matroska")) {
++    caps = gst_caps_new_simple ("video/x-matroska", NULL);
++  } else if (!strcmp (format_name, "mp3")) {
++    caps = gst_caps_new_simple ("application/x-id3", NULL);
++  } else if (!strcmp (format_name, "flic")) {
++    caps = gst_caps_new_simple ("video/x-fli", NULL);
++  } else if (!strcmp (format_name, "flv")) {
++    caps = gst_caps_new_simple ("video/x-flv", NULL);
++  } else if (!strcmp (format_name, "tta")) {
++    caps = gst_caps_new_simple ("audio/x-ttafile", NULL);
++  } else if (!strcmp (format_name, "aiff")) {
++    caps = gst_caps_new_simple ("audio/x-aiff", NULL);
++  } else if (!strcmp (format_name, "mov_mp4_m4a_3gp_3g2")) {
++    caps =
++        gst_caps_from_string
++        ("application/x-3gp; video/quicktime; audio/x-m4a");
++  } else if (!strcmp (format_name, "mov")) {
++    caps = gst_caps_from_string ("video/quicktime,variant=(string)apple");
++  } else if (!strcmp (format_name, "mp4")) {
++    caps = gst_caps_from_string ("video/quicktime,variant=(string)iso");
++  } else if (!strcmp (format_name, "3gp")) {
++    caps = gst_caps_from_string ("video/quicktime,variant=(string)3gpp");
++  } else if (!strcmp (format_name, "3g2")) {
++    caps = gst_caps_from_string ("video/quicktime,variant=(string)3g2");
++  } else if (!strcmp (format_name, "psp")) {
++    caps = gst_caps_from_string ("video/quicktime,variant=(string)psp");
++  } else if (!strcmp (format_name, "ipod")) {
++    caps = gst_caps_from_string ("video/quicktime,variant=(string)ipod");
++  } else if (!strcmp (format_name, "aac")) {
++    caps = gst_caps_new_simple ("audio/mpeg",
++        "mpegversion", G_TYPE_INT, 4, NULL);
++  } else if (!strcmp (format_name, "gif")) {
++    caps = gst_caps_from_string ("image/gif");
++  } else if (!strcmp (format_name, "ogg")) {
++    caps = gst_caps_from_string ("application/ogg");
++  } else if (!strcmp (format_name, "mxf") || !strcmp (format_name, "mxf_d10")) {
++    caps = gst_caps_from_string ("application/mxf");
++  } else if (!strcmp (format_name, "gxf")) {
++    caps = gst_caps_from_string ("application/gxf");
++  } else if (!strcmp (format_name, "yuv4mpegpipe")) {
++    caps = gst_caps_new_simple ("application/x-yuv4mpeg",
++        "y4mversion", G_TYPE_INT, 2, NULL);
++  } else if (!strcmp (format_name, "mpc")) {
++    caps = gst_caps_from_string ("audio/x-musepack, streamversion = (int) 7");
++  } else if (!strcmp (format_name, "vqf")) {
++    caps = gst_caps_from_string ("audio/x-vqf");
++  } else if (!strcmp (format_name, "nsv")) {
++    caps = gst_caps_from_string ("video/x-nsv");
++  } else if (!strcmp (format_name, "amr")) {
++    caps = gst_caps_from_string ("audio/x-amr-nb-sh");
++  } else if (!strcmp (format_name, "webm")) {
++    caps = gst_caps_from_string ("video/webm");
++  } else {
++    gchar *name;
++
++    GST_LOG ("Could not create stream format caps for %s", format_name);
++    name = g_strdup_printf ("application/x-gst_ff-%s", format_name);
++    caps = gst_caps_new_simple (name, NULL);
++    g_free (name);
++  }
++
++  return caps;
++}
++
++gboolean
++gst_ffmpeg_formatid_get_codecids (const gchar * format_name,
++    enum CodecID ** video_codec_list, enum CodecID ** audio_codec_list,
++    AVOutputFormat * plugin)
++{
++  static enum CodecID tmp_vlist[] = {
++    CODEC_ID_NONE,
++    CODEC_ID_NONE
++  };
++  static enum CodecID tmp_alist[] = {
++    CODEC_ID_NONE,
++    CODEC_ID_NONE
++  };
++
++  GST_LOG ("format_name : %s", format_name);
++
++  if (!strcmp (format_name, "mp4")) {
++    static enum CodecID mp4_video_list[] = {
++      CODEC_ID_MPEG4, CODEC_ID_H264,
++      CODEC_ID_MJPEG,
++      CODEC_ID_NONE
++    };
++    static enum CodecID mp4_audio_list[] = {
++      CODEC_ID_AAC, CODEC_ID_MP3,
++      CODEC_ID_NONE
++    };
++
++    *video_codec_list = mp4_video_list;
++    *audio_codec_list = mp4_audio_list;
++  } else if (!strcmp (format_name, "mpeg")) {
++    static enum CodecID mpeg_video_list[] = { CODEC_ID_MPEG1VIDEO,
++      CODEC_ID_MPEG2VIDEO,
++      CODEC_ID_H264,
++      CODEC_ID_NONE
++    };
++    static enum CodecID mpeg_audio_list[] = { CODEC_ID_MP1,
++      CODEC_ID_MP2,
++      CODEC_ID_MP3,
++      CODEC_ID_NONE
++    };
++
++    *video_codec_list = mpeg_video_list;
++    *audio_codec_list = mpeg_audio_list;
++  } else if (!strcmp (format_name, "dvd")) {
++    static enum CodecID mpeg_video_list[] = { CODEC_ID_MPEG2VIDEO,
++      CODEC_ID_NONE
++    };
++    static enum CodecID mpeg_audio_list[] = { CODEC_ID_MP2,
++      CODEC_ID_AC3,
++      CODEC_ID_DTS,
++      CODEC_ID_PCM_S16BE,
++      CODEC_ID_NONE
++    };
++
++    *video_codec_list = mpeg_video_list;
++    *audio_codec_list = mpeg_audio_list;
++  } else if (!strcmp (format_name, "mpegts")) {
++    static enum CodecID mpegts_video_list[] = { CODEC_ID_MPEG1VIDEO,
++      CODEC_ID_MPEG2VIDEO,
++      CODEC_ID_H264,
++      CODEC_ID_NONE
++    };
++    static enum CodecID mpegts_audio_list[] = { CODEC_ID_MP2,
++      CODEC_ID_MP3,
++      CODEC_ID_AC3,
++      CODEC_ID_DTS,
++      CODEC_ID_AAC,
++      CODEC_ID_NONE
++    };
++
++    *video_codec_list = mpegts_video_list;
++    *audio_codec_list = mpegts_audio_list;
++  } else if (!strcmp (format_name, "vob")) {
++    static enum CodecID vob_video_list[] =
++        { CODEC_ID_MPEG2VIDEO, CODEC_ID_NONE };
++    static enum CodecID vob_audio_list[] = { CODEC_ID_MP2, CODEC_ID_AC3,
++      CODEC_ID_DTS, CODEC_ID_NONE
++    };
++
++    *video_codec_list = vob_video_list;
++    *audio_codec_list = vob_audio_list;
++  } else if (!strcmp (format_name, "flv")) {
++    static enum CodecID flv_video_list[] = { CODEC_ID_FLV1, CODEC_ID_NONE };
++    static enum CodecID flv_audio_list[] = { CODEC_ID_MP3, CODEC_ID_NONE };
++
++    *video_codec_list = flv_video_list;
++    *audio_codec_list = flv_audio_list;
++  } else if (!strcmp (format_name, "asf")) {
++    static enum CodecID asf_video_list[] =
++        { CODEC_ID_WMV1, CODEC_ID_WMV2, CODEC_ID_MSMPEG4V3, CODEC_ID_NONE };
++    static enum CodecID asf_audio_list[] =
++        { CODEC_ID_WMAV1, CODEC_ID_WMAV2, CODEC_ID_MP3, CODEC_ID_NONE };
++
++    *video_codec_list = asf_video_list;
++    *audio_codec_list = asf_audio_list;
++  } else if (!strcmp (format_name, "dv")) {
++    static enum CodecID dv_video_list[] = { CODEC_ID_DVVIDEO, CODEC_ID_NONE };
++    static enum CodecID dv_audio_list[] = { CODEC_ID_PCM_S16LE, CODEC_ID_NONE };
++
++    *video_codec_list = dv_video_list;
++    *audio_codec_list = dv_audio_list;
++  } else if (!strcmp (format_name, "mov")) {
++    static enum CodecID mov_video_list[] = {
++      CODEC_ID_SVQ1, CODEC_ID_SVQ3, CODEC_ID_MPEG4,
++      CODEC_ID_H263, CODEC_ID_H263P,
++      CODEC_ID_H264, CODEC_ID_DVVIDEO,
++      CODEC_ID_MJPEG,
++      CODEC_ID_NONE
++    };
++    static enum CodecID mov_audio_list[] = {
++      CODEC_ID_PCM_MULAW, CODEC_ID_PCM_ALAW, CODEC_ID_ADPCM_IMA_QT,
++      CODEC_ID_MACE3, CODEC_ID_MACE6, CODEC_ID_AAC,
++      CODEC_ID_AMR_NB, CODEC_ID_AMR_WB,
++      CODEC_ID_PCM_S16BE, CODEC_ID_PCM_S16LE,
++      CODEC_ID_MP3, CODEC_ID_NONE
++    };
++
++    *video_codec_list = mov_video_list;
++    *audio_codec_list = mov_audio_list;
++  } else if ((!strcmp (format_name, "3gp") || !strcmp (format_name, "3g2"))) {
++    static enum CodecID tgp_video_list[] = {
++      CODEC_ID_MPEG4, CODEC_ID_H263, CODEC_ID_H263P, CODEC_ID_H264,
++      CODEC_ID_NONE
++    };
++    static enum CodecID tgp_audio_list[] = {
++      CODEC_ID_AMR_NB, CODEC_ID_AMR_WB,
++      CODEC_ID_AAC,
++      CODEC_ID_NONE
++    };
++
++    *video_codec_list = tgp_video_list;
++    *audio_codec_list = tgp_audio_list;
++  } else if (!strcmp (format_name, "mmf")) {
++    static enum CodecID mmf_audio_list[] = {
++      CODEC_ID_ADPCM_YAMAHA, CODEC_ID_NONE
++    };
++    *video_codec_list = NULL;
++    *audio_codec_list = mmf_audio_list;
++  } else if (!strcmp (format_name, "amr")) {
++    static enum CodecID amr_audio_list[] = {
++      CODEC_ID_AMR_NB, CODEC_ID_AMR_WB,
++      CODEC_ID_NONE
++    };
++    *video_codec_list = NULL;
++    *audio_codec_list = amr_audio_list;
++  } else if (!strcmp (format_name, "gif")) {
++    static enum CodecID gif_image_list[] = {
++      CODEC_ID_RAWVIDEO, CODEC_ID_NONE
++    };
++    *video_codec_list = gif_image_list;
++    *audio_codec_list = NULL;
++  } else if ((plugin->audio_codec != CODEC_ID_NONE) ||
++      (plugin->video_codec != CODEC_ID_NONE)) {
++    tmp_vlist[0] = plugin->video_codec;
++    tmp_alist[0] = plugin->audio_codec;
++
++    *video_codec_list = tmp_vlist;
++    *audio_codec_list = tmp_alist;
++  } else {
++    GST_LOG ("Format %s not found", format_name);
++    return FALSE;
++  }
++
++  return TRUE;
++}
++
++/* Convert a GstCaps to a FFMPEG codec ID. Size et all
++ * are omitted, that can be queried by the user itself,
++ * we're not eating the GstCaps or anything
++ * A pointer to an allocated context is also needed for
++ * optional extra info
++ */
++
++enum CodecID
++gst_ffmpeg_caps_to_codecid (const GstCaps * caps, AVCodecContext * context)
++{
++  enum CodecID id = CODEC_ID_NONE;
++  const gchar *mimetype;
++  const GstStructure *structure;
++  gboolean video = FALSE, audio = FALSE;        /* we want to be sure! */
++
++  g_return_val_if_fail (caps != NULL, CODEC_ID_NONE);
++  g_return_val_if_fail (gst_caps_get_size (caps) == 1, CODEC_ID_NONE);
++  structure = gst_caps_get_structure (caps, 0);
++
++  mimetype = gst_structure_get_name (structure);
++
++  if (!strcmp (mimetype, "video/x-raw-rgb") ||
++      !strcmp (mimetype, "video/x-raw-yuv")) {
++    id = CODEC_ID_RAWVIDEO;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-raw-int")) {
++    gint depth, width, endianness;
++    gboolean signedness;
++
++    if (gst_structure_get_int (structure, "endianness", &endianness) &&
++        gst_structure_get_boolean (structure, "signed", &signedness) &&
++        gst_structure_get_int (structure, "width", &width) &&
++        gst_structure_get_int (structure, "depth", &depth) && depth == width) {
++      switch (depth) {
++        case 8:
++          if (signedness) {
++            id = CODEC_ID_PCM_S8;
++          } else {
++            id = CODEC_ID_PCM_U8;
++          }
++          break;
++        case 16:
++          switch (endianness) {
++            case G_BIG_ENDIAN:
++              if (signedness) {
++                id = CODEC_ID_PCM_S16BE;
++              } else {
++                id = CODEC_ID_PCM_U16BE;
++              }
++              break;
++            case G_LITTLE_ENDIAN:
++              if (signedness) {
++                id = CODEC_ID_PCM_S16LE;
++              } else {
++                id = CODEC_ID_PCM_U16LE;
++              }
++              break;
++          }
++          break;
++      }
++      if (id != CODEC_ID_NONE)
++        audio = TRUE;
++    }
++  } else if (!strcmp (mimetype, "audio/x-mulaw")) {
++    id = CODEC_ID_PCM_MULAW;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-alaw")) {
++    id = CODEC_ID_PCM_ALAW;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "video/x-dv")) {
++    gboolean sys_strm;
++
++    if (gst_structure_get_boolean (structure, "systemstream", &sys_strm) &&
++        !sys_strm) {
++      id = CODEC_ID_DVVIDEO;
++      video = TRUE;
++    }
++  } else if (!strcmp (mimetype, "audio/x-dv")) {        /* ??? */
++    id = CODEC_ID_DVAUDIO;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "video/x-h263")) {
++    const gchar *h263version =
++        gst_structure_get_string (structure, "h263version");
++    if (h263version && !strcmp (h263version, "h263p"))
++      id = CODEC_ID_H263P;
++    else
++      id = CODEC_ID_H263;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-intel-h263")) {
++    id = CODEC_ID_H263I;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-h261")) {
++    id = CODEC_ID_H261;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/mpeg")) {
++    gboolean sys_strm;
++    gint mpegversion;
++
++    if (gst_structure_get_boolean (structure, "systemstream", &sys_strm) &&
++        gst_structure_get_int (structure, "mpegversion", &mpegversion) &&
++        !sys_strm) {
++      switch (mpegversion) {
++        case 1:
++          id = CODEC_ID_MPEG1VIDEO;
++          break;
++        case 2:
++          id = CODEC_ID_MPEG2VIDEO;
++          break;
++        case 4:
++          id = CODEC_ID_MPEG4;
++          break;
++      }
++    }
++    if (id != CODEC_ID_NONE)
++      video = TRUE;
++  } else if (!strcmp (mimetype, "image/jpeg")) {
++    id = CODEC_ID_MJPEG;        /* A... B... */
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-jpeg-b")) {
++    id = CODEC_ID_MJPEGB;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-wmv")) {
++    gint wmvversion = 0;
++
++    if (gst_structure_get_int (structure, "wmvversion", &wmvversion)) {
++      switch (wmvversion) {
++        case 1:
++          id = CODEC_ID_WMV1;
++          break;
++        case 2:
++          id = CODEC_ID_WMV2;
++          break;
++        case 3:
++        {
++          guint32 fourcc;
++
++          /* WMV3 unless the fourcc exists and says otherwise */
++          id = CODEC_ID_WMV3;
++
++          if (gst_structure_get_fourcc (structure, "format", &fourcc)) {
++            if ((fourcc == GST_MAKE_FOURCC ('W', 'V', 'C', '1')) ||
++                (fourcc == GST_MAKE_FOURCC ('W', 'M', 'V', 'A'))) {
++              id = CODEC_ID_VC1;
++            }
++          }
++        }
++          break;
++      }
++    }
++    if (id != CODEC_ID_NONE)
++      video = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-vorbis")) {
++    id = CODEC_ID_VORBIS;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-qdm2")) {
++    id = CODEC_ID_QDM2;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "audio/mpeg")) {
++    gint layer = 0;
++    gint mpegversion = 0;
++
++    if (gst_structure_get_int (structure, "mpegversion", &mpegversion)) {
++      switch (mpegversion) {
++        case 2:                /* ffmpeg uses faad for both... */
++        case 4:
++          id = CODEC_ID_AAC;
++          break;
++        case 1:
++          if (gst_structure_get_int (structure, "layer", &layer)) {
++            switch (layer) {
++              case 1:
++                id = CODEC_ID_MP1;
++                break;
++              case 2:
++                id = CODEC_ID_MP2;
++                break;
++              case 3:
++                id = CODEC_ID_MP3;
++                break;
++            }
++          }
++      }
++    }
++    if (id != CODEC_ID_NONE)
++      audio = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-musepack")) {
++    gint streamversion = -1;
++
++    if (gst_structure_get_int (structure, "streamversion", &streamversion)) {
++      if (streamversion == 7)
++        id = CODEC_ID_MUSEPACK7;
++    } else {
++      id = CODEC_ID_MUSEPACK7;
++    }
++  } else if (!strcmp (mimetype, "audio/x-wma")) {
++    gint wmaversion = 0;
++
++    if (gst_structure_get_int (structure, "wmaversion", &wmaversion)) {
++      switch (wmaversion) {
++        case 1:
++          id = CODEC_ID_WMAV1;
++          break;
++        case 2:
++          id = CODEC_ID_WMAV2;
++          break;
++        case 3:
++          id = CODEC_ID_WMAPRO;
++          break;
++      }
++    }
++    if (id != CODEC_ID_NONE)
++      audio = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-wms")) {
++    id = CODEC_ID_WMAVOICE;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-ac3")) {
++    id = CODEC_ID_AC3;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-eac3")) {
++    id = CODEC_ID_EAC3;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-vnd.sony.atrac3") ||
++      !strcmp (mimetype, "audio/atrac3")) {
++    id = CODEC_ID_ATRAC3;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-dts")) {
++    id = CODEC_ID_DTS;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "application/x-ape")) {
++    id = CODEC_ID_APE;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "video/x-msmpeg")) {
++    gint msmpegversion = 0;
++
++    if (gst_structure_get_int (structure, "msmpegversion", &msmpegversion)) {
++      switch (msmpegversion) {
++        case 41:
++          id = CODEC_ID_MSMPEG4V1;
++          break;
++        case 42:
++          id = CODEC_ID_MSMPEG4V2;
++          break;
++        case 43:
++          id = CODEC_ID_MSMPEG4V3;
++          break;
++      }
++    }
++    if (id != CODEC_ID_NONE)
++      video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-svq")) {
++    gint svqversion = 0;
++
++    if (gst_structure_get_int (structure, "svqversion", &svqversion)) {
++      switch (svqversion) {
++        case 1:
++          id = CODEC_ID_SVQ1;
++          break;
++        case 3:
++          id = CODEC_ID_SVQ3;
++          break;
++      }
++    }
++    if (id != CODEC_ID_NONE)
++      video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-huffyuv")) {
++    id = CODEC_ID_HUFFYUV;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-mace")) {
++    gint maceversion = 0;
++
++    if (gst_structure_get_int (structure, "maceversion", &maceversion)) {
++      switch (maceversion) {
++        case 3:
++          id = CODEC_ID_MACE3;
++          break;
++        case 6:
++          id = CODEC_ID_MACE6;
++          break;
++      }
++    }
++    if (id != CODEC_ID_NONE)
++      audio = TRUE;
++  } else if (!strcmp (mimetype, "video/x-theora")) {
++    id = CODEC_ID_THEORA;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-vp3")) {
++    id = CODEC_ID_VP3;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-vp5")) {
++    id = CODEC_ID_VP5;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-vp6")) {
++    id = CODEC_ID_VP6;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-vp6-flash")) {
++    id = CODEC_ID_VP6F;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-vp6-alpha")) {
++    id = CODEC_ID_VP6A;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-vp8")) {
++    id = CODEC_ID_VP8;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-flash-screen")) {
++    id = CODEC_ID_FLASHSV;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-indeo")) {
++    gint indeoversion = 0;
++
++    if (gst_structure_get_int (structure, "indeoversion", &indeoversion)) {
++      switch (indeoversion) {
++        case 5:
++          id = CODEC_ID_INDEO5;
++          break;
++        case 3:
++          id = CODEC_ID_INDEO3;
++          break;
++        case 2:
++          id = CODEC_ID_INDEO2;
++          break;
++      }
++      if (id != CODEC_ID_NONE)
++        video = TRUE;
++    }
++  } else if (!strcmp (mimetype, "video/x-divx")) {
++    gint divxversion = 0;
++
++    if (gst_structure_get_int (structure, "divxversion", &divxversion)) {
++      switch (divxversion) {
++        case 3:
++          id = CODEC_ID_MSMPEG4V3;
++          break;
++        case 4:
++        case 5:
++          id = CODEC_ID_MPEG4;
++          break;
++      }
++    }
++    if (id != CODEC_ID_NONE)
++      video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-3ivx")) {
++    id = CODEC_ID_MPEG4;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-xvid")) {
++    id = CODEC_ID_MPEG4;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-ffv")) {
++    gint ffvversion = 0;
++
++    if (gst_structure_get_int (structure, "ffvversion", &ffvversion) &&
++        ffvversion == 1) {
++      id = CODEC_ID_FFV1;
++      video = TRUE;
++    }
++  } else if (!strcmp (mimetype, "audio/x-adpcm")) {
++    const gchar *layout;
++
++    layout = gst_structure_get_string (structure, "layout");
++    if (layout == NULL) {
++      /* break */
++    } else if (!strcmp (layout, "quicktime")) {
++      id = CODEC_ID_ADPCM_IMA_QT;
++    } else if (!strcmp (layout, "microsoft")) {
++      id = CODEC_ID_ADPCM_MS;
++    } else if (!strcmp (layout, "dvi")) {
++      id = CODEC_ID_ADPCM_IMA_WAV;
++    } else if (!strcmp (layout, "4xm")) {
++      id = CODEC_ID_ADPCM_4XM;
++    } else if (!strcmp (layout, "smjpeg")) {
++      id = CODEC_ID_ADPCM_IMA_SMJPEG;
++    } else if (!strcmp (layout, "dk3")) {
++      id = CODEC_ID_ADPCM_IMA_DK3;
++    } else if (!strcmp (layout, "dk4")) {
++      id = CODEC_ID_ADPCM_IMA_DK4;
++    } else if (!strcmp (layout, "westwood")) {
++      id = CODEC_ID_ADPCM_IMA_WS;
++    } else if (!strcmp (layout, "iss")) {
++      id = CODEC_ID_ADPCM_IMA_ISS;
++    } else if (!strcmp (layout, "xa")) {
++      id = CODEC_ID_ADPCM_XA;
++    } else if (!strcmp (layout, "adx")) {
++      id = CODEC_ID_ADPCM_ADX;
++    } else if (!strcmp (layout, "ea")) {
++      id = CODEC_ID_ADPCM_EA;
++    } else if (!strcmp (layout, "g726")) {
++      id = CODEC_ID_ADPCM_G726;
++    } else if (!strcmp (layout, "g721")) {
++      id = CODEC_ID_ADPCM_G726;
++    } else if (!strcmp (layout, "ct")) {
++      id = CODEC_ID_ADPCM_CT;
++    } else if (!strcmp (layout, "swf")) {
++      id = CODEC_ID_ADPCM_SWF;
++    } else if (!strcmp (layout, "yamaha")) {
++      id = CODEC_ID_ADPCM_YAMAHA;
++    } else if (!strcmp (layout, "sbpro2")) {
++      id = CODEC_ID_ADPCM_SBPRO_2;
++    } else if (!strcmp (layout, "sbpro3")) {
++      id = CODEC_ID_ADPCM_SBPRO_3;
++    } else if (!strcmp (layout, "sbpro4")) {
++      id = CODEC_ID_ADPCM_SBPRO_4;
++    }
++    if (id != CODEC_ID_NONE)
++      audio = TRUE;
++  } else if (!strcmp (mimetype, "video/x-4xm")) {
++    id = CODEC_ID_4XM;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-dpcm")) {
++    const gchar *layout;
++
++    layout = gst_structure_get_string (structure, "layout");
++    if (!layout) {
++      /* .. */
++    } else if (!strcmp (layout, "roq")) {
++      id = CODEC_ID_ROQ_DPCM;
++    } else if (!strcmp (layout, "interplay")) {
++      id = CODEC_ID_INTERPLAY_DPCM;
++    } else if (!strcmp (layout, "xan")) {
++      id = CODEC_ID_XAN_DPCM;
++    } else if (!strcmp (layout, "sol")) {
++      id = CODEC_ID_SOL_DPCM;
++    }
++    if (id != CODEC_ID_NONE)
++      audio = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-flac")) {
++    id = CODEC_ID_FLAC;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-shorten")) {
++    id = CODEC_ID_SHORTEN;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-alac")) {
++    id = CODEC_ID_ALAC;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "video/x-cinepak")) {
++    id = CODEC_ID_CINEPAK;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-pn-realvideo")) {
++    gint rmversion;
++
++    if (gst_structure_get_int (structure, "rmversion", &rmversion)) {
++      switch (rmversion) {
++        case 1:
++          id = CODEC_ID_RV10;
++          break;
++        case 2:
++          id = CODEC_ID_RV20;
++          break;
++        case 3:
++          id = CODEC_ID_RV30;
++          break;
++        case 4:
++          id = CODEC_ID_RV40;
++          break;
++      }
++    }
++    if (id != CODEC_ID_NONE)
++      video = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-sipro")) {
++    id = CODEC_ID_SIPR;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "audio/x-pn-realaudio")) {
++    gint raversion;
++
++    if (gst_structure_get_int (structure, "raversion", &raversion)) {
++      switch (raversion) {
++        case 1:
++          id = CODEC_ID_RA_144;
++          break;
++        case 2:
++          id = CODEC_ID_RA_288;
++          break;
++        case 8:
++          id = CODEC_ID_COOK;
++          break;
++      }
++    }
++    if (id != CODEC_ID_NONE)
++      audio = TRUE;
++  } else if (!strcmp (mimetype, "video/x-rle")) {
++    const gchar *layout;
++
++    if ((layout = gst_structure_get_string (structure, "layout"))) {
++      if (!strcmp (layout, "microsoft")) {
++        id = CODEC_ID_MSRLE;
++        video = TRUE;
++      }
++    }
++  } else if (!strcmp (mimetype, "video/x-xan")) {
++    gint wcversion = 0;
++
++    if ((gst_structure_get_int (structure, "wcversion", &wcversion))) {
++      switch (wcversion) {
++        case 3:
++          id = CODEC_ID_XAN_WC3;
++          video = TRUE;
++          break;
++        case 4:
++          id = CODEC_ID_XAN_WC4;
++          video = TRUE;
++          break;
++        default:
++          break;
++      }
++    }
++  } else if (!strcmp (mimetype, "audio/AMR")) {
++    audio = TRUE;
++    id = CODEC_ID_AMR_NB;
++  } else if (!strcmp (mimetype, "audio/AMR-WB")) {
++    id = CODEC_ID_AMR_WB;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "audio/qcelp")) {
++    id = CODEC_ID_QCELP;
++    audio = TRUE;
++  } else if (!strcmp (mimetype, "video/x-h264")) {
++    id = CODEC_ID_H264;
++    video = TRUE;
++  } else if (!strcmp (mimetype, "video/x-flash-video")) {
++    gint flvversion = 0;
++
++    if ((gst_structure_get_int (structure, "flvversion", &flvversion))) {
++      switch (flvversion) {
++        case 1:
++          id = CODEC_ID_FLV1;
++          video = TRUE;
++          break;
++        default:
++          break;
++      }
++    }
++
++  } else if (!strcmp (mimetype, "audio/x-nellymoser")) {
++    id = CODEC_ID_NELLYMOSER;
++    audio = TRUE;
++  } else if (!strncmp (mimetype, "audio/x-gst_ff-", 15)) {
++    gchar ext[16];
++    AVCodec *codec;
++
++    if (strlen (mimetype) <= 30 &&
++        sscanf (mimetype, "audio/x-gst_ff-%s", ext) == 1) {
++      if ((codec = avcodec_find_decoder_by_name (ext)) ||
++          (codec = avcodec_find_encoder_by_name (ext))) {
++        id = codec->id;
++        audio = TRUE;
++      }
++    }
++  } else if (!strncmp (mimetype, "video/x-gst_ff-", 15)) {
++    gchar ext[16];
++    AVCodec *codec;
++
++    if (strlen (mimetype) <= 30 &&
++        sscanf (mimetype, "video/x-gst_ff-%s", ext) == 1) {
++      if ((codec = avcodec_find_decoder_by_name (ext)) ||
++          (codec = avcodec_find_encoder_by_name (ext))) {
++        id = codec->id;
++        video = TRUE;
++      }
++    }
++  }
++
++  if (context != NULL) {
++    if (video == TRUE) {
++      context->codec_type = AVMEDIA_TYPE_VIDEO;
++    } else if (audio == TRUE) {
++      context->codec_type = AVMEDIA_TYPE_AUDIO;
++    } else {
++      context->codec_type = AVMEDIA_TYPE_UNKNOWN;
++    }
++    context->codec_id = id;
++    gst_ffmpeg_caps_with_codecid (id, context->codec_type, caps, context);
++  }
++
++  if (id != CODEC_ID_NONE) {
++    GST_DEBUG ("The id=%d belongs to the caps %" GST_PTR_FORMAT, id, caps);
++  } else {
++    GST_WARNING ("Couldn't figure out the id for caps %" GST_PTR_FORMAT, caps);
++  }
++
++  return id;
++}
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegcodecmap.c.rej gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegcodecmap.c.rej
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegcodecmap.c.rej	1970-01-01 01:00:00.000000000 +0100
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegcodecmap.c.rej	2014-08-08 15:31:06.055868246 +0200
+@@ -0,0 +1,12 @@
++--- ext/ffmpeg/gstffmpegcodecmap.c
+++++ ext/ffmpeg/gstffmpegcodecmap.c
++@@ -1884,9 +1842,6 @@
++             gst_ff_vid_caps_new (context, codec_id, encode, "video/x-raw-rgb",
++             "bpp", G_TYPE_INT, bpp, "depth", G_TYPE_INT, depth, "endianness",
++             G_TYPE_INT, endianness, NULL);
++-        if (caps && context) {
++-          gst_ffmpeg_set_palette (caps, context);
++-        }
++       }
++     } else if (fmt) {
++       caps = gst_ff_vid_caps_new (context, codec_id, encode, "video/x-raw-yuv",
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegdec.c gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegdec.c
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegdec.c	2014-08-08 14:46:31.462772351 +0200
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegdec.c	2014-08-08 15:32:18.608870847 +0200
+@@ -88,7 +88,6 @@
+       gint depth;
+     } audio;
+   } format;
+-  gboolean waiting_for_key;
+   gboolean discont;
+   gboolean clear_ts;
+ 
+@@ -438,7 +437,6 @@
+   ffmpegdec->pcache = NULL;
+   ffmpegdec->par = NULL;
+   ffmpegdec->opened = FALSE;
+-  ffmpegdec->waiting_for_key = TRUE;
+   ffmpegdec->skip_frame = ffmpegdec->lowres = 0;
+   ffmpegdec->direct_rendering = DEFAULT_DIRECT_RENDERING;
+   ffmpegdec->do_padding = DEFAULT_DO_PADDING;
+@@ -608,11 +606,6 @@
+     gst_ffmpeg_avcodec_close (ffmpegdec->context);
+   ffmpegdec->opened = FALSE;
+ 
+-  if (ffmpegdec->context->palctrl) {
+-    av_free (ffmpegdec->context->palctrl);
+-    ffmpegdec->context->palctrl = NULL;
+-  }
+-
+   if (ffmpegdec->context->extradata) {
+     av_free (ffmpegdec->context->extradata);
+     ffmpegdec->context->extradata = NULL;
+@@ -864,7 +857,7 @@
+ 
+   /* workaround encoder bugs */
+   ffmpegdec->context->workaround_bugs |= FF_BUG_AUTODETECT;
+-  ffmpegdec->context->error_recognition = 1;
++  ffmpegdec->context->err_recognition = 1;
+ 
+   /* for slow cpus */
+   ffmpegdec->context->lowres = ffmpegdec->lowres;
+@@ -944,7 +937,7 @@
+   fsize = gst_ffmpeg_avpicture_get_size (ffmpegdec->context->pix_fmt,
+       width, height);
+ 
+-  if (!ffmpegdec->context->palctrl && ffmpegdec->can_allocate_aligned) {
++  if (ffmpegdec->can_allocate_aligned) {
+     GST_LOG_OBJECT (ffmpegdec, "calling pad_alloc");
+     /* no pallete, we can use the buffer size to alloc */
+     ret = gst_pad_alloc_buffer_and_set_caps (ffmpegdec->srcpad,
+@@ -1083,7 +1076,6 @@
+   /* tell ffmpeg we own this buffer, tranfer the ref we have on the buffer to
+    * the opaque data. */
+   picture->type = FF_BUFFER_TYPE_USER;
+-  picture->age = 256 * 256 * 256 * 64;
+   picture->opaque = buf;
+ 
+ #ifdef EXTRA_REF
+@@ -1414,10 +1406,6 @@
+   } else {
+     if (diff >= 0) {
+       /* we're too slow, try to speed up */
+-      if (ffmpegdec->waiting_for_key) {
+-        /* we were waiting for a keyframe, that's ok */
+-        goto skipping;
+-      }
+       /* switch to skip_frame mode */
+       goto skip_frame;
+     }
+@@ -1427,11 +1415,6 @@
+   ffmpegdec->processed++;
+   return TRUE;
+ 
+-skipping:
+-  {
+-    res = FALSE;
+-    goto drop_qos;
+-  }
+ normal_mode:
+   {
+     if (ffmpegdec->context->skip_frame != AVDISCARD_DEFAULT) {
+@@ -1528,43 +1511,6 @@
+ }
+ 
+ 
+-/* figure out if the current picture is a keyframe, return TRUE if that is
+- * the case. */
+-static gboolean
+-check_keyframe (GstFFMpegDec * ffmpegdec)
+-{
+-  GstFFMpegDecClass *oclass;
+-  gboolean is_itype = FALSE;
+-  gboolean is_reference = FALSE;
+-  gboolean iskeyframe;
+-
+-  /* figure out if we are dealing with a keyframe */
+-  oclass = (GstFFMpegDecClass *) (G_OBJECT_GET_CLASS (ffmpegdec));
+-
+-  /* remember that we have B frames, we need this for the DTS -> PTS conversion
+-   * code */
+-  if (!ffmpegdec->has_b_frames && ffmpegdec->picture->pict_type == FF_B_TYPE) {
+-    GST_DEBUG_OBJECT (ffmpegdec, "we have B frames");
+-    ffmpegdec->has_b_frames = TRUE;
+-  }
+-
+-  is_itype = (ffmpegdec->picture->pict_type == FF_I_TYPE);
+-  is_reference = (ffmpegdec->picture->reference == 1);
+-
+-  iskeyframe = (is_itype || is_reference || ffmpegdec->picture->key_frame)
+-      || (oclass->in_plugin->id == CODEC_ID_INDEO3)
+-      || (oclass->in_plugin->id == CODEC_ID_MSZH)
+-      || (oclass->in_plugin->id == CODEC_ID_ZLIB)
+-      || (oclass->in_plugin->id == CODEC_ID_VP3)
+-      || (oclass->in_plugin->id == CODEC_ID_HUFFYUV);
+-
+-  GST_LOG_OBJECT (ffmpegdec,
+-      "current picture: type: %d, is_keyframe:%d, is_itype:%d, is_reference:%d",
+-      ffmpegdec->picture->pict_type, iskeyframe, is_itype, is_reference);
+-
+-  return iskeyframe;
+-}
+-
+ /* get an outbuf buffer with the current picture */
+ static GstFlowReturn
+ get_output_buffer (GstFFMpegDec * ffmpegdec, GstBuffer ** outbuf)
+@@ -1694,7 +1640,6 @@
+ {
+   gint len = -1;
+   gint have_data;
+-  gboolean iskeyframe;
+   gboolean mode_switch;
+   gboolean decode;
+   gint skip_frame = AVDISCARD_DEFAULT;
+@@ -1809,7 +1754,6 @@
+     gst_ffmpegdec_negotiate (ffmpegdec, TRUE);
+   }
+ 
+-
+   /* Whether a frame is interlaced or not is unknown at the time of
+      buffer allocation, so caps on the buffer in opaque will have
+      the previous frame's interlaced flag set. So if interlacedness
+@@ -1831,10 +1775,6 @@
+     }
+   }
+ 
+-  /* check if we are dealing with a keyframe here, this will also check if we
+-   * are dealing with B frames. */
+-  iskeyframe = check_keyframe (ffmpegdec);
+-
+   /* check that the timestamps go upwards */
+   if (ffmpegdec->last_out != -1 && ffmpegdec->last_out > out_pts) {
+     /* timestamps go backwards, this means frames were reordered and we must
+@@ -1865,7 +1805,7 @@
+    * timestamps */
+   if (!ffmpegdec->reordered_in && ffmpegdec->reordered_out) {
+     /* PTS and DTS are the same for keyframes */
+-    if (!iskeyframe && ffmpegdec->next_out != -1) {
++    if (ffmpegdec->next_out != -1) {
+       /* interpolate all timestamps except for keyframes, FIXME, this is
+        * wrong when QoS is active. */
+       GST_DEBUG_OBJECT (ffmpegdec, "interpolate timestamps");
+@@ -1874,16 +1814,6 @@
+     }
+   }
+ 
+-  /* when we're waiting for a keyframe, see if we have one or drop the current
+-   * non-keyframe */
+-  if (G_UNLIKELY (ffmpegdec->waiting_for_key)) {
+-    if (G_LIKELY (!iskeyframe))
+-      goto drop_non_keyframe;
+-
+-    /* we have a keyframe, we can stop waiting for one */
+-    ffmpegdec->waiting_for_key = FALSE;
+-  }
+-
+   /* get a handle to the output buffer */
+   *ret = get_output_buffer (ffmpegdec, outbuf);
+   if (G_UNLIKELY (*ret != GST_FLOW_OK))
+@@ -2000,20 +1930,11 @@
+   else
+     ffmpegdec->next_out = -1;
+ 
+-  /* palette is not part of raw video frame in gst and the size
+-   * of the outgoing buffer needs to be adjusted accordingly */
+-  if (ffmpegdec->context->palctrl != NULL)
+-    GST_BUFFER_SIZE (*outbuf) -= AVPALETTE_SIZE;
+-
+   /* now see if we need to clip the buffer against the segment boundaries. */
+   if (G_UNLIKELY (!clip_video_buffer (ffmpegdec, *outbuf, out_timestamp,
+               out_duration)))
+     goto clipped;
+ 
+-  /* mark as keyframe or delta unit */
+-  if (!iskeyframe)
+-    GST_BUFFER_FLAG_SET (*outbuf, GST_BUFFER_FLAG_DELTA_UNIT);
+-
+   if (ffmpegdec->picture->top_field_first)
+     GST_BUFFER_FLAG_SET (*outbuf, GST_VIDEO_BUFFER_TFF);
+ 
+@@ -2024,11 +1945,6 @@
+   return len;
+ 
+   /* special cases */
+-drop_non_keyframe:
+-  {
+-    GST_WARNING_OBJECT (ffmpegdec, "Dropping non-keyframe (seek/init)");
+-    goto beach;
+-  }
+ no_output:
+   {
+     GST_DEBUG_OBJECT (ffmpegdec, "no output buffer");
+@@ -2422,7 +2338,6 @@
+       gst_ffmpegdec_reset_ts (ffmpegdec);
+       gst_ffmpegdec_reset_qos (ffmpegdec);
+       gst_ffmpegdec_flush_pcache (ffmpegdec);
+-      ffmpegdec->waiting_for_key = TRUE;
+       gst_segment_init (&ffmpegdec->segment, GST_FORMAT_TIME);
+       clear_queued (ffmpegdec);
+       break;
+@@ -2560,17 +2475,6 @@
+ 
+   oclass = (GstFFMpegDecClass *) (G_OBJECT_GET_CLASS (ffmpegdec));
+ 
+-  /* do early keyframe check pretty bad to rely on the keyframe flag in the
+-   * source for this as it might not even be parsed (UDP/file/..).  */
+-  if (G_UNLIKELY (ffmpegdec->waiting_for_key)) {
+-    GST_DEBUG_OBJECT (ffmpegdec, "waiting for keyframe");
+-    if (GST_BUFFER_FLAG_IS_SET (inbuf, GST_BUFFER_FLAG_DELTA_UNIT) &&
+-        oclass->in_plugin->type != AVMEDIA_TYPE_AUDIO)
+-      goto skip_keyframe;
+-
+-    GST_DEBUG_OBJECT (ffmpegdec, "got keyframe");
+-    ffmpegdec->waiting_for_key = FALSE;
+-  }
+   /* parse cache joining. If there is cached data */
+   if (ffmpegdec->pcache) {
+     /* join with previous data */
+@@ -2805,12 +2709,6 @@
+     gst_buffer_unref (inbuf);
+     return GST_FLOW_NOT_NEGOTIATED;
+   }
+-skip_keyframe:
+-  {
+-    GST_DEBUG_OBJECT (ffmpegdec, "skipping non keyframe");
+-    gst_buffer_unref (inbuf);
+-    return GST_FLOW_OK;
+-  }
+ }
+ 
+ static GstStateChangeReturn
+@@ -2936,7 +2834,7 @@
+     gchar *plugin_name;
+ 
+     /* only decoders */
+-    if (!in_plugin->decode) {
++    if (!av_codec_is_decoder (in_plugin)) {
+       goto next;
+     }
+ 
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegdec.c.orig gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegdec.c.orig
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegdec.c.orig	1970-01-01 01:00:00.000000000 +0100
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegdec.c.orig	2014-08-08 15:31:06.057868246 +0200
+@@ -0,0 +1,2973 @@
++/* GStreamer
++ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library 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
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library General Public
++ * License along with this library; if not, write to the
++ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ * Boston, MA 02111-1307, USA.
++ */
++
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++
++#include <assert.h>
++#include <string.h>
++
++#ifdef HAVE_FFMPEG_UNINSTALLED
++#include <avcodec.h>
++#else
++#include <libavcodec/avcodec.h>
++#endif
++
++#include <gst/gst.h>
++#include <gst/video/video.h>
++
++#include "gstffmpeg.h"
++#include "gstffmpegcodecmap.h"
++#include "gstffmpegutils.h"
++
++/* define to enable alternative buffer refcounting algorithm */
++#undef EXTRA_REF
++
++typedef struct _GstFFMpegDec GstFFMpegDec;
++
++#define MAX_TS_MASK 0xff
++
++/* for each incomming buffer we keep all timing info in a structure like this.
++ * We keep a circular array of these structures around to store the timing info.
++ * The index in the array is what we pass as opaque data (to pictures) and
++ * pts (to parsers) so that ffmpeg can remember them for us. */
++typedef struct
++{
++  gint idx;
++  GstClockTime timestamp;
++  GstClockTime duration;
++  gint64 offset;
++} GstTSInfo;
++
++struct _GstFFMpegDec
++{
++  GstElement element;
++
++  /* We need to keep track of our pads, so we do so here. */
++  GstPad *srcpad;
++  GstPad *sinkpad;
++
++  /* decoding */
++  AVCodecContext *context;
++  AVFrame *picture;
++  gboolean opened;
++  union
++  {
++    struct
++    {
++      gint width, height;
++      gint clip_width, clip_height;
++      gint par_n, par_d;
++      gint fps_n, fps_d;
++      gint old_fps_n, old_fps_d;
++      gboolean interlaced;
++
++      enum PixelFormat pix_fmt;
++    } video;
++    struct
++    {
++      gint channels;
++      gint samplerate;
++      gint depth;
++    } audio;
++  } format;
++  gboolean discont;
++  gboolean clear_ts;
++
++  /* for tracking DTS/PTS */
++  gboolean has_b_frames;
++  gboolean reordered_in;
++  GstClockTime last_in;
++  GstClockTime last_diff;
++  guint last_frames;
++  gboolean reordered_out;
++  GstClockTime last_out;
++  GstClockTime next_out;
++
++  /* parsing */
++  gboolean turnoff_parser;      /* used for turning off aac raw parsing
++                                 * See bug #566250 */
++  AVCodecParserContext *pctx;
++  GstBuffer *pcache;
++  guint8 *padded;
++  guint padded_size;
++
++  GValue *par;                  /* pixel aspect ratio of incoming data */
++  gboolean current_dr;          /* if direct rendering is enabled */
++  gboolean extra_ref;           /* keep extra ref around in get/release */
++
++  /* some properties */
++  enum AVDiscard skip_frame;
++  gint lowres;
++  gboolean direct_rendering;
++  gboolean do_padding;
++  gboolean debug_mv;
++  gboolean crop;
++  int max_threads;
++
++  /* QoS stuff *//* with LOCK */
++  gdouble proportion;
++  GstClockTime earliest_time;
++  gint64 processed;
++  gint64 dropped;
++
++  /* clipping segment */
++  GstSegment segment;
++
++  gboolean is_realvideo;
++
++  GstTSInfo ts_info[MAX_TS_MASK + 1];
++  gint ts_idx;
++
++  /* reverse playback queue */
++  GList *queued;
++
++  /* Can downstream allocate 16bytes aligned data. */
++  gboolean can_allocate_aligned;
++};
++
++typedef struct _GstFFMpegDecClass GstFFMpegDecClass;
++
++struct _GstFFMpegDecClass
++{
++  GstElementClass parent_class;
++
++  AVCodec *in_plugin;
++  GstPadTemplate *srctempl, *sinktempl;
++};
++
++#define GST_TS_INFO_NONE &ts_info_none
++static const GstTSInfo ts_info_none = { -1, -1, -1, -1 };
++
++static const GstTSInfo *
++gst_ts_info_store (GstFFMpegDec * dec, GstClockTime timestamp,
++    GstClockTime duration, gint64 offset)
++{
++  gint idx = dec->ts_idx;
++  dec->ts_info[idx].idx = idx;
++  dec->ts_info[idx].timestamp = timestamp;
++  dec->ts_info[idx].duration = duration;
++  dec->ts_info[idx].offset = offset;
++  dec->ts_idx = (idx + 1) & MAX_TS_MASK;
++
++  return &dec->ts_info[idx];
++}
++
++static const GstTSInfo *
++gst_ts_info_get (GstFFMpegDec * dec, gint idx)
++{
++  if (G_UNLIKELY (idx < 0 || idx > MAX_TS_MASK))
++    return GST_TS_INFO_NONE;
++
++  return &dec->ts_info[idx];
++}
++
++#define GST_TYPE_FFMPEGDEC \
++  (gst_ffmpegdec_get_type())
++#define GST_FFMPEGDEC(obj) \
++  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_FFMPEGDEC,GstFFMpegDec))
++#define GST_FFMPEGDEC_CLASS(klass) \
++  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_FFMPEGDEC,GstFFMpegDecClass))
++#define GST_IS_FFMPEGDEC(obj) \
++  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_FFMPEGDEC))
++#define GST_IS_FFMPEGDEC_CLASS(klass) \
++  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_FFMPEGDEC))
++
++#define DEFAULT_LOWRES			0
++#define DEFAULT_SKIPFRAME		0
++#define DEFAULT_DIRECT_RENDERING	TRUE
++#define DEFAULT_DO_PADDING		TRUE
++#define DEFAULT_DEBUG_MV		FALSE
++#define DEFAULT_CROP			TRUE
++#define DEFAULT_MAX_THREADS		1
++
++enum
++{
++  PROP_0,
++  PROP_LOWRES,
++  PROP_SKIPFRAME,
++  PROP_DIRECT_RENDERING,
++  PROP_DO_PADDING,
++  PROP_DEBUG_MV,
++  PROP_CROP,
++  PROP_MAX_THREADS,
++  PROP_LAST
++};
++
++/* A number of function prototypes are given so we can refer to them later. */
++static void gst_ffmpegdec_base_init (GstFFMpegDecClass * klass);
++static void gst_ffmpegdec_class_init (GstFFMpegDecClass * klass);
++static void gst_ffmpegdec_init (GstFFMpegDec * ffmpegdec);
++static void gst_ffmpegdec_finalize (GObject * object);
++
++static gboolean gst_ffmpegdec_query (GstPad * pad, GstQuery * query);
++static gboolean gst_ffmpegdec_src_event (GstPad * pad, GstEvent * event);
++
++static gboolean gst_ffmpegdec_setcaps (GstPad * pad, GstCaps * caps);
++static gboolean gst_ffmpegdec_sink_event (GstPad * pad, GstEvent * event);
++static GstFlowReturn gst_ffmpegdec_chain (GstPad * pad, GstBuffer * buf);
++
++static GstStateChangeReturn gst_ffmpegdec_change_state (GstElement * element,
++    GstStateChange transition);
++
++static void gst_ffmpegdec_set_property (GObject * object,
++    guint prop_id, const GValue * value, GParamSpec * pspec);
++static void gst_ffmpegdec_get_property (GObject * object,
++    guint prop_id, GValue * value, GParamSpec * pspec);
++
++static gboolean gst_ffmpegdec_negotiate (GstFFMpegDec * ffmpegdec,
++    gboolean force);
++
++/* some sort of bufferpool handling, but different */
++static int gst_ffmpegdec_get_buffer (AVCodecContext * context,
++    AVFrame * picture);
++static void gst_ffmpegdec_release_buffer (AVCodecContext * context,
++    AVFrame * picture);
++
++static void gst_ffmpegdec_drain (GstFFMpegDec * ffmpegdec);
++
++#define GST_FFDEC_PARAMS_QDATA g_quark_from_static_string("ffdec-params")
++
++static GstElementClass *parent_class = NULL;
++
++#define GST_FFMPEGDEC_TYPE_LOWRES (gst_ffmpegdec_lowres_get_type())
++static GType
++gst_ffmpegdec_lowres_get_type (void)
++{
++  static GType ffmpegdec_lowres_type = 0;
++
++  if (!ffmpegdec_lowres_type) {
++    static const GEnumValue ffmpegdec_lowres[] = {
++      {0, "0", "full"},
++      {1, "1", "1/2-size"},
++      {2, "2", "1/4-size"},
++      {0, NULL, NULL},
++    };
++
++    ffmpegdec_lowres_type =
++        g_enum_register_static ("GstFFMpegDecLowres", ffmpegdec_lowres);
++  }
++
++  return ffmpegdec_lowres_type;
++}
++
++#define GST_FFMPEGDEC_TYPE_SKIPFRAME (gst_ffmpegdec_skipframe_get_type())
++static GType
++gst_ffmpegdec_skipframe_get_type (void)
++{
++  static GType ffmpegdec_skipframe_type = 0;
++
++  if (!ffmpegdec_skipframe_type) {
++    static const GEnumValue ffmpegdec_skipframe[] = {
++      {0, "0", "Skip nothing"},
++      {1, "1", "Skip B-frames"},
++      {2, "2", "Skip IDCT/Dequantization"},
++      {5, "5", "Skip everything"},
++      {0, NULL, NULL},
++    };
++
++    ffmpegdec_skipframe_type =
++        g_enum_register_static ("GstFFMpegDecSkipFrame", ffmpegdec_skipframe);
++  }
++
++  return ffmpegdec_skipframe_type;
++}
++
++static void
++gst_ffmpegdec_base_init (GstFFMpegDecClass * klass)
++{
++  GstElementClass *element_class = GST_ELEMENT_CLASS (klass);
++  GstPadTemplate *sinktempl, *srctempl;
++  GstCaps *sinkcaps, *srccaps;
++  AVCodec *in_plugin;
++  gchar *longname, *classification, *description;
++
++  in_plugin =
++      (AVCodec *) g_type_get_qdata (G_OBJECT_CLASS_TYPE (klass),
++      GST_FFDEC_PARAMS_QDATA);
++  g_assert (in_plugin != NULL);
++
++  /* construct the element details struct */
++  longname = g_strdup_printf ("FFmpeg %s decoder", in_plugin->long_name);
++  classification = g_strdup_printf ("Codec/Decoder/%s",
++      (in_plugin->type == AVMEDIA_TYPE_VIDEO) ? "Video" : "Audio");
++  description = g_strdup_printf ("FFmpeg %s decoder", in_plugin->name);
++  gst_element_class_set_details_simple (element_class, longname, classification,
++      description,
++      "Wim Taymans <wim.taymans@gmail.com>, "
++      "Ronald Bultje <rbultje@ronald.bitfreak.net>, "
++      "Edward Hervey <bilboed@bilboed.com>");
++  g_free (longname);
++  g_free (classification);
++  g_free (description);
++
++  /* get the caps */
++  sinkcaps = gst_ffmpeg_codecid_to_caps (in_plugin->id, NULL, FALSE);
++  if (!sinkcaps) {
++    GST_DEBUG ("Couldn't get sink caps for decoder '%s'", in_plugin->name);
++    sinkcaps = gst_caps_from_string ("unknown/unknown");
++  }
++  if (in_plugin->type == AVMEDIA_TYPE_VIDEO) {
++    srccaps = gst_caps_from_string ("video/x-raw-rgb; video/x-raw-yuv");
++  } else {
++    srccaps = gst_ffmpeg_codectype_to_audio_caps (NULL,
++        in_plugin->id, FALSE, in_plugin);
++  }
++  if (!srccaps) {
++    GST_DEBUG ("Couldn't get source caps for decoder '%s'", in_plugin->name);
++    srccaps = gst_caps_from_string ("unknown/unknown");
++  }
++
++  /* pad templates */
++  sinktempl = gst_pad_template_new ("sink", GST_PAD_SINK,
++      GST_PAD_ALWAYS, sinkcaps);
++  srctempl = gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS, srccaps);
++
++  gst_element_class_add_pad_template (element_class, srctempl);
++  gst_element_class_add_pad_template (element_class, sinktempl);
++
++  klass->in_plugin = in_plugin;
++  klass->srctempl = srctempl;
++  klass->sinktempl = sinktempl;
++}
++
++static void
++gst_ffmpegdec_class_init (GstFFMpegDecClass * klass)
++{
++  GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
++  GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass);
++
++  parent_class = g_type_class_peek_parent (klass);
++
++  gobject_class->finalize = gst_ffmpegdec_finalize;
++
++  gobject_class->set_property = gst_ffmpegdec_set_property;
++  gobject_class->get_property = gst_ffmpegdec_get_property;
++
++  if (klass->in_plugin->type == AVMEDIA_TYPE_VIDEO) {
++    int caps;
++
++    g_object_class_install_property (gobject_class, PROP_SKIPFRAME,
++        g_param_spec_enum ("skip-frame", "Skip frames",
++            "Which types of frames to skip during decoding",
++            GST_FFMPEGDEC_TYPE_SKIPFRAME, 0,
++            G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
++    g_object_class_install_property (gobject_class, PROP_LOWRES,
++        g_param_spec_enum ("lowres", "Low resolution",
++            "At which resolution to decode images", GST_FFMPEGDEC_TYPE_LOWRES,
++            0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
++    g_object_class_install_property (gobject_class, PROP_DIRECT_RENDERING,
++        g_param_spec_boolean ("direct-rendering", "Direct Rendering",
++            "Enable direct rendering", DEFAULT_DIRECT_RENDERING,
++            G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
++    g_object_class_install_property (gobject_class, PROP_DO_PADDING,
++        g_param_spec_boolean ("do-padding", "Do Padding",
++            "Add 0 padding before decoding data", DEFAULT_DO_PADDING,
++            G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
++    g_object_class_install_property (gobject_class, PROP_DEBUG_MV,
++        g_param_spec_boolean ("debug-mv", "Debug motion vectors",
++            "Whether ffmpeg should print motion vectors on top of the image",
++            DEFAULT_DEBUG_MV, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
++#if 0
++    g_object_class_install_property (gobject_class, PROP_CROP,
++        g_param_spec_boolean ("crop", "Crop",
++            "Crop images to the display region",
++            DEFAULT_CROP, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
++#endif
++
++    caps = klass->in_plugin->capabilities;
++    if (caps & (CODEC_CAP_FRAME_THREADS | CODEC_CAP_SLICE_THREADS)) {
++      g_object_class_install_property (G_OBJECT_CLASS (klass), PROP_MAX_THREADS,
++          g_param_spec_int ("max-threads", "Maximum decode threads",
++              "Maximum number of worker threads to spawn. (0 = auto)",
++              0, G_MAXINT, DEFAULT_MAX_THREADS,
++              G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
++    }
++  }
++
++  gstelement_class->change_state = gst_ffmpegdec_change_state;
++}
++
++static void
++gst_ffmpegdec_init (GstFFMpegDec * ffmpegdec)
++{
++  GstFFMpegDecClass *oclass;
++
++  oclass = (GstFFMpegDecClass *) (G_OBJECT_GET_CLASS (ffmpegdec));
++
++  /* setup pads */
++  ffmpegdec->sinkpad = gst_pad_new_from_template (oclass->sinktempl, "sink");
++  gst_pad_set_setcaps_function (ffmpegdec->sinkpad,
++      GST_DEBUG_FUNCPTR (gst_ffmpegdec_setcaps));
++  gst_pad_set_event_function (ffmpegdec->sinkpad,
++      GST_DEBUG_FUNCPTR (gst_ffmpegdec_sink_event));
++  gst_pad_set_chain_function (ffmpegdec->sinkpad,
++      GST_DEBUG_FUNCPTR (gst_ffmpegdec_chain));
++  gst_element_add_pad (GST_ELEMENT (ffmpegdec), ffmpegdec->sinkpad);
++
++  ffmpegdec->srcpad = gst_pad_new_from_template (oclass->srctempl, "src");
++  gst_pad_use_fixed_caps (ffmpegdec->srcpad);
++  gst_pad_set_event_function (ffmpegdec->srcpad,
++      GST_DEBUG_FUNCPTR (gst_ffmpegdec_src_event));
++  gst_pad_set_query_function (ffmpegdec->srcpad,
++      GST_DEBUG_FUNCPTR (gst_ffmpegdec_query));
++  gst_element_add_pad (GST_ELEMENT (ffmpegdec), ffmpegdec->srcpad);
++
++  /* some ffmpeg data */
++  ffmpegdec->context = avcodec_alloc_context ();
++  ffmpegdec->picture = avcodec_alloc_frame ();
++  ffmpegdec->pctx = NULL;
++  ffmpegdec->pcache = NULL;
++  ffmpegdec->par = NULL;
++  ffmpegdec->opened = FALSE;
++  ffmpegdec->skip_frame = ffmpegdec->lowres = 0;
++  ffmpegdec->direct_rendering = DEFAULT_DIRECT_RENDERING;
++  ffmpegdec->do_padding = DEFAULT_DO_PADDING;
++  ffmpegdec->debug_mv = DEFAULT_DEBUG_MV;
++  ffmpegdec->crop = DEFAULT_CROP;
++  ffmpegdec->max_threads = DEFAULT_MAX_THREADS;
++
++  ffmpegdec->format.video.par_n = -1;
++  ffmpegdec->format.video.fps_n = -1;
++  ffmpegdec->format.video.old_fps_n = -1;
++  gst_segment_init (&ffmpegdec->segment, GST_FORMAT_TIME);
++
++  /* We initially assume downstream can allocate 16 bytes aligned buffers */
++  ffmpegdec->can_allocate_aligned = TRUE;
++}
++
++static void
++gst_ffmpegdec_finalize (GObject * object)
++{
++  GstFFMpegDec *ffmpegdec = (GstFFMpegDec *) object;
++
++  if (ffmpegdec->context != NULL) {
++    av_free (ffmpegdec->context);
++    ffmpegdec->context = NULL;
++  }
++
++  if (ffmpegdec->picture != NULL) {
++    av_free (ffmpegdec->picture);
++    ffmpegdec->picture = NULL;
++  }
++
++  G_OBJECT_CLASS (parent_class)->finalize (object);
++}
++
++static gboolean
++gst_ffmpegdec_query (GstPad * pad, GstQuery * query)
++{
++  GstFFMpegDec *ffmpegdec;
++  GstPad *peer;
++  gboolean res;
++
++  ffmpegdec = (GstFFMpegDec *) gst_pad_get_parent (pad);
++
++  res = FALSE;
++
++  if ((peer = gst_pad_get_peer (ffmpegdec->sinkpad))) {
++    /* just forward to peer */
++    res = gst_pad_query (peer, query);
++    gst_object_unref (peer);
++  }
++#if 0
++  {
++    GstFormat bfmt;
++
++    bfmt = GST_FORMAT_BYTES;
++
++    /* ok, do bitrate calc... */
++    if ((type != GST_QUERY_POSITION && type != GST_QUERY_TOTAL) ||
++        *fmt != GST_FORMAT_TIME || ffmpegdec->context->bit_rate == 0 ||
++        !gst_pad_query (peer, type, &bfmt, value))
++      return FALSE;
++
++    if (ffmpegdec->pcache && type == GST_QUERY_POSITION)
++      *value -= GST_BUFFER_SIZE (ffmpegdec->pcache);
++    *value *= GST_SECOND / ffmpegdec->context->bit_rate;
++  }
++#endif
++
++  gst_object_unref (ffmpegdec);
++
++  return res;
++}
++
++static void
++gst_ffmpegdec_reset_ts (GstFFMpegDec * ffmpegdec)
++{
++  ffmpegdec->last_in = GST_CLOCK_TIME_NONE;
++  ffmpegdec->last_diff = GST_CLOCK_TIME_NONE;
++  ffmpegdec->last_frames = 0;
++  ffmpegdec->last_out = GST_CLOCK_TIME_NONE;
++  ffmpegdec->next_out = GST_CLOCK_TIME_NONE;
++  ffmpegdec->reordered_in = FALSE;
++  ffmpegdec->reordered_out = FALSE;
++}
++
++static void
++gst_ffmpegdec_update_qos (GstFFMpegDec * ffmpegdec, gdouble proportion,
++    GstClockTime timestamp)
++{
++  GST_LOG_OBJECT (ffmpegdec, "update QOS: %f, %" GST_TIME_FORMAT,
++      proportion, GST_TIME_ARGS (timestamp));
++
++  GST_OBJECT_LOCK (ffmpegdec);
++  ffmpegdec->proportion = proportion;
++  ffmpegdec->earliest_time = timestamp;
++  GST_OBJECT_UNLOCK (ffmpegdec);
++}
++
++static void
++gst_ffmpegdec_reset_qos (GstFFMpegDec * ffmpegdec)
++{
++  gst_ffmpegdec_update_qos (ffmpegdec, 0.5, GST_CLOCK_TIME_NONE);
++  ffmpegdec->processed = 0;
++  ffmpegdec->dropped = 0;
++}
++
++static void
++gst_ffmpegdec_read_qos (GstFFMpegDec * ffmpegdec, gdouble * proportion,
++    GstClockTime * timestamp)
++{
++  GST_OBJECT_LOCK (ffmpegdec);
++  *proportion = ffmpegdec->proportion;
++  *timestamp = ffmpegdec->earliest_time;
++  GST_OBJECT_UNLOCK (ffmpegdec);
++}
++
++static gboolean
++gst_ffmpegdec_src_event (GstPad * pad, GstEvent * event)
++{
++  GstFFMpegDec *ffmpegdec;
++  gboolean res;
++
++  ffmpegdec = (GstFFMpegDec *) gst_pad_get_parent (pad);
++
++  switch (GST_EVENT_TYPE (event)) {
++    case GST_EVENT_QOS:
++    {
++      gdouble proportion;
++      GstClockTimeDiff diff;
++      GstClockTime timestamp;
++
++      gst_event_parse_qos (event, &proportion, &diff, &timestamp);
++
++      /* update our QoS values */
++      gst_ffmpegdec_update_qos (ffmpegdec, proportion, timestamp + diff);
++
++      /* forward upstream */
++      res = gst_pad_push_event (ffmpegdec->sinkpad, event);
++      break;
++    }
++    default:
++      /* forward upstream */
++      res = gst_pad_push_event (ffmpegdec->sinkpad, event);
++      break;
++  }
++
++  gst_object_unref (ffmpegdec);
++
++  return res;
++}
++
++/* with LOCK */
++static void
++gst_ffmpegdec_close (GstFFMpegDec * ffmpegdec)
++{
++  if (!ffmpegdec->opened)
++    return;
++
++  GST_LOG_OBJECT (ffmpegdec, "closing ffmpeg codec");
++
++  if (ffmpegdec->par) {
++    g_free (ffmpegdec->par);
++    ffmpegdec->par = NULL;
++  }
++
++  if (ffmpegdec->context->priv_data)
++    gst_ffmpeg_avcodec_close (ffmpegdec->context);
++  ffmpegdec->opened = FALSE;
++
++  if (ffmpegdec->context->extradata) {
++    av_free (ffmpegdec->context->extradata);
++    ffmpegdec->context->extradata = NULL;
++  }
++
++  if (ffmpegdec->pctx) {
++    if (ffmpegdec->pcache) {
++      gst_buffer_unref (ffmpegdec->pcache);
++      ffmpegdec->pcache = NULL;
++    }
++    av_parser_close (ffmpegdec->pctx);
++    ffmpegdec->pctx = NULL;
++  }
++
++  ffmpegdec->format.video.par_n = -1;
++  ffmpegdec->format.video.fps_n = -1;
++  ffmpegdec->format.video.old_fps_n = -1;
++  ffmpegdec->format.video.interlaced = FALSE;
++}
++
++/* with LOCK */
++static gboolean
++gst_ffmpegdec_open (GstFFMpegDec * ffmpegdec)
++{
++  GstFFMpegDecClass *oclass;
++
++  oclass = (GstFFMpegDecClass *) (G_OBJECT_GET_CLASS (ffmpegdec));
++
++  if (gst_ffmpeg_avcodec_open (ffmpegdec->context, oclass->in_plugin) < 0)
++    goto could_not_open;
++
++  ffmpegdec->opened = TRUE;
++  ffmpegdec->is_realvideo = FALSE;
++
++  GST_LOG_OBJECT (ffmpegdec, "Opened ffmpeg codec %s, id %d",
++      oclass->in_plugin->name, oclass->in_plugin->id);
++
++  /* open a parser if we can */
++  switch (oclass->in_plugin->id) {
++    case CODEC_ID_MPEG4:
++    case CODEC_ID_MJPEG:
++    case CODEC_ID_VC1:
++      GST_LOG_OBJECT (ffmpegdec, "not using parser, blacklisted codec");
++      ffmpegdec->pctx = NULL;
++      break;
++    case CODEC_ID_H264:
++      /* For H264, only use a parser if there is no context data, if there is, 
++       * we're talking AVC */
++      if (ffmpegdec->context->extradata_size == 0) {
++        GST_LOG_OBJECT (ffmpegdec, "H264 with no extradata, creating parser");
++        ffmpegdec->pctx = av_parser_init (oclass->in_plugin->id);
++      } else {
++        GST_LOG_OBJECT (ffmpegdec,
++            "H264 with extradata implies framed data - not using parser");
++        ffmpegdec->pctx = NULL;
++      }
++      break;
++    case CODEC_ID_RV10:
++    case CODEC_ID_RV30:
++    case CODEC_ID_RV20:
++    case CODEC_ID_RV40:
++      ffmpegdec->is_realvideo = TRUE;
++      break;
++    default:
++      if (!ffmpegdec->turnoff_parser) {
++        ffmpegdec->pctx = av_parser_init (oclass->in_plugin->id);
++        if (ffmpegdec->pctx)
++          GST_LOG_OBJECT (ffmpegdec, "Using parser %p", ffmpegdec->pctx);
++        else
++          GST_LOG_OBJECT (ffmpegdec, "No parser for codec");
++      } else {
++        GST_LOG_OBJECT (ffmpegdec, "Parser deactivated for format");
++      }
++      break;
++  }
++
++  switch (oclass->in_plugin->type) {
++    case AVMEDIA_TYPE_VIDEO:
++      ffmpegdec->format.video.width = 0;
++      ffmpegdec->format.video.height = 0;
++      ffmpegdec->format.video.clip_width = -1;
++      ffmpegdec->format.video.clip_height = -1;
++      ffmpegdec->format.video.pix_fmt = PIX_FMT_NB;
++      ffmpegdec->format.video.interlaced = FALSE;
++      break;
++    case AVMEDIA_TYPE_AUDIO:
++      ffmpegdec->format.audio.samplerate = 0;
++      ffmpegdec->format.audio.channels = 0;
++      ffmpegdec->format.audio.depth = 0;
++      break;
++    default:
++      break;
++  }
++
++  gst_ffmpegdec_reset_ts (ffmpegdec);
++  /* FIXME, reset_qos holds the LOCK */
++  ffmpegdec->proportion = 0.0;
++  ffmpegdec->earliest_time = -1;
++
++  return TRUE;
++
++  /* ERRORS */
++could_not_open:
++  {
++    gst_ffmpegdec_close (ffmpegdec);
++    GST_DEBUG_OBJECT (ffmpegdec, "ffdec_%s: Failed to open FFMPEG codec",
++        oclass->in_plugin->name);
++    return FALSE;
++  }
++}
++
++static gboolean
++gst_ffmpegdec_setcaps (GstPad * pad, GstCaps * caps)
++{
++  GstFFMpegDec *ffmpegdec;
++  GstFFMpegDecClass *oclass;
++  GstStructure *structure;
++  const GValue *par;
++  const GValue *fps;
++  gboolean ret = TRUE;
++
++  ffmpegdec = (GstFFMpegDec *) (gst_pad_get_parent (pad));
++  oclass = (GstFFMpegDecClass *) (G_OBJECT_GET_CLASS (ffmpegdec));
++
++  GST_DEBUG_OBJECT (pad, "setcaps called");
++
++  GST_OBJECT_LOCK (ffmpegdec);
++
++  /* stupid check for VC1 */
++  if ((oclass->in_plugin->id == CODEC_ID_WMV3) ||
++      (oclass->in_plugin->id == CODEC_ID_VC1))
++    oclass->in_plugin->id = gst_ffmpeg_caps_to_codecid (caps, NULL);
++
++  /* close old session */
++  if (ffmpegdec->opened) {
++    GST_OBJECT_UNLOCK (ffmpegdec);
++    gst_ffmpegdec_drain (ffmpegdec);
++    GST_OBJECT_LOCK (ffmpegdec);
++    gst_ffmpegdec_close (ffmpegdec);
++
++    /* and reset the defaults that were set when a context is created */
++    avcodec_get_context_defaults (ffmpegdec->context);
++  }
++
++  /* set buffer functions */
++  ffmpegdec->context->get_buffer = gst_ffmpegdec_get_buffer;
++  ffmpegdec->context->release_buffer = gst_ffmpegdec_release_buffer;
++  ffmpegdec->context->draw_horiz_band = NULL;
++
++  /* default is to let format decide if it needs a parser */
++  ffmpegdec->turnoff_parser = FALSE;
++
++  ffmpegdec->has_b_frames = FALSE;
++
++  GST_LOG_OBJECT (ffmpegdec, "size %dx%d", ffmpegdec->context->width,
++      ffmpegdec->context->height);
++
++  /* get size and so */
++  gst_ffmpeg_caps_with_codecid (oclass->in_plugin->id,
++      oclass->in_plugin->type, caps, ffmpegdec->context);
++
++  GST_LOG_OBJECT (ffmpegdec, "size after %dx%d", ffmpegdec->context->width,
++      ffmpegdec->context->height);
++
++  if (!ffmpegdec->context->time_base.den || !ffmpegdec->context->time_base.num) {
++    GST_DEBUG_OBJECT (ffmpegdec, "forcing 25/1 framerate");
++    ffmpegdec->context->time_base.num = 1;
++    ffmpegdec->context->time_base.den = 25;
++  }
++
++  /* get pixel aspect ratio if it's set */
++  structure = gst_caps_get_structure (caps, 0);
++
++  par = gst_structure_get_value (structure, "pixel-aspect-ratio");
++  if (par) {
++    GST_DEBUG_OBJECT (ffmpegdec, "sink caps have pixel-aspect-ratio of %d:%d",
++        gst_value_get_fraction_numerator (par),
++        gst_value_get_fraction_denominator (par));
++    /* should be NULL */
++    if (ffmpegdec->par)
++      g_free (ffmpegdec->par);
++    ffmpegdec->par = g_new0 (GValue, 1);
++    gst_value_init_and_copy (ffmpegdec->par, par);
++  }
++
++  /* get the framerate from incoming caps. fps_n is set to -1 when
++   * there is no valid framerate */
++  fps = gst_structure_get_value (structure, "framerate");
++  if (fps != NULL && GST_VALUE_HOLDS_FRACTION (fps)) {
++    ffmpegdec->format.video.fps_n = gst_value_get_fraction_numerator (fps);
++    ffmpegdec->format.video.fps_d = gst_value_get_fraction_denominator (fps);
++    GST_DEBUG_OBJECT (ffmpegdec, "Using framerate %d/%d from incoming caps",
++        ffmpegdec->format.video.fps_n, ffmpegdec->format.video.fps_d);
++  } else {
++    ffmpegdec->format.video.fps_n = -1;
++    GST_DEBUG_OBJECT (ffmpegdec, "Using framerate from codec");
++  }
++
++  /* figure out if we can use direct rendering */
++  ffmpegdec->current_dr = FALSE;
++  ffmpegdec->extra_ref = FALSE;
++  if (ffmpegdec->direct_rendering) {
++    GST_DEBUG_OBJECT (ffmpegdec, "trying to enable direct rendering");
++    if (oclass->in_plugin->capabilities & CODEC_CAP_DR1) {
++      if (oclass->in_plugin->id == CODEC_ID_H264) {
++        GST_DEBUG_OBJECT (ffmpegdec, "disable direct rendering setup for H264");
++        /* does not work, many stuff reads outside of the planes */
++        ffmpegdec->current_dr = FALSE;
++        ffmpegdec->extra_ref = TRUE;
++      } else if ((oclass->in_plugin->id == CODEC_ID_SVQ1) ||
++          (oclass->in_plugin->id == CODEC_ID_VP5) ||
++          (oclass->in_plugin->id == CODEC_ID_VP6) ||
++          (oclass->in_plugin->id == CODEC_ID_VP6F) ||
++          (oclass->in_plugin->id == CODEC_ID_VP6A)) {
++        GST_DEBUG_OBJECT (ffmpegdec,
++            "disable direct rendering setup for broken stride support");
++        /* does not work, uses a incompatible stride. See #610613 */
++        ffmpegdec->current_dr = FALSE;
++        ffmpegdec->extra_ref = TRUE;
++      } else {
++        GST_DEBUG_OBJECT (ffmpegdec, "enabled direct rendering");
++        ffmpegdec->current_dr = TRUE;
++      }
++    } else {
++      GST_DEBUG_OBJECT (ffmpegdec, "direct rendering not supported");
++    }
++  }
++  if (ffmpegdec->current_dr) {
++    /* do *not* draw edges when in direct rendering, for some reason it draws
++     * outside of the memory. */
++    ffmpegdec->context->flags |= CODEC_FLAG_EMU_EDGE;
++  }
++
++  /* for AAC we only use av_parse if not on stream-format==raw or ==loas */
++  if (oclass->in_plugin->id == CODEC_ID_AAC
++      || oclass->in_plugin->id == CODEC_ID_AAC_LATM) {
++    const gchar *format = gst_structure_get_string (structure, "stream-format");
++
++    if (format == NULL || strcmp (format, "raw") == 0) {
++      ffmpegdec->turnoff_parser = TRUE;
++    }
++  }
++
++  /* for FLAC, don't parse if it's already parsed */
++  if (oclass->in_plugin->id == CODEC_ID_FLAC) {
++    if (gst_structure_has_field (structure, "streamheader"))
++      ffmpegdec->turnoff_parser = TRUE;
++  }
++
++  /* workaround encoder bugs */
++  ffmpegdec->context->workaround_bugs |= FF_BUG_AUTODETECT;
++  ffmpegdec->context->err_recognition = 1;
++
++  /* for slow cpus */
++  ffmpegdec->context->lowres = ffmpegdec->lowres;
++  ffmpegdec->context->skip_frame = ffmpegdec->skip_frame;
++
++  /* ffmpeg can draw motion vectors on top of the image (not every decoder
++   * supports it) */
++  ffmpegdec->context->debug_mv = ffmpegdec->debug_mv;
++
++  if (ffmpegdec->max_threads == 0)
++    ffmpegdec->context->thread_count = gst_ffmpeg_auto_max_threads ();
++  else
++    ffmpegdec->context->thread_count = ffmpegdec->max_threads;
++
++  /* open codec - we don't select an output pix_fmt yet,
++   * simply because we don't know! We only get it
++   * during playback... */
++  if (!gst_ffmpegdec_open (ffmpegdec))
++    goto open_failed;
++
++  /* clipping region */
++  gst_structure_get_int (structure, "width",
++      &ffmpegdec->format.video.clip_width);
++  gst_structure_get_int (structure, "height",
++      &ffmpegdec->format.video.clip_height);
++
++  GST_DEBUG_OBJECT (pad, "clipping to %dx%d",
++      ffmpegdec->format.video.clip_width, ffmpegdec->format.video.clip_height);
++
++  /* take into account the lowres property */
++  if (ffmpegdec->format.video.clip_width != -1)
++    ffmpegdec->format.video.clip_width >>= ffmpegdec->lowres;
++  if (ffmpegdec->format.video.clip_height != -1)
++    ffmpegdec->format.video.clip_height >>= ffmpegdec->lowres;
++
++  GST_DEBUG_OBJECT (pad, "final clipping to %dx%d",
++      ffmpegdec->format.video.clip_width, ffmpegdec->format.video.clip_height);
++
++done:
++  GST_OBJECT_UNLOCK (ffmpegdec);
++
++  gst_object_unref (ffmpegdec);
++
++  return ret;
++
++  /* ERRORS */
++open_failed:
++  {
++    GST_DEBUG_OBJECT (ffmpegdec, "Failed to open");
++    if (ffmpegdec->par) {
++      g_free (ffmpegdec->par);
++      ffmpegdec->par = NULL;
++    }
++    ret = FALSE;
++    goto done;
++  }
++}
++
++static GstFlowReturn
++alloc_output_buffer (GstFFMpegDec * ffmpegdec, GstBuffer ** outbuf,
++    gint width, gint height)
++{
++  GstFlowReturn ret;
++  gint fsize;
++
++  ret = GST_FLOW_ERROR;
++  *outbuf = NULL;
++
++  GST_LOG_OBJECT (ffmpegdec, "alloc output buffer");
++
++  /* see if we need renegotiation */
++  if (G_UNLIKELY (!gst_ffmpegdec_negotiate (ffmpegdec, FALSE)))
++    goto negotiate_failed;
++
++  /* get the size of the gstreamer output buffer given a
++   * width/height/format */
++  fsize = gst_ffmpeg_avpicture_get_size (ffmpegdec->context->pix_fmt,
++      width, height);
++
++  if (ffmpegdec->can_allocate_aligned) {
++    GST_LOG_OBJECT (ffmpegdec, "calling pad_alloc");
++    /* no pallete, we can use the buffer size to alloc */
++    ret = gst_pad_alloc_buffer_and_set_caps (ffmpegdec->srcpad,
++        GST_BUFFER_OFFSET_NONE, fsize,
++        GST_PAD_CAPS (ffmpegdec->srcpad), outbuf);
++    if (G_UNLIKELY (ret != GST_FLOW_OK))
++      goto alloc_failed;
++
++    /* If buffer isn't 128-bit aligned, create a memaligned one ourselves */
++    if (((uintptr_t) GST_BUFFER_DATA (*outbuf)) % 16) {
++      GST_DEBUG_OBJECT (ffmpegdec,
++          "Downstream can't allocate aligned buffers.");
++      ffmpegdec->can_allocate_aligned = FALSE;
++      gst_buffer_unref (*outbuf);
++      *outbuf = new_aligned_buffer (fsize, GST_PAD_CAPS (ffmpegdec->srcpad));
++    }
++  } else {
++    GST_LOG_OBJECT (ffmpegdec,
++        "not calling pad_alloc, we have a pallete or downstream can't give 16 byte aligned buffers.");
++    /* for paletted data we can't use pad_alloc_buffer(), because
++     * fsize contains the size of the palette, so the overall size
++     * is bigger than ffmpegcolorspace's unit size, which will
++     * prompt GstBaseTransform to complain endlessly ... */
++    *outbuf = new_aligned_buffer (fsize, GST_PAD_CAPS (ffmpegdec->srcpad));
++    ret = GST_FLOW_OK;
++  }
++  /* set caps, we do this here because the buffer is still writable here and we
++   * are sure to be negotiated */
++  gst_buffer_set_caps (*outbuf, GST_PAD_CAPS (ffmpegdec->srcpad));
++
++  return ret;
++
++  /* special cases */
++negotiate_failed:
++  {
++    GST_DEBUG_OBJECT (ffmpegdec, "negotiate failed");
++    return GST_FLOW_NOT_NEGOTIATED;
++  }
++alloc_failed:
++  {
++    GST_DEBUG_OBJECT (ffmpegdec, "pad_alloc failed %d (%s)", ret,
++        gst_flow_get_name (ret));
++    return ret;
++  }
++}
++
++static int
++gst_ffmpegdec_get_buffer (AVCodecContext * context, AVFrame * picture)
++{
++  GstBuffer *buf = NULL;
++  GstFFMpegDec *ffmpegdec;
++  gint width, height;
++  gint coded_width, coded_height;
++  gint res;
++
++  ffmpegdec = (GstFFMpegDec *) context->opaque;
++
++  GST_DEBUG_OBJECT (ffmpegdec, "getting buffer");
++
++  /* apply the last info we have seen to this picture, when we get the
++   * picture back from ffmpeg we can use this to correctly timestamp the output
++   * buffer */
++  picture->reordered_opaque = context->reordered_opaque;
++  /* make sure we don't free the buffer when it's not ours */
++  picture->opaque = NULL;
++
++  /* take width and height before clipping */
++  width = context->width;
++  height = context->height;
++  coded_width = context->coded_width;
++  coded_height = context->coded_height;
++
++  GST_LOG_OBJECT (ffmpegdec, "dimension %dx%d, coded %dx%d", width, height,
++      coded_width, coded_height);
++  if (!ffmpegdec->current_dr) {
++    GST_LOG_OBJECT (ffmpegdec, "direct rendering disabled, fallback alloc");
++    res = avcodec_default_get_buffer (context, picture);
++
++    GST_LOG_OBJECT (ffmpegdec, "linsize %d %d %d", picture->linesize[0],
++        picture->linesize[1], picture->linesize[2]);
++    GST_LOG_OBJECT (ffmpegdec, "data %u %u %u", 0,
++        (guint) (picture->data[1] - picture->data[0]),
++        (guint) (picture->data[2] - picture->data[0]));
++    return res;
++  }
++
++  switch (context->codec_type) {
++    case AVMEDIA_TYPE_VIDEO:
++      /* some ffmpeg video plugins don't see the point in setting codec_type ... */
++    case AVMEDIA_TYPE_UNKNOWN:
++    {
++      GstFlowReturn ret;
++      gint clip_width, clip_height;
++
++      /* take final clipped output size */
++      if ((clip_width = ffmpegdec->format.video.clip_width) == -1)
++        clip_width = width;
++      if ((clip_height = ffmpegdec->format.video.clip_height) == -1)
++        clip_height = height;
++
++      GST_LOG_OBJECT (ffmpegdec, "raw outsize %d/%d", width, height);
++
++      /* this is the size ffmpeg needs for the buffer */
++      avcodec_align_dimensions (context, &width, &height);
++
++      GST_LOG_OBJECT (ffmpegdec, "aligned outsize %d/%d, clip %d/%d",
++          width, height, clip_width, clip_height);
++
++      if (width != clip_width || height != clip_height) {
++        /* We can't alloc if we need to clip the output buffer later */
++        GST_LOG_OBJECT (ffmpegdec, "we need clipping, fallback alloc");
++        return avcodec_default_get_buffer (context, picture);
++      }
++
++      /* alloc with aligned dimensions for ffmpeg */
++      ret = alloc_output_buffer (ffmpegdec, &buf, width, height);
++      if (G_UNLIKELY (ret != GST_FLOW_OK)) {
++        /* alloc default buffer when we can't get one from downstream */
++        GST_LOG_OBJECT (ffmpegdec, "alloc failed, fallback alloc");
++        return avcodec_default_get_buffer (context, picture);
++      }
++
++      /* copy the right pointers and strides in the picture object */
++      gst_ffmpeg_avpicture_fill ((AVPicture *) picture,
++          GST_BUFFER_DATA (buf), context->pix_fmt, width, height);
++      break;
++    }
++    case AVMEDIA_TYPE_AUDIO:
++    default:
++      GST_ERROR_OBJECT (ffmpegdec,
++          "_get_buffer() should never get called for non-video buffers !");
++      g_assert_not_reached ();
++      break;
++  }
++
++  /* tell ffmpeg we own this buffer, tranfer the ref we have on the buffer to
++   * the opaque data. */
++  picture->type = FF_BUFFER_TYPE_USER;
++  picture->opaque = buf;
++
++#ifdef EXTRA_REF
++  if (picture->reference != 0 || ffmpegdec->extra_ref) {
++    GST_DEBUG_OBJECT (ffmpegdec, "adding extra ref");
++    gst_buffer_ref (buf);
++  }
++#endif
++
++  GST_LOG_OBJECT (ffmpegdec, "returned buffer %p", buf);
++
++  return 0;
++}
++
++static void
++gst_ffmpegdec_release_buffer (AVCodecContext * context, AVFrame * picture)
++{
++  gint i;
++  GstBuffer *buf;
++  GstFFMpegDec *ffmpegdec;
++
++  ffmpegdec = (GstFFMpegDec *) context->opaque;
++
++  /* check if it was our buffer */
++  if (picture->opaque == NULL) {
++    GST_DEBUG_OBJECT (ffmpegdec, "default release buffer");
++    avcodec_default_release_buffer (context, picture);
++    return;
++  }
++
++  /* we remove the opaque data now */
++  buf = GST_BUFFER_CAST (picture->opaque);
++  GST_DEBUG_OBJECT (ffmpegdec, "release buffer %p", buf);
++  picture->opaque = NULL;
++
++#ifdef EXTRA_REF
++  if (picture->reference != 0 || ffmpegdec->extra_ref) {
++    GST_DEBUG_OBJECT (ffmpegdec, "remove extra ref");
++    gst_buffer_unref (buf);
++  }
++#else
++  gst_buffer_unref (buf);
++#endif
++
++  /* zero out the reference in ffmpeg */
++  for (i = 0; i < 4; i++) {
++    picture->data[i] = NULL;
++    picture->linesize[i] = 0;
++  }
++}
++
++static void
++gst_ffmpegdec_add_pixel_aspect_ratio (GstFFMpegDec * ffmpegdec,
++    GstStructure * s)
++{
++  gboolean demuxer_par_set = FALSE;
++  gboolean decoder_par_set = FALSE;
++  gint demuxer_num = 1, demuxer_denom = 1;
++  gint decoder_num = 1, decoder_denom = 1;
++
++  GST_OBJECT_LOCK (ffmpegdec);
++
++  if (ffmpegdec->par) {
++    demuxer_num = gst_value_get_fraction_numerator (ffmpegdec->par);
++    demuxer_denom = gst_value_get_fraction_denominator (ffmpegdec->par);
++    demuxer_par_set = TRUE;
++    GST_DEBUG_OBJECT (ffmpegdec, "Demuxer PAR: %d:%d", demuxer_num,
++        demuxer_denom);
++  }
++
++  if (ffmpegdec->context->sample_aspect_ratio.num &&
++      ffmpegdec->context->sample_aspect_ratio.den) {
++    decoder_num = ffmpegdec->context->sample_aspect_ratio.num;
++    decoder_denom = ffmpegdec->context->sample_aspect_ratio.den;
++    decoder_par_set = TRUE;
++    GST_DEBUG_OBJECT (ffmpegdec, "Decoder PAR: %d:%d", decoder_num,
++        decoder_denom);
++  }
++
++  GST_OBJECT_UNLOCK (ffmpegdec);
++
++  if (!demuxer_par_set && !decoder_par_set)
++    goto no_par;
++
++  if (demuxer_par_set && !decoder_par_set)
++    goto use_demuxer_par;
++
++  if (decoder_par_set && !demuxer_par_set)
++    goto use_decoder_par;
++
++  /* Both the demuxer and the decoder provide a PAR. If one of
++   * the two PARs is 1:1 and the other one is not, use the one
++   * that is not 1:1. */
++  if (demuxer_num == demuxer_denom && decoder_num != decoder_denom)
++    goto use_decoder_par;
++
++  if (decoder_num == decoder_denom && demuxer_num != demuxer_denom)
++    goto use_demuxer_par;
++
++  /* Both PARs are non-1:1, so use the PAR provided by the demuxer */
++  goto use_demuxer_par;
++
++use_decoder_par:
++  {
++    GST_DEBUG_OBJECT (ffmpegdec,
++        "Setting decoder provided pixel-aspect-ratio of %u:%u", decoder_num,
++        decoder_denom);
++    gst_structure_set (s, "pixel-aspect-ratio", GST_TYPE_FRACTION, decoder_num,
++        decoder_denom, NULL);
++    return;
++  }
++
++use_demuxer_par:
++  {
++    GST_DEBUG_OBJECT (ffmpegdec,
++        "Setting demuxer provided pixel-aspect-ratio of %u:%u", demuxer_num,
++        demuxer_denom);
++    gst_structure_set (s, "pixel-aspect-ratio", GST_TYPE_FRACTION, demuxer_num,
++        demuxer_denom, NULL);
++    return;
++  }
++no_par:
++  {
++    GST_DEBUG_OBJECT (ffmpegdec,
++        "Neither demuxer nor codec provide a pixel-aspect-ratio");
++    return;
++  }
++}
++
++static gboolean
++gst_ffmpegdec_negotiate (GstFFMpegDec * ffmpegdec, gboolean force)
++{
++  GstFFMpegDecClass *oclass;
++  GstCaps *caps;
++
++  oclass = (GstFFMpegDecClass *) (G_OBJECT_GET_CLASS (ffmpegdec));
++
++  switch (oclass->in_plugin->type) {
++    case AVMEDIA_TYPE_VIDEO:
++      if (!force && ffmpegdec->format.video.width == ffmpegdec->context->width
++          && ffmpegdec->format.video.height == ffmpegdec->context->height
++          && ffmpegdec->format.video.fps_n == ffmpegdec->format.video.old_fps_n
++          && ffmpegdec->format.video.fps_d == ffmpegdec->format.video.old_fps_d
++          && ffmpegdec->format.video.pix_fmt == ffmpegdec->context->pix_fmt
++          && ffmpegdec->format.video.par_n ==
++          ffmpegdec->context->sample_aspect_ratio.num
++          && ffmpegdec->format.video.par_d ==
++          ffmpegdec->context->sample_aspect_ratio.den)
++        return TRUE;
++      GST_DEBUG_OBJECT (ffmpegdec,
++          "Renegotiating video from %dx%d@ %d:%d PAR %d/%d fps to %dx%d@ %d:%d PAR %d/%d fps",
++          ffmpegdec->format.video.width, ffmpegdec->format.video.height,
++          ffmpegdec->format.video.par_n, ffmpegdec->format.video.par_d,
++          ffmpegdec->format.video.old_fps_n, ffmpegdec->format.video.old_fps_n,
++          ffmpegdec->context->width, ffmpegdec->context->height,
++          ffmpegdec->context->sample_aspect_ratio.num,
++          ffmpegdec->context->sample_aspect_ratio.den,
++          ffmpegdec->format.video.fps_n, ffmpegdec->format.video.fps_d);
++      ffmpegdec->format.video.width = ffmpegdec->context->width;
++      ffmpegdec->format.video.height = ffmpegdec->context->height;
++      ffmpegdec->format.video.old_fps_n = ffmpegdec->format.video.fps_n;
++      ffmpegdec->format.video.old_fps_d = ffmpegdec->format.video.fps_d;
++      ffmpegdec->format.video.pix_fmt = ffmpegdec->context->pix_fmt;
++      ffmpegdec->format.video.par_n =
++          ffmpegdec->context->sample_aspect_ratio.num;
++      ffmpegdec->format.video.par_d =
++          ffmpegdec->context->sample_aspect_ratio.den;
++      break;
++    case AVMEDIA_TYPE_AUDIO:
++    {
++      gint depth = av_smp_format_depth (ffmpegdec->context->sample_fmt);
++      if (!force && ffmpegdec->format.audio.samplerate ==
++          ffmpegdec->context->sample_rate &&
++          ffmpegdec->format.audio.channels == ffmpegdec->context->channels &&
++          ffmpegdec->format.audio.depth == depth)
++        return TRUE;
++      GST_DEBUG_OBJECT (ffmpegdec,
++          "Renegotiating audio from %dHz@%dchannels (%d) to %dHz@%dchannels (%d)",
++          ffmpegdec->format.audio.samplerate, ffmpegdec->format.audio.channels,
++          ffmpegdec->format.audio.depth,
++          ffmpegdec->context->sample_rate, ffmpegdec->context->channels, depth);
++      ffmpegdec->format.audio.samplerate = ffmpegdec->context->sample_rate;
++      ffmpegdec->format.audio.channels = ffmpegdec->context->channels;
++      ffmpegdec->format.audio.depth = depth;
++    }
++      break;
++    default:
++      break;
++  }
++
++  caps = gst_ffmpeg_codectype_to_caps (oclass->in_plugin->type,
++      ffmpegdec->context, oclass->in_plugin->id, FALSE);
++
++  if (caps == NULL)
++    goto no_caps;
++
++  switch (oclass->in_plugin->type) {
++    case AVMEDIA_TYPE_VIDEO:
++    {
++      gint width, height;
++      gboolean interlaced;
++
++      width = ffmpegdec->format.video.clip_width;
++      height = ffmpegdec->format.video.clip_height;
++      interlaced = ffmpegdec->format.video.interlaced;
++
++      if (width != -1 && height != -1) {
++        /* overwrite the output size with the dimension of the
++         * clipping region but only if they are smaller. */
++        if (width < ffmpegdec->context->width)
++          gst_caps_set_simple (caps, "width", G_TYPE_INT, width, NULL);
++        if (height < ffmpegdec->context->height)
++          gst_caps_set_simple (caps, "height", G_TYPE_INT, height, NULL);
++      }
++      gst_caps_set_simple (caps, "interlaced", G_TYPE_BOOLEAN, interlaced,
++          NULL);
++
++      /* If a demuxer provided a framerate then use it (#313970) */
++      if (ffmpegdec->format.video.fps_n != -1) {
++        gst_caps_set_simple (caps, "framerate",
++            GST_TYPE_FRACTION, ffmpegdec->format.video.fps_n,
++            ffmpegdec->format.video.fps_d, NULL);
++      }
++      gst_ffmpegdec_add_pixel_aspect_ratio (ffmpegdec,
++          gst_caps_get_structure (caps, 0));
++      break;
++    }
++    case AVMEDIA_TYPE_AUDIO:
++    {
++      break;
++    }
++    default:
++      break;
++  }
++
++  if (!gst_pad_set_caps (ffmpegdec->srcpad, caps))
++    goto caps_failed;
++
++  gst_caps_unref (caps);
++
++  return TRUE;
++
++  /* ERRORS */
++no_caps:
++  {
++#ifdef HAVE_FFMPEG_UNINSTALLED
++    /* using internal ffmpeg snapshot */
++    GST_ELEMENT_ERROR (ffmpegdec, CORE, NEGOTIATION,
++        ("Could not find GStreamer caps mapping for FFmpeg codec '%s'.",
++            oclass->in_plugin->name), (NULL));
++#else
++    /* using external ffmpeg */
++    GST_ELEMENT_ERROR (ffmpegdec, CORE, NEGOTIATION,
++        ("Could not find GStreamer caps mapping for FFmpeg codec '%s', and "
++            "you are using an external libavcodec. This is most likely due to "
++            "a packaging problem and/or libavcodec having been upgraded to a "
++            "version that is not compatible with this version of "
++            "gstreamer-ffmpeg. Make sure your gstreamer-ffmpeg and libavcodec "
++            "packages come from the same source/repository.",
++            oclass->in_plugin->name), (NULL));
++#endif
++    return FALSE;
++  }
++caps_failed:
++  {
++    GST_ELEMENT_ERROR (ffmpegdec, CORE, NEGOTIATION, (NULL),
++        ("Could not set caps for ffmpeg decoder (%s), not fixed?",
++            oclass->in_plugin->name));
++    gst_caps_unref (caps);
++
++    return FALSE;
++  }
++}
++
++/* perform qos calculations before decoding the next frame.
++ *
++ * Sets the skip_frame flag and if things are really bad, skips to the next
++ * keyframe.
++ * 
++ * Returns TRUE if the frame should be decoded, FALSE if the frame can be dropped
++ * entirely.
++ */
++static gboolean
++gst_ffmpegdec_do_qos (GstFFMpegDec * ffmpegdec, GstClockTime timestamp,
++    gboolean * mode_switch)
++{
++  GstClockTimeDiff diff;
++  gdouble proportion;
++  GstClockTime qostime, earliest_time;
++  gboolean res = TRUE;
++
++  *mode_switch = FALSE;
++
++  /* no timestamp, can't do QoS */
++  if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (timestamp)))
++    goto no_qos;
++
++  /* get latest QoS observation values */
++  gst_ffmpegdec_read_qos (ffmpegdec, &proportion, &earliest_time);
++
++  /* skip qos if we have no observation (yet) */
++  if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (earliest_time))) {
++    /* no skip_frame initialy */
++    ffmpegdec->context->skip_frame = AVDISCARD_DEFAULT;
++    goto no_qos;
++  }
++
++  /* qos is done on running time of the timestamp */
++  qostime = gst_segment_to_running_time (&ffmpegdec->segment, GST_FORMAT_TIME,
++      timestamp);
++
++  /* timestamp can be out of segment, then we don't do QoS */
++  if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (qostime)))
++    goto no_qos;
++
++  /* see how our next timestamp relates to the latest qos timestamp. negative
++   * values mean we are early, positive values mean we are too late. */
++  diff = GST_CLOCK_DIFF (qostime, earliest_time);
++
++  GST_DEBUG_OBJECT (ffmpegdec, "QOS: qostime %" GST_TIME_FORMAT
++      ", earliest %" GST_TIME_FORMAT, GST_TIME_ARGS (qostime),
++      GST_TIME_ARGS (earliest_time));
++
++  /* if we using less than 40% of the available time, we can try to
++   * speed up again when we were slow. */
++  if (proportion < 0.4 && diff < 0) {
++    goto normal_mode;
++  } else {
++    if (diff >= 0) {
++      /* we're too slow, try to speed up */
++      /* switch to skip_frame mode */
++      goto skip_frame;
++    }
++  }
++
++no_qos:
++  ffmpegdec->processed++;
++  return TRUE;
++
++normal_mode:
++  {
++    if (ffmpegdec->context->skip_frame != AVDISCARD_DEFAULT) {
++      ffmpegdec->context->skip_frame = AVDISCARD_DEFAULT;
++      *mode_switch = TRUE;
++      GST_DEBUG_OBJECT (ffmpegdec, "QOS: normal mode %g < 0.4", proportion);
++    }
++    ffmpegdec->processed++;
++    return TRUE;
++  }
++skip_frame:
++  {
++    if (ffmpegdec->context->skip_frame != AVDISCARD_NONREF) {
++      ffmpegdec->context->skip_frame = AVDISCARD_NONREF;
++      *mode_switch = TRUE;
++      GST_DEBUG_OBJECT (ffmpegdec,
++          "QOS: hurry up, diff %" G_GINT64_FORMAT " >= 0", diff);
++    }
++    goto drop_qos;
++  }
++drop_qos:
++  {
++    GstClockTime stream_time, jitter;
++    GstMessage *qos_msg;
++
++    ffmpegdec->dropped++;
++    stream_time =
++        gst_segment_to_stream_time (&ffmpegdec->segment, GST_FORMAT_TIME,
++        timestamp);
++    jitter = GST_CLOCK_DIFF (qostime, earliest_time);
++    qos_msg =
++        gst_message_new_qos (GST_OBJECT_CAST (ffmpegdec), FALSE, qostime,
++        stream_time, timestamp, GST_CLOCK_TIME_NONE);
++    gst_message_set_qos_values (qos_msg, jitter, proportion, 1000000);
++    gst_message_set_qos_stats (qos_msg, GST_FORMAT_BUFFERS,
++        ffmpegdec->processed, ffmpegdec->dropped);
++    gst_element_post_message (GST_ELEMENT_CAST (ffmpegdec), qos_msg);
++
++    return res;
++  }
++}
++
++/* returns TRUE if buffer is within segment, else FALSE.
++ * if Buffer is on segment border, it's timestamp and duration will be clipped */
++static gboolean
++clip_video_buffer (GstFFMpegDec * dec, GstBuffer * buf, GstClockTime in_ts,
++    GstClockTime in_dur)
++{
++  gboolean res = TRUE;
++  gint64 cstart, cstop;
++  GstClockTime stop;
++
++  GST_LOG_OBJECT (dec,
++      "timestamp:%" GST_TIME_FORMAT " , duration:%" GST_TIME_FORMAT,
++      GST_TIME_ARGS (in_ts), GST_TIME_ARGS (in_dur));
++
++  /* can't clip without TIME segment */
++  if (G_UNLIKELY (dec->segment.format != GST_FORMAT_TIME))
++    goto beach;
++
++  /* we need a start time */
++  if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (in_ts)))
++    goto beach;
++
++  /* generate valid stop, if duration unknown, we have unknown stop */
++  stop =
++      GST_CLOCK_TIME_IS_VALID (in_dur) ? (in_ts + in_dur) : GST_CLOCK_TIME_NONE;
++
++  /* now clip */
++  res =
++      gst_segment_clip (&dec->segment, GST_FORMAT_TIME, in_ts, stop, &cstart,
++      &cstop);
++  if (G_UNLIKELY (!res))
++    goto beach;
++
++  /* we're pretty sure the duration of this buffer is not till the end of this
++   * segment (which _clip will assume when the stop is -1) */
++  if (stop == GST_CLOCK_TIME_NONE)
++    cstop = GST_CLOCK_TIME_NONE;
++
++  /* update timestamp and possibly duration if the clipped stop time is
++   * valid */
++  GST_BUFFER_TIMESTAMP (buf) = cstart;
++  if (GST_CLOCK_TIME_IS_VALID (cstop))
++    GST_BUFFER_DURATION (buf) = cstop - cstart;
++
++  GST_LOG_OBJECT (dec,
++      "clipped timestamp:%" GST_TIME_FORMAT " , duration:%" GST_TIME_FORMAT,
++      GST_TIME_ARGS (cstart), GST_TIME_ARGS (GST_BUFFER_DURATION (buf)));
++
++beach:
++  GST_LOG_OBJECT (dec, "%sdropping", (res ? "not " : ""));
++  return res;
++}
++
++
++/* get an outbuf buffer with the current picture */
++static GstFlowReturn
++get_output_buffer (GstFFMpegDec * ffmpegdec, GstBuffer ** outbuf)
++{
++  GstFlowReturn ret;
++
++  ret = GST_FLOW_OK;
++  *outbuf = NULL;
++
++  if (ffmpegdec->picture->opaque != NULL) {
++    /* we allocated a picture already for ffmpeg to decode into, let's pick it
++     * up and use it now. */
++    *outbuf = (GstBuffer *) ffmpegdec->picture->opaque;
++    GST_LOG_OBJECT (ffmpegdec, "using opaque buffer %p", *outbuf);
++#ifndef EXTRA_REF
++    gst_buffer_ref (*outbuf);
++#endif
++  } else {
++    AVPicture pic, *outpic;
++    gint width, height;
++
++    GST_LOG_OBJECT (ffmpegdec, "get output buffer");
++
++    /* figure out size of output buffer, this is the clipped output size because
++     * we will copy the picture into it but only when the clipping region is
++     * smaller than the actual picture size. */
++    if ((width = ffmpegdec->format.video.clip_width) == -1)
++      width = ffmpegdec->context->width;
++    else if (width > ffmpegdec->context->width)
++      width = ffmpegdec->context->width;
++
++    if ((height = ffmpegdec->format.video.clip_height) == -1)
++      height = ffmpegdec->context->height;
++    else if (height > ffmpegdec->context->height)
++      height = ffmpegdec->context->height;
++
++    GST_LOG_OBJECT (ffmpegdec, "clip width %d/height %d", width, height);
++
++    ret = alloc_output_buffer (ffmpegdec, outbuf, width, height);
++    if (G_UNLIKELY (ret != GST_FLOW_OK))
++      goto alloc_failed;
++
++    /* original ffmpeg code does not handle odd sizes correctly.
++     * This patched up version does */
++    gst_ffmpeg_avpicture_fill (&pic, GST_BUFFER_DATA (*outbuf),
++        ffmpegdec->context->pix_fmt, width, height);
++
++    outpic = (AVPicture *) ffmpegdec->picture;
++
++    GST_LOG_OBJECT (ffmpegdec, "linsize %d %d %d", outpic->linesize[0],
++        outpic->linesize[1], outpic->linesize[2]);
++    GST_LOG_OBJECT (ffmpegdec, "data %u %u %u", 0,
++        (guint) (outpic->data[1] - outpic->data[0]),
++        (guint) (outpic->data[2] - outpic->data[0]));
++
++    av_picture_copy (&pic, outpic, ffmpegdec->context->pix_fmt, width, height);
++  }
++  ffmpegdec->picture->reordered_opaque = -1;
++
++  return ret;
++
++  /* special cases */
++alloc_failed:
++  {
++    GST_DEBUG_OBJECT (ffmpegdec, "pad_alloc failed");
++    return ret;
++  }
++}
++
++static void
++clear_queued (GstFFMpegDec * ffmpegdec)
++{
++  g_list_foreach (ffmpegdec->queued, (GFunc) gst_mini_object_unref, NULL);
++  g_list_free (ffmpegdec->queued);
++  ffmpegdec->queued = NULL;
++}
++
++static GstFlowReturn
++flush_queued (GstFFMpegDec * ffmpegdec)
++{
++  GstFlowReturn res = GST_FLOW_OK;
++
++  while (ffmpegdec->queued) {
++    GstBuffer *buf = GST_BUFFER_CAST (ffmpegdec->queued->data);
++
++    GST_LOG_OBJECT (ffmpegdec, "pushing buffer %p, offset %"
++        G_GUINT64_FORMAT ", timestamp %"
++        GST_TIME_FORMAT ", duration %" GST_TIME_FORMAT, buf,
++        GST_BUFFER_OFFSET (buf),
++        GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)),
++        GST_TIME_ARGS (GST_BUFFER_DURATION (buf)));
++
++    /* iterate ouput queue an push downstream */
++    res = gst_pad_push (ffmpegdec->srcpad, buf);
++
++    ffmpegdec->queued =
++        g_list_delete_link (ffmpegdec->queued, ffmpegdec->queued);
++  }
++  return res;
++}
++
++static void
++gst_avpacket_init (AVPacket * packet, guint8 * data, guint size)
++{
++  memset (packet, 0, sizeof (AVPacket));
++  packet->data = data;
++  packet->size = size;
++}
++
++/* gst_ffmpegdec_[video|audio]_frame:
++ * ffmpegdec:
++ * data: pointer to the data to decode
++ * size: size of data in bytes
++ * in_timestamp: incoming timestamp.
++ * in_duration: incoming duration.
++ * in_offset: incoming offset (frame number).
++ * outbuf: outgoing buffer. Different from NULL ONLY if it contains decoded data.
++ * ret: Return flow.
++ *
++ * Returns: number of bytes used in decoding. The check for successful decode is
++ *   outbuf being non-NULL.
++ */
++static gint
++gst_ffmpegdec_video_frame (GstFFMpegDec * ffmpegdec,
++    guint8 * data, guint size,
++    const GstTSInfo * dec_info, GstBuffer ** outbuf, GstFlowReturn * ret)
++{
++  gint len = -1;
++  gint have_data;
++  gboolean mode_switch;
++  gboolean decode;
++  gint skip_frame = AVDISCARD_DEFAULT;
++  GstClockTime out_timestamp, out_duration, out_pts;
++  gint64 out_offset;
++  const GstTSInfo *out_info;
++  AVPacket packet;
++
++  *ret = GST_FLOW_OK;
++  *outbuf = NULL;
++
++  ffmpegdec->context->opaque = ffmpegdec;
++
++  /* in case we skip frames */
++  ffmpegdec->picture->pict_type = -1;
++
++  /* run QoS code, we don't stop decoding the frame when we are late because
++   * else we might skip a reference frame */
++  decode = gst_ffmpegdec_do_qos (ffmpegdec, dec_info->timestamp, &mode_switch);
++
++  if (ffmpegdec->is_realvideo && data != NULL) {
++    gint slice_count;
++    gint i;
++
++    /* setup the slice table for realvideo */
++    if (ffmpegdec->context->slice_offset == NULL)
++      ffmpegdec->context->slice_offset = g_malloc (sizeof (guint32) * 1000);
++
++    slice_count = (*data++) + 1;
++    ffmpegdec->context->slice_count = slice_count;
++
++    for (i = 0; i < slice_count; i++) {
++      data += 4;
++      ffmpegdec->context->slice_offset[i] = GST_READ_UINT32_LE (data);
++      data += 4;
++    }
++  }
++
++  if (!decode) {
++    /* no decoding needed, save previous skip_frame value and brutely skip
++     * decoding everything */
++    skip_frame = ffmpegdec->context->skip_frame;
++    ffmpegdec->context->skip_frame = AVDISCARD_NONREF;
++  }
++
++  /* save reference to the timing info */
++  ffmpegdec->context->reordered_opaque = (gint64) dec_info->idx;
++  ffmpegdec->picture->reordered_opaque = (gint64) dec_info->idx;
++
++  GST_DEBUG_OBJECT (ffmpegdec, "stored opaque values idx %d", dec_info->idx);
++
++  /* now decode the frame */
++  gst_avpacket_init (&packet, data, size);
++  len = avcodec_decode_video2 (ffmpegdec->context,
++      ffmpegdec->picture, &have_data, &packet);
++
++  /* restore previous state */
++  if (!decode)
++    ffmpegdec->context->skip_frame = skip_frame;
++
++  GST_DEBUG_OBJECT (ffmpegdec, "after decode: len %d, have_data %d",
++      len, have_data);
++
++  /* when we are in skip_frame mode, don't complain when ffmpeg returned
++   * no data because we told it to skip stuff. */
++  if (len < 0 && (mode_switch || ffmpegdec->context->skip_frame))
++    len = 0;
++
++  if (len > 0 && have_data <= 0 && (mode_switch
++          || ffmpegdec->context->skip_frame)) {
++    /* we consumed some bytes but nothing decoded and we are skipping frames,
++     * disable the interpollation of DTS timestamps */
++    ffmpegdec->last_out = -1;
++  }
++
++  /* no data, we're done */
++  if (len < 0 || have_data <= 0)
++    goto beach;
++
++  /* get the output picture timing info again */
++  out_info = gst_ts_info_get (ffmpegdec, ffmpegdec->picture->reordered_opaque);
++  out_pts = out_info->timestamp;
++  out_duration = out_info->duration;
++  out_offset = out_info->offset;
++
++  GST_DEBUG_OBJECT (ffmpegdec,
++      "pts %" G_GUINT64_FORMAT " duration %" G_GUINT64_FORMAT " offset %"
++      G_GINT64_FORMAT, out_pts, out_duration, out_offset);
++  GST_DEBUG_OBJECT (ffmpegdec, "picture: pts %" G_GUINT64_FORMAT,
++      (guint64) ffmpegdec->picture->pts);
++  GST_DEBUG_OBJECT (ffmpegdec, "picture: num %d",
++      ffmpegdec->picture->coded_picture_number);
++  GST_DEBUG_OBJECT (ffmpegdec, "picture: ref %d",
++      ffmpegdec->picture->reference);
++  GST_DEBUG_OBJECT (ffmpegdec, "picture: display %d",
++      ffmpegdec->picture->display_picture_number);
++  GST_DEBUG_OBJECT (ffmpegdec, "picture: opaque %p",
++      ffmpegdec->picture->opaque);
++  GST_DEBUG_OBJECT (ffmpegdec, "picture: reordered opaque %" G_GUINT64_FORMAT,
++      (guint64) ffmpegdec->picture->reordered_opaque);
++  GST_DEBUG_OBJECT (ffmpegdec, "repeat_pict:%d",
++      ffmpegdec->picture->repeat_pict);
++  GST_DEBUG_OBJECT (ffmpegdec, "interlaced_frame:%d",
++      ffmpegdec->picture->interlaced_frame);
++
++  if (G_UNLIKELY (ffmpegdec->picture->interlaced_frame !=
++          ffmpegdec->format.video.interlaced)) {
++    GST_WARNING ("Change in interlacing ! picture:%d, recorded:%d",
++        ffmpegdec->picture->interlaced_frame,
++        ffmpegdec->format.video.interlaced);
++    ffmpegdec->format.video.interlaced = ffmpegdec->picture->interlaced_frame;
++    gst_ffmpegdec_negotiate (ffmpegdec, TRUE);
++  }
++
++  /* Whether a frame is interlaced or not is unknown at the time of
++     buffer allocation, so caps on the buffer in opaque will have
++     the previous frame's interlaced flag set. So if interlacedness
++     has changed since allocation, we update the buffer (if any)
++     caps now with the correct interlaced flag. */
++  if (ffmpegdec->picture->opaque != NULL) {
++    GstBuffer *buffer = ffmpegdec->picture->opaque;
++    if (GST_BUFFER_CAPS (buffer) && GST_PAD_CAPS (ffmpegdec->srcpad)) {
++      GstStructure *s = gst_caps_get_structure (GST_BUFFER_CAPS (buffer), 0);
++      gboolean interlaced;
++      gboolean found = gst_structure_get_boolean (s, "interlaced", &interlaced);
++      if (!found || (!!interlaced != !!ffmpegdec->format.video.interlaced)) {
++        GST_DEBUG_OBJECT (ffmpegdec,
++            "Buffer interlacing does not match pad, updating");
++        buffer = gst_buffer_make_metadata_writable (buffer);
++        gst_buffer_set_caps (buffer, GST_PAD_CAPS (ffmpegdec->srcpad));
++        ffmpegdec->picture->opaque = buffer;
++      }
++    }
++  }
++
++  /* check that the timestamps go upwards */
++  if (ffmpegdec->last_out != -1 && ffmpegdec->last_out > out_pts) {
++    /* timestamps go backwards, this means frames were reordered and we must
++     * be dealing with DTS as the buffer timestamps */
++    if (!ffmpegdec->reordered_out) {
++      GST_DEBUG_OBJECT (ffmpegdec, "detected reordered out timestamps");
++      ffmpegdec->reordered_out = TRUE;
++    }
++    if (ffmpegdec->reordered_in) {
++      /* we reset the input reordering here because we want to recover from an
++       * occasionally wrong reordered input timestamp */
++      GST_DEBUG_OBJECT (ffmpegdec, "assuming DTS input timestamps");
++      ffmpegdec->reordered_in = FALSE;
++    }
++  }
++
++  if (out_pts == 0 && out_pts == ffmpegdec->last_out) {
++    GST_LOG_OBJECT (ffmpegdec, "ffmpeg returns 0 timestamps, ignoring");
++    /* some codecs only output 0 timestamps, when that happens, make us select an
++     * output timestamp based on the input timestamp. We do this by making the
++     * ffmpeg timestamp and the interpollated next timestamp invalid. */
++    out_pts = -1;
++    ffmpegdec->next_out = -1;
++  } else
++    ffmpegdec->last_out = out_pts;
++
++  /* we assume DTS as input timestamps unless we see reordered input
++   * timestamps */
++  if (!ffmpegdec->reordered_in && ffmpegdec->reordered_out) {
++    /* PTS and DTS are the same for keyframes */
++    if (ffmpegdec->next_out != -1) {
++      /* interpolate all timestamps except for keyframes, FIXME, this is
++       * wrong when QoS is active. */
++      GST_DEBUG_OBJECT (ffmpegdec, "interpolate timestamps");
++      out_pts = -1;
++      out_offset = -1;
++    }
++  }
++
++  /* get a handle to the output buffer */
++  *ret = get_output_buffer (ffmpegdec, outbuf);
++  if (G_UNLIKELY (*ret != GST_FLOW_OK))
++    goto no_output;
++
++  /*
++   * Timestamps:
++   *
++   *  1) Copy picture timestamp if valid
++   *  2) else interpolate from previous output timestamp
++   *  3) else copy input timestamp
++   */
++  out_timestamp = -1;
++  if (out_pts != -1) {
++    /* Get (interpolated) timestamp from FFMPEG */
++    out_timestamp = (GstClockTime) out_pts;
++    GST_LOG_OBJECT (ffmpegdec, "using timestamp %" GST_TIME_FORMAT
++        " returned by ffmpeg", GST_TIME_ARGS (out_timestamp));
++  }
++  if (!GST_CLOCK_TIME_IS_VALID (out_timestamp) && ffmpegdec->next_out != -1) {
++    out_timestamp = ffmpegdec->next_out;
++    GST_LOG_OBJECT (ffmpegdec, "using next timestamp %" GST_TIME_FORMAT,
++        GST_TIME_ARGS (out_timestamp));
++  }
++  if (!GST_CLOCK_TIME_IS_VALID (out_timestamp)) {
++    out_timestamp = dec_info->timestamp;
++    GST_LOG_OBJECT (ffmpegdec, "using in timestamp %" GST_TIME_FORMAT,
++        GST_TIME_ARGS (out_timestamp));
++  }
++  GST_BUFFER_TIMESTAMP (*outbuf) = out_timestamp;
++
++  /*
++   * Offset:
++   *  0) Use stored input offset (from opaque)
++   *  1) Use value converted from timestamp if valid
++   *  2) Use input offset if valid
++   */
++  if (out_offset != GST_BUFFER_OFFSET_NONE) {
++    /* out_offset already contains the offset from ts_info */
++    GST_LOG_OBJECT (ffmpegdec, "Using offset returned by ffmpeg");
++  } else if (out_timestamp != GST_CLOCK_TIME_NONE) {
++    GstFormat out_fmt = GST_FORMAT_DEFAULT;
++    GST_LOG_OBJECT (ffmpegdec, "Using offset converted from timestamp");
++    /* FIXME, we should really remove this as it's not nice at all to do
++     * upstream queries for each frame to get the frame offset. We also can't
++     * really remove this because it is the only way of setting frame offsets
++     * on outgoing buffers. We should have metadata so that the upstream peer
++     * can set a frame number on the encoded data. */
++    gst_pad_query_peer_convert (ffmpegdec->sinkpad,
++        GST_FORMAT_TIME, out_timestamp, &out_fmt, &out_offset);
++  } else if (dec_info->offset != GST_BUFFER_OFFSET_NONE) {
++    /* FIXME, the input offset is input media specific and might not
++     * be the same for the output media. (byte offset as input, frame number
++     * as output, for example) */
++    GST_LOG_OBJECT (ffmpegdec, "using in_offset %" G_GINT64_FORMAT,
++        dec_info->offset);
++    out_offset = dec_info->offset;
++  } else {
++    GST_LOG_OBJECT (ffmpegdec, "no valid offset found");
++    out_offset = GST_BUFFER_OFFSET_NONE;
++  }
++  GST_BUFFER_OFFSET (*outbuf) = out_offset;
++
++  /*
++   * Duration:
++   *
++   *  1) Use reordered input duration if valid
++   *  2) Else use input duration
++   *  3) else use input framerate
++   *  4) else use ffmpeg framerate
++   */
++  if (GST_CLOCK_TIME_IS_VALID (out_duration)) {
++    /* We have a valid (reordered) duration */
++    GST_LOG_OBJECT (ffmpegdec, "Using duration returned by ffmpeg");
++  } else if (GST_CLOCK_TIME_IS_VALID (dec_info->duration)) {
++    GST_LOG_OBJECT (ffmpegdec, "using in_duration");
++    out_duration = dec_info->duration;
++  } else if (GST_CLOCK_TIME_IS_VALID (ffmpegdec->last_diff)) {
++    GST_LOG_OBJECT (ffmpegdec, "using last-diff");
++    out_duration = ffmpegdec->last_diff;
++  } else {
++    /* if we have an input framerate, use that */
++    if (ffmpegdec->format.video.fps_n != -1 &&
++        (ffmpegdec->format.video.fps_n != 1000 &&
++            ffmpegdec->format.video.fps_d != 1)) {
++      GST_LOG_OBJECT (ffmpegdec, "using input framerate for duration");
++      out_duration = gst_util_uint64_scale_int (GST_SECOND,
++          ffmpegdec->format.video.fps_d, ffmpegdec->format.video.fps_n);
++    } else {
++      /* don't try to use the decoder's framerate when it seems a bit abnormal,
++       * which we assume when den >= 1000... */
++      if (ffmpegdec->context->time_base.num != 0 &&
++          (ffmpegdec->context->time_base.den > 0 &&
++              ffmpegdec->context->time_base.den < 1000)) {
++        GST_LOG_OBJECT (ffmpegdec, "using decoder's framerate for duration");
++        out_duration = gst_util_uint64_scale_int (GST_SECOND,
++            ffmpegdec->context->time_base.num *
++            ffmpegdec->context->ticks_per_frame,
++            ffmpegdec->context->time_base.den);
++      } else {
++        GST_LOG_OBJECT (ffmpegdec, "no valid duration found");
++      }
++    }
++  }
++
++  /* Take repeat_pict into account */
++  if (GST_CLOCK_TIME_IS_VALID (out_duration)) {
++    out_duration += out_duration * ffmpegdec->picture->repeat_pict / 2;
++  }
++  GST_BUFFER_DURATION (*outbuf) = out_duration;
++
++  if (out_timestamp != -1 && out_duration != -1 && out_duration != 0)
++    ffmpegdec->next_out = out_timestamp + out_duration;
++  else
++    ffmpegdec->next_out = -1;
++
++  /* now see if we need to clip the buffer against the segment boundaries. */
++  if (G_UNLIKELY (!clip_video_buffer (ffmpegdec, *outbuf, out_timestamp,
++              out_duration)))
++    goto clipped;
++
++  if (ffmpegdec->picture->top_field_first)
++    GST_BUFFER_FLAG_SET (*outbuf, GST_VIDEO_BUFFER_TFF);
++
++
++beach:
++  GST_DEBUG_OBJECT (ffmpegdec, "return flow %d, out %p, len %d",
++      *ret, *outbuf, len);
++  return len;
++
++  /* special cases */
++no_output:
++  {
++    GST_DEBUG_OBJECT (ffmpegdec, "no output buffer");
++    len = -1;
++    goto beach;
++  }
++clipped:
++  {
++    GST_DEBUG_OBJECT (ffmpegdec, "buffer clipped");
++    gst_buffer_unref (*outbuf);
++    *outbuf = NULL;
++    goto beach;
++  }
++}
++
++/* returns TRUE if buffer is within segment, else FALSE.
++ * if Buffer is on segment border, it's timestamp and duration will be clipped */
++static gboolean
++clip_audio_buffer (GstFFMpegDec * dec, GstBuffer * buf, GstClockTime in_ts,
++    GstClockTime in_dur)
++{
++  GstClockTime stop;
++  gint64 diff, ctime, cstop;
++  gboolean res = TRUE;
++
++  GST_LOG_OBJECT (dec,
++      "timestamp:%" GST_TIME_FORMAT ", duration:%" GST_TIME_FORMAT
++      ", size %u", GST_TIME_ARGS (in_ts), GST_TIME_ARGS (in_dur),
++      GST_BUFFER_SIZE (buf));
++
++  /* can't clip without TIME segment */
++  if (G_UNLIKELY (dec->segment.format != GST_FORMAT_TIME))
++    goto beach;
++
++  /* we need a start time */
++  if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (in_ts)))
++    goto beach;
++
++  /* trust duration */
++  stop = in_ts + in_dur;
++
++  res = gst_segment_clip (&dec->segment, GST_FORMAT_TIME, in_ts, stop, &ctime,
++      &cstop);
++  if (G_UNLIKELY (!res))
++    goto out_of_segment;
++
++  /* see if some clipping happened */
++  if (G_UNLIKELY ((diff = ctime - in_ts) > 0)) {
++    /* bring clipped time to bytes */
++    diff =
++        gst_util_uint64_scale_int (diff, dec->format.audio.samplerate,
++        GST_SECOND) * (dec->format.audio.depth * dec->format.audio.channels);
++
++    GST_DEBUG_OBJECT (dec, "clipping start to %" GST_TIME_FORMAT " %"
++        G_GINT64_FORMAT " bytes", GST_TIME_ARGS (ctime), diff);
++
++    GST_BUFFER_SIZE (buf) -= diff;
++    GST_BUFFER_DATA (buf) += diff;
++  }
++  if (G_UNLIKELY ((diff = stop - cstop) > 0)) {
++    /* bring clipped time to bytes */
++    diff =
++        gst_util_uint64_scale_int (diff, dec->format.audio.samplerate,
++        GST_SECOND) * (dec->format.audio.depth * dec->format.audio.channels);
++
++    GST_DEBUG_OBJECT (dec, "clipping stop to %" GST_TIME_FORMAT " %"
++        G_GINT64_FORMAT " bytes", GST_TIME_ARGS (cstop), diff);
++
++    GST_BUFFER_SIZE (buf) -= diff;
++  }
++  GST_BUFFER_TIMESTAMP (buf) = ctime;
++  GST_BUFFER_DURATION (buf) = cstop - ctime;
++
++beach:
++  GST_LOG_OBJECT (dec, "%sdropping", (res ? "not " : ""));
++  return res;
++
++  /* ERRORS */
++out_of_segment:
++  {
++    GST_LOG_OBJECT (dec, "out of segment");
++    goto beach;
++  }
++}
++
++static gint
++gst_ffmpegdec_audio_frame (GstFFMpegDec * ffmpegdec,
++    AVCodec * in_plugin, guint8 * data, guint size,
++    const GstTSInfo * dec_info, GstBuffer ** outbuf, GstFlowReturn * ret)
++{
++  gint len = -1;
++  gint have_data = AVCODEC_MAX_AUDIO_FRAME_SIZE;
++  GstClockTime out_timestamp, out_duration;
++  gint64 out_offset;
++  AVPacket packet;
++
++  GST_DEBUG_OBJECT (ffmpegdec,
++      "size:%d, offset:%" G_GINT64_FORMAT ", ts:%" GST_TIME_FORMAT ", dur:%"
++      GST_TIME_FORMAT ", ffmpegdec->next_out:%" GST_TIME_FORMAT, size,
++      dec_info->offset, GST_TIME_ARGS (dec_info->timestamp),
++      GST_TIME_ARGS (dec_info->duration), GST_TIME_ARGS (ffmpegdec->next_out));
++
++  *outbuf =
++      new_aligned_buffer (AVCODEC_MAX_AUDIO_FRAME_SIZE,
++      GST_PAD_CAPS (ffmpegdec->srcpad));
++
++  gst_avpacket_init (&packet, data, size);
++  len = avcodec_decode_audio3 (ffmpegdec->context,
++      (int16_t *) GST_BUFFER_DATA (*outbuf), &have_data, &packet);
++  GST_DEBUG_OBJECT (ffmpegdec,
++      "Decode audio: len=%d, have_data=%d", len, have_data);
++
++  if (len >= 0 && have_data > 0) {
++    GST_DEBUG_OBJECT (ffmpegdec, "Creating output buffer");
++    if (!gst_ffmpegdec_negotiate (ffmpegdec, FALSE)) {
++      gst_buffer_unref (*outbuf);
++      *outbuf = NULL;
++      len = -1;
++      goto beach;
++    }
++
++    /* Buffer size */
++    GST_BUFFER_SIZE (*outbuf) = have_data;
++
++    /*
++     * Timestamps:
++     *
++     *  1) Copy input timestamp if valid
++     *  2) else interpolate from previous input timestamp
++     */
++    /* always take timestamps from the input buffer if any */
++    if (GST_CLOCK_TIME_IS_VALID (dec_info->timestamp)) {
++      out_timestamp = dec_info->timestamp;
++    } else {
++      out_timestamp = ffmpegdec->next_out;
++    }
++
++    /*
++     * Duration:
++     *
++     *  1) calculate based on number of samples
++     */
++    out_duration = gst_util_uint64_scale (have_data, GST_SECOND,
++        ffmpegdec->format.audio.depth * ffmpegdec->format.audio.channels *
++        ffmpegdec->format.audio.samplerate);
++
++    /* offset:
++     *
++     * Just copy
++     */
++    out_offset = dec_info->offset;
++
++    GST_DEBUG_OBJECT (ffmpegdec,
++        "Buffer created. Size:%d , timestamp:%" GST_TIME_FORMAT " , duration:%"
++        GST_TIME_FORMAT, have_data,
++        GST_TIME_ARGS (out_timestamp), GST_TIME_ARGS (out_duration));
++
++    GST_BUFFER_TIMESTAMP (*outbuf) = out_timestamp;
++    GST_BUFFER_DURATION (*outbuf) = out_duration;
++    GST_BUFFER_OFFSET (*outbuf) = out_offset;
++    gst_buffer_set_caps (*outbuf, GST_PAD_CAPS (ffmpegdec->srcpad));
++
++    /* the next timestamp we'll use when interpolating */
++    if (GST_CLOCK_TIME_IS_VALID (out_timestamp))
++      ffmpegdec->next_out = out_timestamp + out_duration;
++
++    /* now see if we need to clip the buffer against the segment boundaries. */
++    if (G_UNLIKELY (!clip_audio_buffer (ffmpegdec, *outbuf, out_timestamp,
++                out_duration)))
++      goto clipped;
++
++  } else {
++    gst_buffer_unref (*outbuf);
++    *outbuf = NULL;
++  }
++
++  /* If we don't error out after the first failed read with the AAC decoder,
++   * we must *not* carry on pushing data, else we'll cause segfaults... */
++  if (len == -1 && (in_plugin->id == CODEC_ID_AAC
++          || in_plugin->id == CODEC_ID_AAC_LATM)) {
++    GST_ELEMENT_ERROR (ffmpegdec, STREAM, DECODE, (NULL),
++        ("Decoding of AAC stream by FFMPEG failed."));
++    *ret = GST_FLOW_ERROR;
++  }
++
++beach:
++  GST_DEBUG_OBJECT (ffmpegdec, "return flow %d, out %p, len %d",
++      *ret, *outbuf, len);
++  return len;
++
++  /* ERRORS */
++clipped:
++  {
++    GST_DEBUG_OBJECT (ffmpegdec, "buffer clipped");
++    gst_buffer_unref (*outbuf);
++    *outbuf = NULL;
++    goto beach;
++  }
++}
++
++/* gst_ffmpegdec_frame:
++ * ffmpegdec:
++ * data: pointer to the data to decode
++ * size: size of data in bytes
++ * got_data: 0 if no data was decoded, != 0 otherwise.
++ * in_time: timestamp of data
++ * in_duration: duration of data
++ * ret: GstFlowReturn to return in the chain function
++ *
++ * Decode the given frame and pushes it downstream.
++ *
++ * Returns: Number of bytes used in decoding, -1 on error/failure.
++ */
++
++static gint
++gst_ffmpegdec_frame (GstFFMpegDec * ffmpegdec,
++    guint8 * data, guint size, gint * got_data, const GstTSInfo * dec_info,
++    GstFlowReturn * ret)
++{
++  GstFFMpegDecClass *oclass;
++  GstBuffer *outbuf = NULL;
++  gint have_data = 0, len = 0;
++
++  if (G_UNLIKELY (ffmpegdec->context->codec == NULL))
++    goto no_codec;
++
++  GST_LOG_OBJECT (ffmpegdec, "data:%p, size:%d, id:%d", data, size,
++      dec_info->idx);
++
++  *ret = GST_FLOW_OK;
++  ffmpegdec->context->frame_number++;
++
++  oclass = (GstFFMpegDecClass *) (G_OBJECT_GET_CLASS (ffmpegdec));
++
++  switch (oclass->in_plugin->type) {
++    case AVMEDIA_TYPE_VIDEO:
++      len =
++          gst_ffmpegdec_video_frame (ffmpegdec, data, size, dec_info, &outbuf,
++          ret);
++      break;
++    case AVMEDIA_TYPE_AUDIO:
++      len =
++          gst_ffmpegdec_audio_frame (ffmpegdec, oclass->in_plugin, data, size,
++          dec_info, &outbuf, ret);
++
++      /* if we did not get an output buffer and we have a pending discont, don't
++       * clear the input timestamps, we will put them on the next buffer because
++       * else we might create the first buffer with a very big timestamp gap. */
++      if (outbuf == NULL && ffmpegdec->discont) {
++        GST_DEBUG_OBJECT (ffmpegdec, "no buffer but keeping timestamp");
++        ffmpegdec->clear_ts = FALSE;
++      }
++      break;
++    default:
++      GST_ERROR_OBJECT (ffmpegdec, "Asked to decode non-audio/video frame !");
++      g_assert_not_reached ();
++      break;
++  }
++
++  if (outbuf)
++    have_data = 1;
++
++  if (len < 0 || have_data < 0) {
++    GST_WARNING_OBJECT (ffmpegdec,
++        "ffdec_%s: decoding error (len: %d, have_data: %d)",
++        oclass->in_plugin->name, len, have_data);
++    *got_data = 0;
++    goto beach;
++  } else if (len == 0 && have_data == 0) {
++    *got_data = 0;
++    goto beach;
++  } else {
++    /* this is where I lost my last clue on ffmpeg... */
++    *got_data = 1;
++  }
++
++  if (outbuf) {
++    GST_LOG_OBJECT (ffmpegdec,
++        "Decoded data, now pushing buffer %p with offset %" G_GINT64_FORMAT
++        ", timestamp %" GST_TIME_FORMAT " and duration %" GST_TIME_FORMAT,
++        outbuf, GST_BUFFER_OFFSET (outbuf),
++        GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (outbuf)),
++        GST_TIME_ARGS (GST_BUFFER_DURATION (outbuf)));
++
++    /* mark pending discont */
++    if (ffmpegdec->discont) {
++      GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_DISCONT);
++      ffmpegdec->discont = FALSE;
++    }
++
++    if (ffmpegdec->segment.rate > 0.0) {
++      /* and off we go */
++      *ret = gst_pad_push (ffmpegdec->srcpad, outbuf);
++    } else {
++      /* reverse playback, queue frame till later when we get a discont. */
++      GST_DEBUG_OBJECT (ffmpegdec, "queued frame");
++      ffmpegdec->queued = g_list_prepend (ffmpegdec->queued, outbuf);
++      *ret = GST_FLOW_OK;
++    }
++  } else {
++    GST_DEBUG_OBJECT (ffmpegdec, "We didn't get a decoded buffer");
++  }
++
++beach:
++  return len;
++
++  /* ERRORS */
++no_codec:
++  {
++    GST_ERROR_OBJECT (ffmpegdec, "no codec context");
++    return -1;
++  }
++}
++
++static void
++gst_ffmpegdec_drain (GstFFMpegDec * ffmpegdec)
++{
++  GstFFMpegDecClass *oclass;
++
++  oclass = (GstFFMpegDecClass *) (G_OBJECT_GET_CLASS (ffmpegdec));
++
++  if (oclass->in_plugin->capabilities & CODEC_CAP_DELAY) {
++    gint have_data, len, try = 0;
++
++    GST_LOG_OBJECT (ffmpegdec,
++        "codec has delay capabilities, calling until ffmpeg has drained everything");
++
++    do {
++      GstFlowReturn ret;
++
++      len =
++          gst_ffmpegdec_frame (ffmpegdec, NULL, 0, &have_data, &ts_info_none,
++          &ret);
++      if (len < 0 || have_data == 0)
++        break;
++    } while (try++ < 10);
++  }
++  if (ffmpegdec->segment.rate < 0.0) {
++    /* if we have some queued frames for reverse playback, flush them now */
++    flush_queued (ffmpegdec);
++  }
++}
++
++static void
++gst_ffmpegdec_flush_pcache (GstFFMpegDec * ffmpegdec)
++{
++  if (ffmpegdec->pctx) {
++    gint size, bsize;
++    guint8 *data;
++    guint8 bdata[FF_INPUT_BUFFER_PADDING_SIZE];
++
++    bsize = FF_INPUT_BUFFER_PADDING_SIZE;
++    memset (bdata, 0, bsize);
++
++    /* parse some dummy data to work around some ffmpeg weirdness where it keeps
++     * the previous pts around */
++    av_parser_parse2 (ffmpegdec->pctx, ffmpegdec->context,
++        &data, &size, bdata, bsize, -1, -1, -1);
++    ffmpegdec->pctx->pts = -1;
++    ffmpegdec->pctx->dts = -1;
++  }
++
++  if (ffmpegdec->pcache) {
++    gst_buffer_unref (ffmpegdec->pcache);
++    ffmpegdec->pcache = NULL;
++  }
++}
++
++static gboolean
++gst_ffmpegdec_sink_event (GstPad * pad, GstEvent * event)
++{
++  GstFFMpegDec *ffmpegdec;
++  gboolean ret = FALSE;
++
++  ffmpegdec = (GstFFMpegDec *) gst_pad_get_parent (pad);
++
++  GST_DEBUG_OBJECT (ffmpegdec, "Handling %s event",
++      GST_EVENT_TYPE_NAME (event));
++
++  switch (GST_EVENT_TYPE (event)) {
++    case GST_EVENT_EOS:
++    {
++      gst_ffmpegdec_drain (ffmpegdec);
++      break;
++    }
++    case GST_EVENT_FLUSH_STOP:
++    {
++      if (ffmpegdec->opened) {
++        avcodec_flush_buffers (ffmpegdec->context);
++      }
++      gst_ffmpegdec_reset_ts (ffmpegdec);
++      gst_ffmpegdec_reset_qos (ffmpegdec);
++      gst_ffmpegdec_flush_pcache (ffmpegdec);
++      gst_segment_init (&ffmpegdec->segment, GST_FORMAT_TIME);
++      clear_queued (ffmpegdec);
++      break;
++    }
++    case GST_EVENT_NEWSEGMENT:
++    {
++      gboolean update;
++      GstFormat fmt;
++      gint64 start, stop, time;
++      gdouble rate, arate;
++
++      gst_event_parse_new_segment_full (event, &update, &rate, &arate, &fmt,
++          &start, &stop, &time);
++
++      switch (fmt) {
++        case GST_FORMAT_TIME:
++          /* fine, our native segment format */
++          break;
++        case GST_FORMAT_BYTES:
++        {
++          gint bit_rate;
++
++          bit_rate = ffmpegdec->context->bit_rate;
++
++          /* convert to time or fail */
++          if (!bit_rate)
++            goto no_bitrate;
++
++          GST_DEBUG_OBJECT (ffmpegdec, "bitrate: %d", bit_rate);
++
++          /* convert values to TIME */
++          if (start != -1)
++            start = gst_util_uint64_scale_int (start, GST_SECOND, bit_rate);
++          if (stop != -1)
++            stop = gst_util_uint64_scale_int (stop, GST_SECOND, bit_rate);
++          if (time != -1)
++            time = gst_util_uint64_scale_int (time, GST_SECOND, bit_rate);
++
++          /* unref old event */
++          gst_event_unref (event);
++
++          /* create new converted time segment */
++          fmt = GST_FORMAT_TIME;
++          /* FIXME, bitrate is not good enough too find a good stop, let's
++           * hope start and time were 0... meh. */
++          stop = -1;
++          event = gst_event_new_new_segment (update, rate, fmt,
++              start, stop, time);
++          break;
++        }
++        default:
++          /* invalid format */
++          goto invalid_format;
++      }
++
++      /* drain pending frames before trying to use the new segment, queued
++       * buffers belonged to the previous segment. */
++      if (ffmpegdec->context->codec)
++        gst_ffmpegdec_drain (ffmpegdec);
++
++      GST_DEBUG_OBJECT (ffmpegdec,
++          "NEWSEGMENT in time start %" GST_TIME_FORMAT " -- stop %"
++          GST_TIME_FORMAT, GST_TIME_ARGS (start), GST_TIME_ARGS (stop));
++
++      /* and store the values */
++      gst_segment_set_newsegment_full (&ffmpegdec->segment, update,
++          rate, arate, fmt, start, stop, time);
++      break;
++    }
++    default:
++      break;
++  }
++
++  /* and push segment downstream */
++  ret = gst_pad_push_event (ffmpegdec->srcpad, event);
++
++done:
++  gst_object_unref (ffmpegdec);
++
++  return ret;
++
++  /* ERRORS */
++no_bitrate:
++  {
++    GST_WARNING_OBJECT (ffmpegdec, "no bitrate to convert BYTES to TIME");
++    gst_event_unref (event);
++    goto done;
++  }
++invalid_format:
++  {
++    GST_WARNING_OBJECT (ffmpegdec, "unknown format received in NEWSEGMENT");
++    gst_event_unref (event);
++    goto done;
++  }
++}
++
++static GstFlowReturn
++gst_ffmpegdec_chain (GstPad * pad, GstBuffer * inbuf)
++{
++  GstFFMpegDec *ffmpegdec;
++  GstFFMpegDecClass *oclass;
++  guint8 *data, *bdata;
++  gint size, bsize, len, have_data;
++  GstFlowReturn ret = GST_FLOW_OK;
++  GstClockTime in_timestamp;
++  GstClockTime in_duration;
++  gboolean discont;
++  gint64 in_offset;
++  const GstTSInfo *in_info;
++  const GstTSInfo *dec_info;
++
++  ffmpegdec = (GstFFMpegDec *) (GST_PAD_PARENT (pad));
++
++  if (G_UNLIKELY (!ffmpegdec->opened))
++    goto not_negotiated;
++
++  discont = GST_BUFFER_IS_DISCONT (inbuf);
++
++  /* The discont flags marks a buffer that is not continuous with the previous
++   * buffer. This means we need to clear whatever data we currently have. We
++   * currently also wait for a new keyframe, which might be suboptimal in the
++   * case of a network error, better show the errors than to drop all data.. */
++  if (G_UNLIKELY (discont)) {
++    GST_DEBUG_OBJECT (ffmpegdec, "received DISCONT");
++    /* drain what we have queued */
++    gst_ffmpegdec_drain (ffmpegdec);
++    gst_ffmpegdec_flush_pcache (ffmpegdec);
++    avcodec_flush_buffers (ffmpegdec->context);
++    ffmpegdec->discont = TRUE;
++    gst_ffmpegdec_reset_ts (ffmpegdec);
++  }
++  /* by default we clear the input timestamp after decoding each frame so that
++   * interpollation can work. */
++  ffmpegdec->clear_ts = TRUE;
++
++  oclass = (GstFFMpegDecClass *) (G_OBJECT_GET_CLASS (ffmpegdec));
++
++  /* parse cache joining. If there is cached data */
++  if (ffmpegdec->pcache) {
++    /* join with previous data */
++    GST_LOG_OBJECT (ffmpegdec, "join parse cache");
++    inbuf = gst_buffer_join (ffmpegdec->pcache, inbuf);
++    /* no more cached data, we assume we can consume the complete cache */
++    ffmpegdec->pcache = NULL;
++  }
++
++  in_timestamp = GST_BUFFER_TIMESTAMP (inbuf);
++  in_duration = GST_BUFFER_DURATION (inbuf);
++  in_offset = GST_BUFFER_OFFSET (inbuf);
++
++  /* get handle to timestamp info, we can pass this around to ffmpeg */
++  in_info = gst_ts_info_store (ffmpegdec, in_timestamp, in_duration, in_offset);
++
++  if (in_timestamp != -1) {
++    /* check for increasing timestamps if they are jumping backwards, we
++     * probably are dealing with PTS as timestamps */
++    if (!ffmpegdec->reordered_in && ffmpegdec->last_in != -1) {
++      if (in_timestamp < ffmpegdec->last_in) {
++        GST_LOG_OBJECT (ffmpegdec, "detected reordered input timestamps");
++        ffmpegdec->reordered_in = TRUE;
++        ffmpegdec->last_diff = GST_CLOCK_TIME_NONE;
++      } else if (in_timestamp > ffmpegdec->last_in) {
++        GstClockTime diff;
++        /* keep track of timestamp diff to estimate duration */
++        diff = in_timestamp - ffmpegdec->last_in;
++        /* need to scale with amount of frames in the interval */
++        if (ffmpegdec->last_frames)
++          diff /= ffmpegdec->last_frames;
++
++        GST_LOG_OBJECT (ffmpegdec, "estimated duration %" GST_TIME_FORMAT " %u",
++            GST_TIME_ARGS (diff), ffmpegdec->last_frames);
++
++        ffmpegdec->last_diff = diff;
++      }
++    }
++    ffmpegdec->last_in = in_timestamp;
++    ffmpegdec->last_frames = 0;
++  }
++
++  GST_LOG_OBJECT (ffmpegdec,
++      "Received new data of size %u, offset:%" G_GUINT64_FORMAT ", ts:%"
++      GST_TIME_FORMAT ", dur:%" GST_TIME_FORMAT ", info %d",
++      GST_BUFFER_SIZE (inbuf), GST_BUFFER_OFFSET (inbuf),
++      GST_TIME_ARGS (in_timestamp), GST_TIME_ARGS (in_duration), in_info->idx);
++
++  /* workarounds, functions write to buffers:
++   *  libavcodec/svq1.c:svq1_decode_frame writes to the given buffer.
++   *  libavcodec/svq3.c:svq3_decode_slice_header too.
++   * ffmpeg devs know about it and will fix it (they said). */
++  if (oclass->in_plugin->id == CODEC_ID_SVQ1 ||
++      oclass->in_plugin->id == CODEC_ID_SVQ3) {
++    inbuf = gst_buffer_make_writable (inbuf);
++  }
++
++  bdata = GST_BUFFER_DATA (inbuf);
++  bsize = GST_BUFFER_SIZE (inbuf);
++
++  if (ffmpegdec->do_padding) {
++    /* add padding */
++    if (ffmpegdec->padded_size < bsize + FF_INPUT_BUFFER_PADDING_SIZE) {
++      ffmpegdec->padded_size = bsize + FF_INPUT_BUFFER_PADDING_SIZE;
++      ffmpegdec->padded = g_realloc (ffmpegdec->padded, ffmpegdec->padded_size);
++      GST_LOG_OBJECT (ffmpegdec, "resized padding buffer to %d",
++          ffmpegdec->padded_size);
++    }
++    memcpy (ffmpegdec->padded, bdata, bsize);
++    memset (ffmpegdec->padded + bsize, 0, FF_INPUT_BUFFER_PADDING_SIZE);
++
++    bdata = ffmpegdec->padded;
++  }
++
++  do {
++    guint8 tmp_padding[FF_INPUT_BUFFER_PADDING_SIZE];
++
++    /* parse, if at all possible */
++    if (ffmpegdec->pctx) {
++      gint res;
++
++      GST_LOG_OBJECT (ffmpegdec,
++          "Calling av_parser_parse2 with offset %" G_GINT64_FORMAT ", ts:%"
++          GST_TIME_FORMAT " size %d", in_offset, GST_TIME_ARGS (in_timestamp),
++          bsize);
++
++      /* feed the parser. We pass the timestamp info so that we can recover all
++       * info again later */
++      res = av_parser_parse2 (ffmpegdec->pctx, ffmpegdec->context,
++          &data, &size, bdata, bsize, in_info->idx, in_info->idx, in_offset);
++
++      GST_LOG_OBJECT (ffmpegdec,
++          "parser returned res %d and size %d, id %" G_GINT64_FORMAT, res, size,
++          ffmpegdec->pctx->pts);
++
++      /* store pts for decoding */
++      if (ffmpegdec->pctx->pts != AV_NOPTS_VALUE && ffmpegdec->pctx->pts != -1)
++        dec_info = gst_ts_info_get (ffmpegdec, ffmpegdec->pctx->pts);
++      else {
++        /* ffmpeg sometimes loses track after a flush, help it by feeding a
++         * valid start time */
++        ffmpegdec->pctx->pts = in_info->idx;
++        ffmpegdec->pctx->dts = in_info->idx;
++        dec_info = in_info;
++      }
++
++      GST_LOG_OBJECT (ffmpegdec, "consuming %d bytes. id %d", size,
++          dec_info->idx);
++
++      if (res) {
++        /* there is output, set pointers for next round. */
++        bsize -= res;
++        bdata += res;
++      } else {
++        /* Parser did not consume any data, make sure we don't clear the
++         * timestamp for the next round */
++        ffmpegdec->clear_ts = FALSE;
++      }
++
++      /* if there is no output, we must break and wait for more data. also the
++       * timestamp in the context is not updated. */
++      if (size == 0) {
++        if (bsize > 0)
++          continue;
++        else
++          break;
++      }
++    } else {
++      data = bdata;
++      size = bsize;
++
++      dec_info = in_info;
++    }
++
++    if (ffmpegdec->do_padding) {
++      /* add temporary padding */
++      memcpy (tmp_padding, data + size, FF_INPUT_BUFFER_PADDING_SIZE);
++      memset (data + size, 0, FF_INPUT_BUFFER_PADDING_SIZE);
++    }
++
++    /* decode a frame of audio/video now */
++    len =
++        gst_ffmpegdec_frame (ffmpegdec, data, size, &have_data, dec_info, &ret);
++
++    if (ffmpegdec->do_padding) {
++      memcpy (data + size, tmp_padding, FF_INPUT_BUFFER_PADDING_SIZE);
++    }
++
++    if (ret != GST_FLOW_OK) {
++      GST_LOG_OBJECT (ffmpegdec, "breaking because of flow ret %s",
++          gst_flow_get_name (ret));
++      /* bad flow retun, make sure we discard all data and exit */
++      bsize = 0;
++      break;
++    }
++    if (!ffmpegdec->pctx) {
++      if (len == 0 && !have_data) {
++        /* nothing was decoded, this could be because no data was available or
++         * because we were skipping frames.
++         * If we have no context we must exit and wait for more data, we keep the
++         * data we tried. */
++        GST_LOG_OBJECT (ffmpegdec, "Decoding didn't return any data, breaking");
++        break;
++      } else if (len < 0) {
++        /* a decoding error happened, we must break and try again with next data. */
++        GST_LOG_OBJECT (ffmpegdec, "Decoding error, breaking");
++        bsize = 0;
++        break;
++      }
++      /* prepare for the next round, for codecs with a context we did this
++       * already when using the parser. */
++      bsize -= len;
++      bdata += len;
++    } else {
++      if (len == 0) {
++        /* nothing was decoded, this could be because no data was available or
++         * because we were skipping frames. Since we have a parser we can
++         * continue with the next frame */
++        GST_LOG_OBJECT (ffmpegdec,
++            "Decoding didn't return any data, trying next");
++      } else if (len < 0) {
++        /* we have a context that will bring us to the next frame */
++        GST_LOG_OBJECT (ffmpegdec, "Decoding error, trying next");
++      }
++    }
++
++    /* make sure we don't use the same old timestamp for the next frame and let
++     * the interpollation take care of it. */
++    if (ffmpegdec->clear_ts) {
++      in_timestamp = GST_CLOCK_TIME_NONE;
++      in_duration = GST_CLOCK_TIME_NONE;
++      in_offset = GST_BUFFER_OFFSET_NONE;
++      in_info = GST_TS_INFO_NONE;
++    } else {
++      ffmpegdec->clear_ts = TRUE;
++    }
++    ffmpegdec->last_frames++;
++
++    GST_LOG_OBJECT (ffmpegdec, "Before (while bsize>0).  bsize:%d , bdata:%p",
++        bsize, bdata);
++  } while (bsize > 0);
++
++  /* keep left-over */
++  if (ffmpegdec->pctx && bsize > 0) {
++    in_timestamp = GST_BUFFER_TIMESTAMP (inbuf);
++    in_offset = GST_BUFFER_OFFSET (inbuf);
++
++    GST_LOG_OBJECT (ffmpegdec,
++        "Keeping %d bytes of data with offset %" G_GINT64_FORMAT ", timestamp %"
++        GST_TIME_FORMAT, bsize, in_offset, GST_TIME_ARGS (in_timestamp));
++
++    ffmpegdec->pcache = gst_buffer_create_sub (inbuf,
++        GST_BUFFER_SIZE (inbuf) - bsize, bsize);
++    /* we keep timestamp, even though all we really know is that the correct
++     * timestamp is not below the one from inbuf */
++    GST_BUFFER_TIMESTAMP (ffmpegdec->pcache) = in_timestamp;
++    GST_BUFFER_OFFSET (ffmpegdec->pcache) = in_offset;
++  } else if (bsize > 0) {
++    GST_DEBUG_OBJECT (ffmpegdec, "Dropping %d bytes of data", bsize);
++  }
++  gst_buffer_unref (inbuf);
++
++  return ret;
++
++  /* ERRORS */
++not_negotiated:
++  {
++    oclass = (GstFFMpegDecClass *) (G_OBJECT_GET_CLASS (ffmpegdec));
++    GST_ELEMENT_ERROR (ffmpegdec, CORE, NEGOTIATION, (NULL),
++        ("ffdec_%s: input format was not set before data start",
++            oclass->in_plugin->name));
++    gst_buffer_unref (inbuf);
++    return GST_FLOW_NOT_NEGOTIATED;
++  }
++}
++
++static GstStateChangeReturn
++gst_ffmpegdec_change_state (GstElement * element, GstStateChange transition)
++{
++  GstFFMpegDec *ffmpegdec = (GstFFMpegDec *) element;
++  GstStateChangeReturn ret;
++
++  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
++
++  switch (transition) {
++    case GST_STATE_CHANGE_PAUSED_TO_READY:
++      GST_OBJECT_LOCK (ffmpegdec);
++      gst_ffmpegdec_close (ffmpegdec);
++      GST_OBJECT_UNLOCK (ffmpegdec);
++      clear_queued (ffmpegdec);
++      g_free (ffmpegdec->padded);
++      ffmpegdec->padded = NULL;
++      ffmpegdec->padded_size = 0;
++      ffmpegdec->can_allocate_aligned = TRUE;
++      break;
++    default:
++      break;
++  }
++
++  return ret;
++}
++
++static void
++gst_ffmpegdec_set_property (GObject * object,
++    guint prop_id, const GValue * value, GParamSpec * pspec)
++{
++  GstFFMpegDec *ffmpegdec = (GstFFMpegDec *) object;
++
++  switch (prop_id) {
++    case PROP_LOWRES:
++      ffmpegdec->lowres = ffmpegdec->context->lowres = g_value_get_enum (value);
++      break;
++    case PROP_SKIPFRAME:
++      ffmpegdec->skip_frame = ffmpegdec->context->skip_frame =
++          g_value_get_enum (value);
++      break;
++    case PROP_DIRECT_RENDERING:
++      ffmpegdec->direct_rendering = g_value_get_boolean (value);
++      break;
++    case PROP_DO_PADDING:
++      ffmpegdec->do_padding = g_value_get_boolean (value);
++      break;
++    case PROP_DEBUG_MV:
++      ffmpegdec->debug_mv = ffmpegdec->context->debug_mv =
++          g_value_get_boolean (value);
++      break;
++    case PROP_CROP:
++      ffmpegdec->crop = g_value_get_boolean (value);
++      break;
++    case PROP_MAX_THREADS:
++      ffmpegdec->max_threads = g_value_get_int (value);
++      break;
++    default:
++      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
++      break;
++  }
++}
++
++static void
++gst_ffmpegdec_get_property (GObject * object,
++    guint prop_id, GValue * value, GParamSpec * pspec)
++{
++  GstFFMpegDec *ffmpegdec = (GstFFMpegDec *) object;
++
++  switch (prop_id) {
++    case PROP_LOWRES:
++      g_value_set_enum (value, ffmpegdec->context->lowres);
++      break;
++    case PROP_SKIPFRAME:
++      g_value_set_enum (value, ffmpegdec->context->skip_frame);
++      break;
++    case PROP_DIRECT_RENDERING:
++      g_value_set_boolean (value, ffmpegdec->direct_rendering);
++      break;
++    case PROP_DO_PADDING:
++      g_value_set_boolean (value, ffmpegdec->do_padding);
++      break;
++    case PROP_DEBUG_MV:
++      g_value_set_boolean (value, ffmpegdec->context->debug_mv);
++      break;
++    case PROP_CROP:
++      g_value_set_boolean (value, ffmpegdec->crop);
++      break;
++    case PROP_MAX_THREADS:
++      g_value_set_int (value, ffmpegdec->max_threads);
++      break;
++    default:
++      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
++      break;
++  }
++}
++
++gboolean
++gst_ffmpegdec_register (GstPlugin * plugin)
++{
++  GTypeInfo typeinfo = {
++    sizeof (GstFFMpegDecClass),
++    (GBaseInitFunc) gst_ffmpegdec_base_init,
++    NULL,
++    (GClassInitFunc) gst_ffmpegdec_class_init,
++    NULL,
++    NULL,
++    sizeof (GstFFMpegDec),
++    0,
++    (GInstanceInitFunc) gst_ffmpegdec_init,
++  };
++  GType type;
++  AVCodec *in_plugin;
++  gint rank;
++
++  in_plugin = av_codec_next (NULL);
++
++  GST_LOG ("Registering decoders");
++
++  while (in_plugin) {
++    gchar *type_name;
++    gchar *plugin_name;
++
++    /* only decoders */
++    if (!in_plugin->decode) {
++      goto next;
++    }
++
++    /* no quasi-codecs, please */
++    if (in_plugin->id == CODEC_ID_RAWVIDEO ||
++        in_plugin->id == CODEC_ID_V210 ||
++        in_plugin->id == CODEC_ID_V210X ||
++        in_plugin->id == CODEC_ID_R210 ||
++        (in_plugin->id >= CODEC_ID_PCM_S16LE &&
++            in_plugin->id <= CODEC_ID_PCM_BLURAY)) {
++      goto next;
++    }
++
++    /* No decoders depending on external libraries (we don't build them, but
++     * people who build against an external ffmpeg might have them.
++     * We have native gstreamer plugins for all of those libraries anyway. */
++    if (!strncmp (in_plugin->name, "lib", 3)) {
++      GST_DEBUG
++          ("Not using external library decoder %s. Use the gstreamer-native ones instead.",
++          in_plugin->name);
++      goto next;
++    }
++
++    /* No vdpau plugins until we can figure out how to properly use them
++     * outside of ffmpeg. */
++    if (g_str_has_suffix (in_plugin->name, "_vdpau")) {
++      GST_DEBUG
++          ("Ignoring VDPAU decoder %s. We can't handle this outside of ffmpeg",
++          in_plugin->name);
++      goto next;
++    }
++
++    if (g_str_has_suffix (in_plugin->name, "_xvmc")) {
++      GST_DEBUG
++          ("Ignoring XVMC decoder %s. We can't handle this outside of ffmpeg",
++          in_plugin->name);
++      goto next;
++    }
++
++    GST_DEBUG ("Trying plugin %s [%s]", in_plugin->name, in_plugin->long_name);
++
++    /* no codecs for which we're GUARANTEED to have better alternatives */
++    /* MPEG1VIDEO : the mpeg2video decoder is preferred */
++    /* MP1 : Use MP3 for decoding */
++    /* MP2 : Use MP3 for decoding */
++    /* Theora: Use libtheora based theoradec */
++    if (!strcmp (in_plugin->name, "gif") ||
++        !strcmp (in_plugin->name, "vorbis") ||
++        !strcmp (in_plugin->name, "theora") ||
++        !strcmp (in_plugin->name, "mpeg1video") ||
++        !strcmp (in_plugin->name, "wavpack") ||
++        !strcmp (in_plugin->name, "mp1") ||
++        !strcmp (in_plugin->name, "mp2") ||
++        !strcmp (in_plugin->name, "libfaad") ||
++        !strcmp (in_plugin->name, "mpeg4aac") ||
++        !strcmp (in_plugin->name, "ass") ||
++        !strcmp (in_plugin->name, "srt") ||
++        !strcmp (in_plugin->name, "pgssub") ||
++        !strcmp (in_plugin->name, "dvdsub") ||
++        !strcmp (in_plugin->name, "dvbsub")) {
++      GST_LOG ("Ignoring decoder %s", in_plugin->name);
++      goto next;
++    }
++
++    /* construct the type */
++    plugin_name = g_strdup ((gchar *) in_plugin->name);
++    g_strdelimit (plugin_name, NULL, '_');
++    type_name = g_strdup_printf ("ffdec_%s", plugin_name);
++    g_free (plugin_name);
++
++    type = g_type_from_name (type_name);
++
++    if (!type) {
++      /* create the gtype now */
++      type = g_type_register_static (GST_TYPE_ELEMENT, type_name, &typeinfo, 0);
++      g_type_set_qdata (type, GST_FFDEC_PARAMS_QDATA, (gpointer) in_plugin);
++    }
++
++    /* (Ronald) MPEG-4 gets a higher priority because it has been well-
++     * tested and by far outperforms divxdec/xviddec - so we prefer it.
++     * msmpeg4v3 same, as it outperforms divxdec for divx3 playback.
++     * VC1/WMV3 are not working and thus unpreferred for now. */
++    switch (in_plugin->id) {
++      case CODEC_ID_MPEG4:
++      case CODEC_ID_MSMPEG4V3:
++      case CODEC_ID_H264:
++      case CODEC_ID_RA_144:
++      case CODEC_ID_RA_288:
++      case CODEC_ID_RV10:
++      case CODEC_ID_RV20:
++      case CODEC_ID_RV30:
++      case CODEC_ID_RV40:
++      case CODEC_ID_COOK:
++        rank = GST_RANK_SECONDARY;
++        break;
++        /* DVVIDEO: we have a good dv decoder, fast on both ppc as well as x86.
++         * They say libdv's quality is better though. leave as secondary.
++         * note: if you change this, see the code in gstdv.c in good/ext/dv.
++         *
++         * SIPR: decoder should have a higher rank than realaudiodec.
++         */
++      case CODEC_ID_DVVIDEO:
++      case CODEC_ID_SIPR:
++        rank = GST_RANK_SECONDARY;
++        break;
++      case CODEC_ID_MP3:
++        rank = GST_RANK_NONE;
++        break;
++        /* TEMPORARILY DISABLING AC3/EAC3/DTS for 0.10.12 release
++         * due to downmixing failure.
++         * See Bug #608892 for more details */
++      case CODEC_ID_EAC3:
++      case CODEC_ID_AC3:
++      case CODEC_ID_DTS:
++        rank = GST_RANK_NONE;
++        break;
++      default:
++        rank = GST_RANK_MARGINAL;
++        break;
++    }
++    if (!gst_element_register (plugin, type_name, rank, type)) {
++      g_warning ("Failed to register %s", type_name);
++      g_free (type_name);
++      return FALSE;
++    }
++
++    g_free (type_name);
++
++  next:
++    in_plugin = av_codec_next (in_plugin);
++  }
++
++  GST_LOG ("Finished Registering decoders");
++
++  return TRUE;
++}
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegdec.c.rej gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegdec.c.rej
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegdec.c.rej	1970-01-01 01:00:00.000000000 +0100
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegdec.c.rej	2014-08-08 15:26:38.471858652 +0200
+@@ -0,0 +1,11 @@
++--- ext/ffmpeg/gstffmpegdec.c
+++++ ext/ffmpeg/gstffmpegdec.c
++@@ -1565,7 +1564,7 @@
++         gst_message_new_latency (GST_OBJECT_CAST (ffmpegdec)));
++   }
++ 
++-  is_itype = (ffmpegdec->picture->pict_type == FF_I_TYPE);
+++  is_itype = (ffmpegdec->picture->pict_type == AV_PICTURE_TYPE_I);
++   is_reference = (ffmpegdec->picture->reference == 1);
++ 
++   iskeyframe = (is_itype || is_reference || ffmpegdec->picture->key_frame)
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegdemux.c gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegdemux.c
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegdemux.c	2011-07-13 11:07:28.000000000 +0200
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegdemux.c	2014-08-08 15:26:07.874857555 +0200
+@@ -343,8 +343,11 @@
+   demux->audiopads = 0;
+ 
+   /* close demuxer context from ffmpeg */
+-  av_close_input_file (demux->context);
+-  demux->context = NULL;
++  if (demux->seekable)
++    gst_ffmpegdata_close (demux->context->pb);
++  else
++    gst_ffmpeg_pipe_close (demux->context->pb);
++  avformat_close_input (&demux->context);
+ 
+   GST_OBJECT_LOCK (demux);
+   demux->opened = FALSE;
+@@ -1146,9 +1149,9 @@
+ static gboolean
+ gst_ffmpegdemux_open (GstFFMpegDemux * demux)
+ {
++  AVIOContext *iocontext = NULL;
+   GstFFMpegDemuxClass *oclass =
+       (GstFFMpegDemuxClass *) G_OBJECT_GET_CLASS (demux);
+-  gchar *location;
+   gint res, n_streams, i;
+ #if 0
+   /* Re-enable once converted to new AVMetaData API
+@@ -1164,15 +1167,14 @@
+ 
+   /* open via our input protocol hack */
+   if (demux->seekable)
+-    location = g_strdup_printf ("gstreamer://%p", demux->sinkpad);
++    res = gst_ffmpegdata_open (demux->sinkpad, AVIO_FLAG_READ, &iocontext);
+   else
+-    location = g_strdup_printf ("gstpipe://%p", &demux->ffpipe);
+-  GST_DEBUG_OBJECT (demux, "about to call av_open_input_file %s", location);
++    res = gst_ffmpeg_pipe_open (&demux->ffpipe, AVIO_FLAG_READ, &iocontext);
+ 
+-  res = av_open_input_file (&demux->context, location,
+-      oclass->in_plugin, 0, NULL);
++  demux->context = avformat_alloc_context ();
++  demux->context->pb = iocontext;
++  res = avformat_open_input (&demux->context, NULL, oclass->in_plugin, NULL);
+ 
+-  g_free (location);
+   GST_DEBUG_OBJECT (demux, "av_open_input returned %d", res);
+   if (res < 0)
+     goto open_failed;
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegenc.c gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegenc.c
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegenc.c	2011-10-31 11:14:03.000000000 +0100
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegenc.c	2014-08-08 15:32:18.608870847 +0200
+@@ -770,7 +770,7 @@
+   GST_OBJECT_UNLOCK (ffmpegenc);
+ 
+   if (force_keyframe)
+-    ffmpegenc->picture->pict_type = FF_I_TYPE;
++    ffmpegenc->picture->pict_type = AV_PICTURE_TYPE_I;
+ 
+   frame_size = gst_ffmpeg_avpicture_fill ((AVPicture *) ffmpegenc->picture,
+       GST_BUFFER_DATA (inbuf),
+@@ -1136,7 +1136,7 @@
+       const GstStructure *s;
+       s = gst_event_get_structure (event);
+       if (gst_structure_has_name (s, "GstForceKeyUnit")) {
+-        ffmpegenc->picture->pict_type = FF_I_TYPE;
++        ffmpegenc->picture->pict_type = AV_PICTURE_TYPE_I;
+       }
+       break;
+     }
+@@ -1339,7 +1339,7 @@
+     }
+ 
+     /* only encoders */
+-    if (!in_plugin->encode) {
++    if (!av_codec_is_encoder (in_plugin)) {
+       goto next;
+     }
+ 
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegmux.c gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegmux.c
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegmux.c	2011-07-13 11:07:28.000000000 +0200
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegmux.c	2014-08-08 15:26:07.874857555 +0200
+@@ -24,8 +24,10 @@
+ #include <string.h>
+ #ifdef HAVE_FFMPEG_UNINSTALLED
+ #include <avformat.h>
++#include <opt.h>
+ #else
+ #include <libavformat/avformat.h>
++#include <libavutil/opt.h>
+ #endif
+ 
+ #include <gst/gst.h>
+@@ -336,9 +338,6 @@
+   ffmpegmux->context = g_new0 (AVFormatContext, 1);
+   ffmpegmux->context->oformat = oclass->in_plugin;
+   ffmpegmux->context->nb_streams = 0;
+-  g_snprintf (ffmpegmux->context->filename,
+-      sizeof (ffmpegmux->context->filename),
+-      "gstreamer://%p", ffmpegmux->srcpad);
+   ffmpegmux->opened = FALSE;
+ 
+   ffmpegmux->videopads = 0;
+@@ -450,10 +449,10 @@
+   gst_element_add_pad (element, pad);
+ 
+   /* AVStream needs to be created */
+-  st = av_new_stream (ffmpegmux->context, collect_pad->padnum);
++  st = avformat_new_stream (ffmpegmux->context, NULL);
++  st->id = collect_pad->padnum;
+   st->codec->codec_type = type;
+   st->codec->codec_id = CODEC_ID_NONE;  /* this is a check afterwards */
+-  st->stream_copy = 1;          /* we're not the actual encoder */
+   st->codec->bit_rate = bitrate;
+   st->codec->frame_size = framesize;
+   /* we fill in codec during capsnego */
+@@ -485,7 +484,7 @@
+   collect_pad = (GstFFMpegMuxPad *) gst_pad_get_element_private (pad);
+ 
+   st = ffmpegmux->context->streams[collect_pad->padnum];
+-  ffmpegmux->context->preload = ffmpegmux->preload;
++  av_opt_set_int (&ffmpegmux->context, "preload", ffmpegmux->preload, 0);
+   ffmpegmux->context->max_delay = ffmpegmux->max_delay;
+ 
+   /* for the format-specific guesses, we'll go to
+@@ -552,7 +551,7 @@
+ 
+   /* open "file" (gstreamer protocol to next element) */
+   if (!ffmpegmux->opened) {
+-    int open_flags = URL_WRONLY;
++    int open_flags = AVIO_FLAG_WRITE;
+ 
+     /* we do need all streams to have started capsnego,
+      * or things will go horribly wrong */
+@@ -646,19 +645,13 @@
+       open_flags |= GST_FFMPEG_URL_STREAMHEADER;
+     }
+ 
+-    if (url_fopen (&ffmpegmux->context->pb,
+-            ffmpegmux->context->filename, open_flags) < 0) {
++    if (gst_ffmpegdata_open (ffmpegmux->srcpad, open_flags,
++            &ffmpegmux->context->pb) < 0) {
+       GST_ELEMENT_ERROR (ffmpegmux, LIBRARY, TOO_LAZY, (NULL),
+           ("Failed to open stream context in ffmux"));
+       return GST_FLOW_ERROR;
+     }
+ 
+-    if (av_set_parameters (ffmpegmux->context, NULL) < 0) {
+-      GST_ELEMENT_ERROR (ffmpegmux, LIBRARY, INIT, (NULL),
+-          ("Failed to initialize muxer"));
+-      return GST_FLOW_ERROR;
+-    }
+-
+     /* now open the mux format */
+     if (av_write_header (ffmpegmux->context) < 0) {
+       GST_ELEMENT_ERROR (ffmpegmux, LIBRARY, SETTINGS, (NULL),
+@@ -670,7 +663,7 @@
+     ffmpegmux->opened = TRUE;
+ 
+     /* flush the header so it will be used as streamheader */
+-    put_flush_packet (ffmpegmux->context->pb);
++    avio_flush (ffmpegmux->context->pb);
+   }
+ 
+   /* take the one with earliest timestamp,
+@@ -770,8 +763,8 @@
+     /* close down */
+     av_write_trailer (ffmpegmux->context);
+     ffmpegmux->opened = FALSE;
+-    put_flush_packet (ffmpegmux->context->pb);
+-    url_fclose (ffmpegmux->context->pb);
++    avio_flush (ffmpegmux->context->pb);
++    gst_ffmpegdata_close (ffmpegmux->context->pb);
+     gst_pad_push_event (ffmpegmux->srcpad, gst_event_new_eos ());
+     return GST_FLOW_UNEXPECTED;
+   }
+@@ -795,6 +788,10 @@
+       break;
+     case GST_STATE_CHANGE_PAUSED_TO_READY:
+       gst_collect_pads_stop (ffmpegmux->collect);
++      if (ffmpegmux->opened) {
++        ffmpegmux->opened = FALSE;
++        gst_ffmpegdata_close (ffmpegmux->context->pb);
++      }
+       break;
+     default:
+       break;
+@@ -809,7 +806,7 @@
+       gst_tag_setter_reset_tags (GST_TAG_SETTER (ffmpegmux));
+       if (ffmpegmux->opened) {
+         ffmpegmux->opened = FALSE;
+-        url_fclose (ffmpegmux->context->pb);
++        avio_close (ffmpegmux->context->pb);
+       }
+       break;
+     case GST_STATE_CHANGE_READY_TO_NULL:
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegmux.c.orig gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegmux.c.orig
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegmux.c.orig	1970-01-01 01:00:00.000000000 +0100
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegmux.c.orig	2011-07-13 11:07:28.000000000 +0200
+@@ -0,0 +1,970 @@
++/* GStreamer
++ * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library 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
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library General Public
++ * License along with this library; if not, write to the
++ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ * Boston, MA 02111-1307, USA.
++ */
++
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++
++#include <string.h>
++#ifdef HAVE_FFMPEG_UNINSTALLED
++#include <avformat.h>
++#else
++#include <libavformat/avformat.h>
++#endif
++
++#include <gst/gst.h>
++#include <gst/base/gstcollectpads.h>
++
++#include "gstffmpeg.h"
++#include "gstffmpegcodecmap.h"
++#include "gstffmpegutils.h"
++
++typedef struct _GstFFMpegMux GstFFMpegMux;
++typedef struct _GstFFMpegMuxPad GstFFMpegMuxPad;
++
++struct _GstFFMpegMuxPad
++{
++  GstCollectData collect;       /* we extend the CollectData */
++
++  gint padnum;
++};
++
++struct _GstFFMpegMux
++{
++  GstElement element;
++
++  GstCollectPads *collect;
++  /* We need to keep track of our pads, so we do so here. */
++  GstPad *srcpad;
++
++  AVFormatContext *context;
++  gboolean opened;
++
++  gint videopads, audiopads;
++
++  /*< private > */
++  /* event_function is the collectpads default eventfunction */
++  GstPadEventFunction event_function;
++  int preload;
++  int max_delay;
++};
++
++typedef struct _GstFFMpegMuxClass GstFFMpegMuxClass;
++
++struct _GstFFMpegMuxClass
++{
++  GstElementClass parent_class;
++
++  AVOutputFormat *in_plugin;
++};
++
++#define GST_TYPE_FFMPEGMUX \
++  (gst_ffmpegdec_get_type())
++#define GST_FFMPEGMUX(obj) \
++  (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_FFMPEGMUX,GstFFMpegMux))
++#define GST_FFMPEGMUX_CLASS(klass) \
++  (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_FFMPEGMUX,GstFFMpegMuxClass))
++#define GST_IS_FFMPEGMUX(obj) \
++  (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_FFMPEGMUX))
++#define GST_IS_FFMPEGMUX_CLASS(klass) \
++  (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_FFMPEGMUX))
++
++enum
++{
++  /* FILL ME */
++  LAST_SIGNAL
++};
++
++enum
++{
++  ARG_0,
++  /* FILL ME */
++};
++
++enum
++{
++  PROP_0,
++  PROP_PRELOAD,
++  PROP_MAXDELAY
++};
++
++/* A number of function prototypes are given so we can refer to them later. */
++static void gst_ffmpegmux_class_init (GstFFMpegMuxClass * klass);
++static void gst_ffmpegmux_base_init (gpointer g_class);
++static void gst_ffmpegmux_init (GstFFMpegMux * ffmpegmux,
++    GstFFMpegMuxClass * g_class);
++static void gst_ffmpegmux_finalize (GObject * object);
++
++static gboolean gst_ffmpegmux_setcaps (GstPad * pad, GstCaps * caps);
++static GstPad *gst_ffmpegmux_request_new_pad (GstElement * element,
++    GstPadTemplate * templ, const gchar * name);
++static GstFlowReturn gst_ffmpegmux_collected (GstCollectPads * pads,
++    gpointer user_data);
++
++static gboolean gst_ffmpegmux_sink_event (GstPad * pad, GstEvent * event);
++
++static GstStateChangeReturn gst_ffmpegmux_change_state (GstElement * element,
++    GstStateChange transition);
++
++static void gst_ffmpegmux_set_property (GObject * object, guint prop_id,
++    const GValue * value, GParamSpec * pspec);
++static void gst_ffmpegmux_get_property (GObject * object, guint prop_id,
++    GValue * value, GParamSpec * pspec);
++
++static GstCaps *gst_ffmpegmux_get_id_caps (enum CodecID *id_list);
++static void gst_ffmpeg_mux_simple_caps_set_int_list (GstCaps * caps,
++    const gchar * field, guint num, const gint * values);
++
++#define GST_FFMUX_PARAMS_QDATA g_quark_from_static_string("ffmux-params")
++
++static GstElementClass *parent_class = NULL;
++
++/*static guint gst_ffmpegmux_signals[LAST_SIGNAL] = { 0 }; */
++
++typedef struct
++{
++  const char *name;
++  const char *replacement;
++} GstFFMpegMuxReplacement;
++
++static const char *
++gst_ffmpegmux_get_replacement (const char *name)
++{
++  static const GstFFMpegMuxReplacement blacklist[] = {
++    {"avi", "avimux"},
++    {"matroska", "matroskamux"},
++    {"mov", "qtmux"},
++    {"mpegts", "mpegtsmux"},
++    {"mp4", "mp4mux"},
++    {"mpjpeg", "multipartmux"},
++    {"ogg", "oggmux"},
++    {"wav", "wavenc"},
++    {"webm", "webmmux"},
++    {"mxf", "mxfmux"},
++    {"3gp", "gppmux"},
++    {"yuv4mpegpipe", "y4menc"},
++    {"aiff", "aiffmux"},
++    {"adts", "aacparse"},
++    {"asf", "asfmux"},
++    {"asf_stream", "asfmux"},
++    {"flv", "flvmux"},
++    {"mp3", "id3v2mux"},
++    {"mp2", "id3v2mux"}
++  };
++  int i;
++
++  for (i = 0; i < sizeof (blacklist) / sizeof (blacklist[0]); i++) {
++    if (strcmp (blacklist[i].name, name) == 0) {
++      return blacklist[i].replacement;
++    }
++  }
++
++  return NULL;
++}
++
++static gboolean
++gst_ffmpegmux_is_formatter (const char *name)
++{
++  static const char *replace[] = {
++    "mp2", "mp3", NULL
++  };
++  int i;
++
++  for (i = 0; replace[i]; i++)
++    if (strcmp (replace[i], name) == 0)
++      return TRUE;
++  return FALSE;
++}
++
++static void
++gst_ffmpegmux_base_init (gpointer g_class)
++{
++  GstFFMpegMuxClass *klass = (GstFFMpegMuxClass *) g_class;
++  GstElementClass *element_class = GST_ELEMENT_CLASS (g_class);
++  GstPadTemplate *videosinktempl, *audiosinktempl, *srctempl;
++  AVOutputFormat *in_plugin;
++  GstCaps *srccaps, *audiosinkcaps, *videosinkcaps;
++  enum CodecID *video_ids = NULL, *audio_ids = NULL;
++  gchar *longname, *description;
++  const char *replacement;
++  gboolean is_formatter;
++
++  in_plugin =
++      (AVOutputFormat *) g_type_get_qdata (G_OBJECT_CLASS_TYPE (klass),
++      GST_FFMUX_PARAMS_QDATA);
++  g_assert (in_plugin != NULL);
++
++  /* construct the element details struct */
++  replacement = gst_ffmpegmux_get_replacement (in_plugin->name);
++  is_formatter = gst_ffmpegmux_is_formatter (in_plugin->name);
++  if (replacement != NULL) {
++    longname =
++        g_strdup_printf ("FFmpeg %s %s (not recommended, use %s instead)",
++        in_plugin->long_name, is_formatter ? "formatter" : "muxer",
++        replacement);
++    description =
++        g_strdup_printf ("FFmpeg %s %s (not recommended, use %s instead)",
++        in_plugin->long_name, is_formatter ? "formatter" : "muxer",
++        replacement);
++  } else {
++    longname = g_strdup_printf ("FFmpeg %s %s", in_plugin->long_name,
++        is_formatter ? "formatter" : "muxer");
++    description = g_strdup_printf ("FFmpeg %s %s", in_plugin->long_name,
++        is_formatter ? "formatter" : "muxer");
++  }
++  gst_element_class_set_details_simple (element_class, longname,
++      is_formatter ? "Formatter/Metadata" : "Codec/Muxer", description,
++      "Wim Taymans <wim.taymans@chello.be>, "
++      "Ronald Bultje <rbultje@ronald.bitfreak.net>");
++  g_free (longname);
++  g_free (description);
++
++  /* Try to find the caps that belongs here */
++  srccaps = gst_ffmpeg_formatid_to_caps (in_plugin->name);
++  if (!srccaps) {
++    GST_DEBUG ("Couldn't get source caps for muxer '%s', skipping format",
++        in_plugin->name);
++    goto beach;
++  }
++
++  if (!gst_ffmpeg_formatid_get_codecids (in_plugin->name,
++          &video_ids, &audio_ids, in_plugin)) {
++    gst_caps_unref (srccaps);
++    GST_DEBUG
++        ("Couldn't get sink caps for muxer '%s'. Most likely because no input format mapping exists.",
++        in_plugin->name);
++    goto beach;
++  }
++
++  videosinkcaps = video_ids ? gst_ffmpegmux_get_id_caps (video_ids) : NULL;
++  audiosinkcaps = audio_ids ? gst_ffmpegmux_get_id_caps (audio_ids) : NULL;
++
++  /* fix up allowed caps for some muxers */
++  /* FIXME : This should be in gstffmpegcodecmap.c ! */
++  if (strcmp (in_plugin->name, "flv") == 0) {
++    const gint rates[] = { 44100, 22050, 11025 };
++
++    gst_ffmpeg_mux_simple_caps_set_int_list (audiosinkcaps, "rate", 3, rates);
++  } else if (strcmp (in_plugin->name, "gif") == 0) {
++    if (videosinkcaps)
++      gst_caps_unref (videosinkcaps);
++
++    videosinkcaps =
++        gst_caps_from_string ("video/x-raw-rgb, bpp=(int)24, depth=(int)24");
++  }
++
++  /* pad templates */
++  srctempl = gst_pad_template_new ("src", GST_PAD_SRC, GST_PAD_ALWAYS, srccaps);
++  gst_element_class_add_pad_template (element_class, srctempl);
++
++  if (audiosinkcaps) {
++    audiosinktempl = gst_pad_template_new ("audio_%d",
++        GST_PAD_SINK, GST_PAD_REQUEST, audiosinkcaps);
++    gst_element_class_add_pad_template (element_class, audiosinktempl);
++  }
++
++  if (videosinkcaps) {
++    videosinktempl = gst_pad_template_new ("video_%d",
++        GST_PAD_SINK, GST_PAD_REQUEST, videosinkcaps);
++    gst_element_class_add_pad_template (element_class, videosinktempl);
++  }
++
++beach:
++  klass->in_plugin = in_plugin;
++}
++
++static void
++gst_ffmpegmux_class_init (GstFFMpegMuxClass * klass)
++{
++  GObjectClass *gobject_class;
++  GstElementClass *gstelement_class;
++
++  gobject_class = (GObjectClass *) klass;
++  gstelement_class = (GstElementClass *) klass;
++
++  parent_class = g_type_class_peek_parent (klass);
++
++  gobject_class->set_property = GST_DEBUG_FUNCPTR (gst_ffmpegmux_set_property);
++  gobject_class->get_property = GST_DEBUG_FUNCPTR (gst_ffmpegmux_get_property);
++
++  g_object_class_install_property (gobject_class, PROP_PRELOAD,
++      g_param_spec_int ("preload", "preload",
++          "Set the initial demux-decode delay (in microseconds)", 0, G_MAXINT,
++          0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
++
++  g_object_class_install_property (gobject_class, PROP_MAXDELAY,
++      g_param_spec_int ("maxdelay", "maxdelay",
++          "Set the maximum demux-decode delay (in microseconds)", 0, G_MAXINT,
++          0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
++
++  gstelement_class->request_new_pad = gst_ffmpegmux_request_new_pad;
++  gstelement_class->change_state = gst_ffmpegmux_change_state;
++  gobject_class->finalize = gst_ffmpegmux_finalize;
++}
++
++static void
++gst_ffmpegmux_init (GstFFMpegMux * ffmpegmux, GstFFMpegMuxClass * g_class)
++{
++  GstElementClass *klass = GST_ELEMENT_CLASS (g_class);
++  GstFFMpegMuxClass *oclass = (GstFFMpegMuxClass *) klass;
++  GstPadTemplate *templ = gst_element_class_get_pad_template (klass, "src");
++
++  ffmpegmux->srcpad = gst_pad_new_from_template (templ, "src");
++  gst_pad_set_caps (ffmpegmux->srcpad, gst_pad_template_get_caps (templ));
++  gst_element_add_pad (GST_ELEMENT (ffmpegmux), ffmpegmux->srcpad);
++
++  ffmpegmux->collect = gst_collect_pads_new ();
++  gst_collect_pads_set_function (ffmpegmux->collect,
++      (GstCollectPadsFunction) gst_ffmpegmux_collected, ffmpegmux);
++
++  ffmpegmux->context = g_new0 (AVFormatContext, 1);
++  ffmpegmux->context->oformat = oclass->in_plugin;
++  ffmpegmux->context->nb_streams = 0;
++  g_snprintf (ffmpegmux->context->filename,
++      sizeof (ffmpegmux->context->filename),
++      "gstreamer://%p", ffmpegmux->srcpad);
++  ffmpegmux->opened = FALSE;
++
++  ffmpegmux->videopads = 0;
++  ffmpegmux->audiopads = 0;
++  ffmpegmux->preload = 0;
++  ffmpegmux->max_delay = 0;
++}
++
++static void
++gst_ffmpegmux_set_property (GObject * object, guint prop_id,
++    const GValue * value, GParamSpec * pspec)
++{
++  GstFFMpegMux *src;
++
++  src = (GstFFMpegMux *) object;
++
++  switch (prop_id) {
++    case PROP_PRELOAD:
++      src->preload = g_value_get_int (value);
++      break;
++    case PROP_MAXDELAY:
++      src->max_delay = g_value_get_int (value);
++      break;
++    default:
++      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
++      break;
++  }
++}
++
++static void
++gst_ffmpegmux_get_property (GObject * object, guint prop_id, GValue * value,
++    GParamSpec * pspec)
++{
++  GstFFMpegMux *src;
++
++  src = (GstFFMpegMux *) object;
++
++  switch (prop_id) {
++    case PROP_PRELOAD:
++      g_value_set_int (value, src->preload);
++      break;
++    case PROP_MAXDELAY:
++      g_value_set_int (value, src->max_delay);
++      break;
++    default:
++      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
++      break;
++  }
++}
++
++
++static void
++gst_ffmpegmux_finalize (GObject * object)
++{
++  GstFFMpegMux *ffmpegmux = (GstFFMpegMux *) object;
++
++  g_free (ffmpegmux->context);
++  gst_object_unref (ffmpegmux->collect);
++
++  if (G_OBJECT_CLASS (parent_class)->finalize)
++    G_OBJECT_CLASS (parent_class)->finalize (object);
++}
++
++static GstPad *
++gst_ffmpegmux_request_new_pad (GstElement * element,
++    GstPadTemplate * templ, const gchar * name)
++{
++  GstFFMpegMux *ffmpegmux = (GstFFMpegMux *) element;
++  GstElementClass *klass = GST_ELEMENT_GET_CLASS (element);
++  GstFFMpegMuxPad *collect_pad;
++  gchar *padname;
++  GstPad *pad;
++  AVStream *st;
++  enum AVMediaType type;
++  gint bitrate = 0, framesize = 0;
++
++  g_return_val_if_fail (templ != NULL, NULL);
++  g_return_val_if_fail (templ->direction == GST_PAD_SINK, NULL);
++  g_return_val_if_fail (ffmpegmux->opened == FALSE, NULL);
++
++  /* figure out a name that *we* like */
++  if (templ == gst_element_class_get_pad_template (klass, "video_%d")) {
++    padname = g_strdup_printf ("video_%d", ffmpegmux->videopads++);
++    type = AVMEDIA_TYPE_VIDEO;
++    bitrate = 64 * 1024;
++    framesize = 1152;
++  } else if (templ == gst_element_class_get_pad_template (klass, "audio_%d")) {
++    padname = g_strdup_printf ("audio_%d", ffmpegmux->audiopads++);
++    type = AVMEDIA_TYPE_AUDIO;
++    bitrate = 285 * 1024;
++  } else {
++    g_warning ("ffmux: unknown pad template!");
++    return NULL;
++  }
++
++  /* create pad */
++  pad = gst_pad_new_from_template (templ, padname);
++  collect_pad = (GstFFMpegMuxPad *)
++      gst_collect_pads_add_pad (ffmpegmux->collect, pad,
++      sizeof (GstFFMpegMuxPad));
++  collect_pad->padnum = ffmpegmux->context->nb_streams;
++
++  /* small hack to put our own event pad function and chain up to collect pad */
++  ffmpegmux->event_function = GST_PAD_EVENTFUNC (pad);
++  gst_pad_set_event_function (pad,
++      GST_DEBUG_FUNCPTR (gst_ffmpegmux_sink_event));
++
++  gst_pad_set_setcaps_function (pad, GST_DEBUG_FUNCPTR (gst_ffmpegmux_setcaps));
++  gst_element_add_pad (element, pad);
++
++  /* AVStream needs to be created */
++  st = av_new_stream (ffmpegmux->context, collect_pad->padnum);
++  st->codec->codec_type = type;
++  st->codec->codec_id = CODEC_ID_NONE;  /* this is a check afterwards */
++  st->stream_copy = 1;          /* we're not the actual encoder */
++  st->codec->bit_rate = bitrate;
++  st->codec->frame_size = framesize;
++  /* we fill in codec during capsnego */
++
++  /* we love debug output (c) (tm) (r) */
++  GST_DEBUG ("Created %s pad for ffmux_%s element",
++      padname, ((GstFFMpegMuxClass *) klass)->in_plugin->name);
++  g_free (padname);
++
++  return pad;
++}
++
++/**
++ * gst_ffmpegmux_setcaps
++ * @pad: #GstPad
++ * @caps: New caps.
++ *
++ * Set caps to pad.
++ *
++ * Returns: #TRUE on success.
++ */
++static gboolean
++gst_ffmpegmux_setcaps (GstPad * pad, GstCaps * caps)
++{
++  GstFFMpegMux *ffmpegmux = (GstFFMpegMux *) (gst_pad_get_parent (pad));
++  GstFFMpegMuxPad *collect_pad;
++  AVStream *st;
++
++  collect_pad = (GstFFMpegMuxPad *) gst_pad_get_element_private (pad);
++
++  st = ffmpegmux->context->streams[collect_pad->padnum];
++  ffmpegmux->context->preload = ffmpegmux->preload;
++  ffmpegmux->context->max_delay = ffmpegmux->max_delay;
++
++  /* for the format-specific guesses, we'll go to
++   * our famous codec mapper */
++  if (gst_ffmpeg_caps_to_codecid (caps, st->codec) == CODEC_ID_NONE)
++    goto not_accepted;
++
++  /* copy over the aspect ratios, ffmpeg expects the stream aspect to match the
++   * codec aspect. */
++  st->sample_aspect_ratio = st->codec->sample_aspect_ratio;
++
++  GST_LOG_OBJECT (pad, "accepted caps %" GST_PTR_FORMAT, caps);
++  return TRUE;
++
++  /* ERRORS */
++not_accepted:
++  {
++    GST_LOG_OBJECT (pad, "rejecting caps %" GST_PTR_FORMAT, caps);
++    return FALSE;
++  }
++}
++
++
++static gboolean
++gst_ffmpegmux_sink_event (GstPad * pad, GstEvent * event)
++{
++  GstFFMpegMux *ffmpegmux = (GstFFMpegMux *) gst_pad_get_parent (pad);
++  gboolean res = TRUE;
++
++  switch (GST_EVENT_TYPE (event)) {
++    case GST_EVENT_TAG:{
++      GstTagList *taglist;
++      GstTagSetter *setter = GST_TAG_SETTER (ffmpegmux);
++      const GstTagMergeMode mode = gst_tag_setter_get_tag_merge_mode (setter);
++
++      gst_event_parse_tag (event, &taglist);
++      gst_tag_setter_merge_tags (setter, taglist, mode);
++      break;
++    }
++    default:
++      break;
++  }
++
++  /* chaining up to collectpads default event function */
++  res = ffmpegmux->event_function (pad, event);
++
++  gst_object_unref (ffmpegmux);
++  return res;
++}
++
++static GstFlowReturn
++gst_ffmpegmux_collected (GstCollectPads * pads, gpointer user_data)
++{
++  GstFFMpegMux *ffmpegmux = (GstFFMpegMux *) user_data;
++  GSList *collected;
++  GstFFMpegMuxPad *best_pad;
++  GstClockTime best_time;
++#if 0
++  /* Re-enable once converted to new AVMetaData API
++   * See #566605
++   */
++  const GstTagList *tags;
++#endif
++
++  /* open "file" (gstreamer protocol to next element) */
++  if (!ffmpegmux->opened) {
++    int open_flags = URL_WRONLY;
++
++    /* we do need all streams to have started capsnego,
++     * or things will go horribly wrong */
++    for (collected = ffmpegmux->collect->data; collected;
++        collected = g_slist_next (collected)) {
++      GstFFMpegMuxPad *collect_pad = (GstFFMpegMuxPad *) collected->data;
++      AVStream *st = ffmpegmux->context->streams[collect_pad->padnum];
++
++      /* check whether the pad has successfully completed capsnego */
++      if (st->codec->codec_id == CODEC_ID_NONE) {
++        GST_ELEMENT_ERROR (ffmpegmux, CORE, NEGOTIATION, (NULL),
++            ("no caps set on stream %d (%s)", collect_pad->padnum,
++                (st->codec->codec_type == AVMEDIA_TYPE_VIDEO) ?
++                "video" : "audio"));
++        return GST_FLOW_ERROR;
++      }
++      /* set framerate for audio */
++      if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
++        switch (st->codec->codec_id) {
++          case CODEC_ID_PCM_S16LE:
++          case CODEC_ID_PCM_S16BE:
++          case CODEC_ID_PCM_U16LE:
++          case CODEC_ID_PCM_U16BE:
++          case CODEC_ID_PCM_S8:
++          case CODEC_ID_PCM_U8:
++            st->codec->frame_size = 1;
++            break;
++          default:
++          {
++            GstBuffer *buffer;
++
++            /* FIXME : This doesn't work for RAW AUDIO...
++             * in fact I'm wondering if it even works for any kind of audio... */
++            buffer = gst_collect_pads_peek (ffmpegmux->collect,
++                (GstCollectData *) collect_pad);
++            if (buffer) {
++              st->codec->frame_size =
++                  st->codec->sample_rate *
++                  GST_BUFFER_DURATION (buffer) / GST_SECOND;
++              gst_buffer_unref (buffer);
++            }
++          }
++        }
++      }
++    }
++
++#if 0
++    /* Re-enable once converted to new AVMetaData API
++     * See #566605
++     */
++
++    /* tags */
++    tags = gst_tag_setter_get_tag_list (GST_TAG_SETTER (ffmpegmux));
++    if (tags) {
++      gint i;
++      gchar *s;
++
++      /* get the interesting ones */
++      if (gst_tag_list_get_string (tags, GST_TAG_TITLE, &s)) {
++        strncpy (ffmpegmux->context->title, s,
++            sizeof (ffmpegmux->context->title));
++      }
++      if (gst_tag_list_get_string (tags, GST_TAG_ARTIST, &s)) {
++        strncpy (ffmpegmux->context->author, s,
++            sizeof (ffmpegmux->context->author));
++      }
++      if (gst_tag_list_get_string (tags, GST_TAG_COPYRIGHT, &s)) {
++        strncpy (ffmpegmux->context->copyright, s,
++            sizeof (ffmpegmux->context->copyright));
++      }
++      if (gst_tag_list_get_string (tags, GST_TAG_COMMENT, &s)) {
++        strncpy (ffmpegmux->context->comment, s,
++            sizeof (ffmpegmux->context->comment));
++      }
++      if (gst_tag_list_get_string (tags, GST_TAG_ALBUM, &s)) {
++        strncpy (ffmpegmux->context->album, s,
++            sizeof (ffmpegmux->context->album));
++      }
++      if (gst_tag_list_get_string (tags, GST_TAG_GENRE, &s)) {
++        strncpy (ffmpegmux->context->genre, s,
++            sizeof (ffmpegmux->context->genre));
++      }
++      if (gst_tag_list_get_int (tags, GST_TAG_TRACK_NUMBER, &i)) {
++        ffmpegmux->context->track = i;
++      }
++    }
++#endif
++
++    /* set the streamheader flag for gstffmpegprotocol if codec supports it */
++    if (!strcmp (ffmpegmux->context->oformat->name, "flv")) {
++      open_flags |= GST_FFMPEG_URL_STREAMHEADER;
++    }
++
++    if (url_fopen (&ffmpegmux->context->pb,
++            ffmpegmux->context->filename, open_flags) < 0) {
++      GST_ELEMENT_ERROR (ffmpegmux, LIBRARY, TOO_LAZY, (NULL),
++          ("Failed to open stream context in ffmux"));
++      return GST_FLOW_ERROR;
++    }
++
++    if (av_set_parameters (ffmpegmux->context, NULL) < 0) {
++      GST_ELEMENT_ERROR (ffmpegmux, LIBRARY, INIT, (NULL),
++          ("Failed to initialize muxer"));
++      return GST_FLOW_ERROR;
++    }
++
++    /* now open the mux format */
++    if (av_write_header (ffmpegmux->context) < 0) {
++      GST_ELEMENT_ERROR (ffmpegmux, LIBRARY, SETTINGS, (NULL),
++          ("Failed to write file header - check codec settings"));
++      return GST_FLOW_ERROR;
++    }
++
++    /* we're now opened */
++    ffmpegmux->opened = TRUE;
++
++    /* flush the header so it will be used as streamheader */
++    put_flush_packet (ffmpegmux->context->pb);
++  }
++
++  /* take the one with earliest timestamp,
++   * and push it forward */
++  best_pad = NULL;
++  best_time = GST_CLOCK_TIME_NONE;
++  for (collected = ffmpegmux->collect->data; collected;
++      collected = g_slist_next (collected)) {
++    GstFFMpegMuxPad *collect_pad = (GstFFMpegMuxPad *) collected->data;
++    GstBuffer *buffer = gst_collect_pads_peek (ffmpegmux->collect,
++        (GstCollectData *) collect_pad);
++
++    /* if there's no buffer, just continue */
++    if (buffer == NULL) {
++      continue;
++    }
++
++    /* if we have no buffer yet, just use the first one */
++    if (best_pad == NULL) {
++      best_pad = collect_pad;
++      best_time = GST_BUFFER_TIMESTAMP (buffer);
++      goto next_pad;
++    }
++
++    /* if we do have one, only use this one if it's older */
++    if (GST_BUFFER_TIMESTAMP (buffer) < best_time) {
++      best_time = GST_BUFFER_TIMESTAMP (buffer);
++      best_pad = collect_pad;
++    }
++
++  next_pad:
++    gst_buffer_unref (buffer);
++
++    /* Mux buffers with invalid timestamp first */
++    if (!GST_CLOCK_TIME_IS_VALID (best_time))
++      break;
++  }
++
++  /* now handle the buffer, or signal EOS if we have
++   * no buffers left */
++  if (best_pad != NULL) {
++    GstBuffer *buf;
++    AVPacket pkt;
++    gboolean need_free = FALSE;
++
++    /* push out current buffer */
++    buf = gst_collect_pads_pop (ffmpegmux->collect,
++        (GstCollectData *) best_pad);
++
++    ffmpegmux->context->streams[best_pad->padnum]->codec->frame_number++;
++
++    /* set time */
++    pkt.pts = gst_ffmpeg_time_gst_to_ff (GST_BUFFER_TIMESTAMP (buf),
++        ffmpegmux->context->streams[best_pad->padnum]->time_base);
++    pkt.dts = pkt.pts;
++
++    if (strcmp (ffmpegmux->context->oformat->name, "gif") == 0) {
++      AVStream *st = ffmpegmux->context->streams[best_pad->padnum];
++      AVPicture src, dst;
++
++      need_free = TRUE;
++      pkt.size = st->codec->width * st->codec->height * 3;
++      pkt.data = g_malloc (pkt.size);
++
++      dst.data[0] = pkt.data;
++      dst.data[1] = NULL;
++      dst.data[2] = NULL;
++      dst.linesize[0] = st->codec->width * 3;
++
++      gst_ffmpeg_avpicture_fill (&src, GST_BUFFER_DATA (buf),
++          PIX_FMT_RGB24, st->codec->width, st->codec->height);
++
++      av_picture_copy (&dst, &src, PIX_FMT_RGB24,
++          st->codec->width, st->codec->height);
++    } else {
++      pkt.data = GST_BUFFER_DATA (buf);
++      pkt.size = GST_BUFFER_SIZE (buf);
++    }
++
++    pkt.stream_index = best_pad->padnum;
++    pkt.flags = 0;
++
++    if (!GST_BUFFER_FLAG_IS_SET (buf, GST_BUFFER_FLAG_DELTA_UNIT))
++      pkt.flags |= AV_PKT_FLAG_KEY;
++
++    if (GST_BUFFER_DURATION_IS_VALID (buf))
++      pkt.duration =
++          gst_ffmpeg_time_gst_to_ff (GST_BUFFER_DURATION (buf),
++          ffmpegmux->context->streams[best_pad->padnum]->time_base);
++    else
++      pkt.duration = 0;
++    av_write_frame (ffmpegmux->context, &pkt);
++    gst_buffer_unref (buf);
++    if (need_free)
++      g_free (pkt.data);
++  } else {
++    /* close down */
++    av_write_trailer (ffmpegmux->context);
++    ffmpegmux->opened = FALSE;
++    put_flush_packet (ffmpegmux->context->pb);
++    url_fclose (ffmpegmux->context->pb);
++    gst_pad_push_event (ffmpegmux->srcpad, gst_event_new_eos ());
++    return GST_FLOW_UNEXPECTED;
++  }
++
++  return GST_FLOW_OK;
++}
++
++static GstStateChangeReturn
++gst_ffmpegmux_change_state (GstElement * element, GstStateChange transition)
++{
++  GstFlowReturn ret;
++  GstFFMpegMux *ffmpegmux = (GstFFMpegMux *) (element);
++
++  switch (transition) {
++    case GST_STATE_CHANGE_NULL_TO_READY:
++      break;
++    case GST_STATE_CHANGE_READY_TO_PAUSED:
++      gst_collect_pads_start (ffmpegmux->collect);
++      break;
++    case GST_STATE_CHANGE_PAUSED_TO_PLAYING:
++      break;
++    case GST_STATE_CHANGE_PAUSED_TO_READY:
++      gst_collect_pads_stop (ffmpegmux->collect);
++      break;
++    default:
++      break;
++  }
++
++  ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition);
++
++  switch (transition) {
++    case GST_STATE_CHANGE_PLAYING_TO_PAUSED:
++      break;
++    case GST_STATE_CHANGE_PAUSED_TO_READY:
++      gst_tag_setter_reset_tags (GST_TAG_SETTER (ffmpegmux));
++      if (ffmpegmux->opened) {
++        ffmpegmux->opened = FALSE;
++        url_fclose (ffmpegmux->context->pb);
++      }
++      break;
++    case GST_STATE_CHANGE_READY_TO_NULL:
++      break;
++    default:
++      break;
++  }
++
++  return ret;
++}
++
++static GstCaps *
++gst_ffmpegmux_get_id_caps (enum CodecID *id_list)
++{
++  GstCaps *caps, *t;
++  gint i;
++
++  caps = gst_caps_new_empty ();
++  for (i = 0; id_list[i] != CODEC_ID_NONE; i++) {
++    if ((t = gst_ffmpeg_codecid_to_caps (id_list[i], NULL, TRUE)))
++      gst_caps_append (caps, t);
++  }
++  if (gst_caps_is_empty (caps)) {
++    gst_caps_unref (caps);
++    return NULL;
++  }
++
++  return caps;
++}
++
++/* set a list of integer values on the caps, e.g. for sample rates */
++static void
++gst_ffmpeg_mux_simple_caps_set_int_list (GstCaps * caps, const gchar * field,
++    guint num, const gint * values)
++{
++  GValue list = { 0, };
++  GValue val = { 0, };
++  gint i;
++
++  g_return_if_fail (GST_CAPS_IS_SIMPLE (caps));
++
++  g_value_init (&list, GST_TYPE_LIST);
++  g_value_init (&val, G_TYPE_INT);
++
++  for (i = 0; i < num; ++i) {
++    g_value_set_int (&val, values[i]);
++    gst_value_list_append_value (&list, &val);
++  }
++
++  gst_structure_set_value (gst_caps_get_structure (caps, 0), field, &list);
++
++  g_value_unset (&val);
++  g_value_unset (&list);
++}
++
++gboolean
++gst_ffmpegmux_register (GstPlugin * plugin)
++{
++  GTypeInfo typeinfo = {
++    sizeof (GstFFMpegMuxClass),
++    (GBaseInitFunc) gst_ffmpegmux_base_init,
++    NULL,
++    (GClassInitFunc) gst_ffmpegmux_class_init,
++    NULL,
++    NULL,
++    sizeof (GstFFMpegMux),
++    0,
++    (GInstanceInitFunc) gst_ffmpegmux_init,
++  };
++  static const GInterfaceInfo tag_setter_info = {
++    NULL, NULL, NULL
++  };
++  GType type;
++  AVOutputFormat *in_plugin;
++
++  in_plugin = av_oformat_next (NULL);
++
++  GST_LOG ("Registering muxers");
++
++  while (in_plugin) {
++    gchar *type_name;
++    gchar *p;
++    GstRank rank = GST_RANK_MARGINAL;
++
++    if ((!strncmp (in_plugin->name, "u16", 3)) ||
++        (!strncmp (in_plugin->name, "s16", 3)) ||
++        (!strncmp (in_plugin->name, "u24", 3)) ||
++        (!strncmp (in_plugin->name, "s24", 3)) ||
++        (!strncmp (in_plugin->name, "u8", 2)) ||
++        (!strncmp (in_plugin->name, "s8", 2)) ||
++        (!strncmp (in_plugin->name, "u32", 3)) ||
++        (!strncmp (in_plugin->name, "s32", 3)) ||
++        (!strncmp (in_plugin->name, "f32", 3)) ||
++        (!strncmp (in_plugin->name, "f64", 3)) ||
++        (!strncmp (in_plugin->name, "raw", 3)) ||
++        (!strncmp (in_plugin->name, "crc", 3)) ||
++        (!strncmp (in_plugin->name, "null", 4)) ||
++        (!strncmp (in_plugin->name, "gif", 3)) ||
++        (!strncmp (in_plugin->name, "frame", 5)) ||
++        (!strncmp (in_plugin->name, "image", 5)) ||
++        (!strncmp (in_plugin->name, "mulaw", 5)) ||
++        (!strncmp (in_plugin->name, "alaw", 4)) ||
++        (!strncmp (in_plugin->name, "h26", 3)) ||
++        (!strncmp (in_plugin->name, "rtp", 3)) ||
++        (!strncmp (in_plugin->name, "ass", 3)) ||
++        (!strncmp (in_plugin->name, "ffmetadata", 10)) ||
++        (!strncmp (in_plugin->name, "srt", 3))
++        ) {
++      GST_LOG ("Ignoring muxer %s", in_plugin->name);
++      goto next;
++    }
++
++    if ((!strncmp (in_plugin->long_name, "raw ", 4))) {
++      GST_LOG ("Ignoring raw muxer %s", in_plugin->name);
++      goto next;
++    }
++
++    if (gst_ffmpegmux_get_replacement (in_plugin->name))
++      rank = GST_RANK_NONE;
++
++    /* FIXME : We need a fast way to know whether we have mappings for this
++     * muxer type. */
++
++    /* construct the type */
++    type_name = g_strdup_printf ("ffmux_%s", in_plugin->name);
++
++    p = type_name;
++
++    while (*p) {
++      if (*p == '.')
++        *p = '_';
++      p++;
++    }
++
++    type = g_type_from_name (type_name);
++
++    if (!type) {
++      /* create the type now */
++      type = g_type_register_static (GST_TYPE_ELEMENT, type_name, &typeinfo, 0);
++      g_type_set_qdata (type, GST_FFMUX_PARAMS_QDATA, (gpointer) in_plugin);
++      g_type_add_interface_static (type, GST_TYPE_TAG_SETTER, &tag_setter_info);
++    }
++
++    if (!gst_element_register (plugin, type_name, rank, type)) {
++      g_free (type_name);
++      return FALSE;
++    }
++
++    g_free (type_name);
++
++  next:
++    in_plugin = av_oformat_next (in_plugin);
++  }
++
++  GST_LOG ("Finished registering muxers");
++
++  return TRUE;
++}
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegprotocol.c gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegprotocol.c
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegprotocol.c	2011-07-12 16:35:28.000000000 +0200
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegprotocol.c	2014-08-08 15:26:07.875857555 +0200
+@@ -46,63 +46,14 @@
+ };
+ 
+ static int
+-gst_ffmpegdata_open (URLContext * h, const char *filename, int flags)
+-{
+-  GstProtocolInfo *info;
+-  GstPad *pad;
+-
+-  GST_LOG ("Opening %s", filename);
+-
+-  info = g_new0 (GstProtocolInfo, 1);
+-
+-  info->set_streamheader = flags & GST_FFMPEG_URL_STREAMHEADER;
+-  flags &= ~GST_FFMPEG_URL_STREAMHEADER;
+-  h->flags &= ~GST_FFMPEG_URL_STREAMHEADER;
+-
+-  /* we don't support R/W together */
+-  if (flags != URL_RDONLY && flags != URL_WRONLY) {
+-    GST_WARNING ("Only read-only or write-only are supported");
+-    return -EINVAL;
+-  }
+-
+-  if (sscanf (&filename[12], "%p", &pad) != 1) {
+-    GST_WARNING ("could not decode pad from %s", filename);
+-    return -EIO;
+-  }
+-
+-  /* make sure we're a pad and that we're of the right type */
+-  g_return_val_if_fail (GST_IS_PAD (pad), -EINVAL);
+-
+-  switch (flags) {
+-    case URL_RDONLY:
+-      g_return_val_if_fail (GST_PAD_IS_SINK (pad), -EINVAL);
+-      break;
+-    case URL_WRONLY:
+-      g_return_val_if_fail (GST_PAD_IS_SRC (pad), -EINVAL);
+-      break;
+-  }
+-
+-  info->eos = FALSE;
+-  info->pad = pad;
+-  info->offset = 0;
+-
+-  h->priv_data = (void *) info;
+-  h->is_streamed = FALSE;
+-  h->max_packet_size = 0;
+-
+-  return 0;
+-}
+-
+-static int
+-gst_ffmpegdata_peek (URLContext * h, unsigned char *buf, int size)
++gst_ffmpegdata_peek (void *priv_data, unsigned char *buf, int size)
+ {
+   GstProtocolInfo *info;
+   GstBuffer *inbuf = NULL;
+   GstFlowReturn ret;
+   int total = 0;
+ 
+-  g_return_val_if_fail (h->flags == URL_RDONLY, AVERROR (EIO));
+-  info = (GstProtocolInfo *) h->priv_data;
++  info = (GstProtocolInfo *) priv_data;
+ 
+   GST_DEBUG ("Pulling %d bytes at position %" G_GUINT64_FORMAT, size,
+       info->offset);
+@@ -134,17 +85,17 @@
+ }
+ 
+ static int
+-gst_ffmpegdata_read (URLContext * h, unsigned char *buf, int size)
++gst_ffmpegdata_read (void *priv_data, unsigned char *buf, int size)
+ {
+   gint res;
+   GstProtocolInfo *info;
+ 
+-  info = (GstProtocolInfo *) h->priv_data;
++  info = (GstProtocolInfo *) priv_data;
+ 
+   GST_DEBUG ("Reading %d bytes of data at position %" G_GUINT64_FORMAT, size,
+       info->offset);
+ 
+-  res = gst_ffmpegdata_peek (h, buf, size);
++  res = gst_ffmpegdata_peek (priv_data, buf, size);
+   if (res >= 0)
+     info->offset += res;
+ 
+@@ -154,15 +105,13 @@
+ }
+ 
+ static int
+-gst_ffmpegdata_write (URLContext * h, const unsigned char *buf, int size)
++gst_ffmpegdata_write (void *priv_data, const unsigned char *buf, int size)
+ {
+   GstProtocolInfo *info;
+   GstBuffer *outbuf;
+ 
+   GST_DEBUG ("Writing %d bytes", size);
+-  info = (GstProtocolInfo *) h->priv_data;
+-
+-  g_return_val_if_fail (h->flags != URL_RDONLY, -EIO);
++  info = (GstProtocolInfo *) priv_data;
+ 
+   /* create buffer and push data further */
+   if (gst_pad_alloc_buffer_and_set_caps (info->pad,
+@@ -179,7 +128,7 @@
+ }
+ 
+ static int64_t
+-gst_ffmpegdata_seek (URLContext * h, int64_t pos, int whence)
++gst_ffmpegdata_seek (void *priv_data, int64_t pos, int whence)
+ {
+   GstProtocolInfo *info;
+   guint64 newpos = 0;
+@@ -187,70 +136,62 @@
+   GST_DEBUG ("Seeking to %" G_GINT64_FORMAT ", whence=%d",
+       (gint64) pos, whence);
+ 
+-  info = (GstProtocolInfo *) h->priv_data;
++  info = (GstProtocolInfo *) priv_data;
+ 
+   /* TODO : if we are push-based, we need to return sensible info */
+ 
+-  switch (h->flags) {
+-    case URL_RDONLY:
+-    {
+-      /* sinkpad */
+-      switch (whence) {
+-        case SEEK_SET:
+-          newpos = (guint64) pos;
+-          break;
+-        case SEEK_CUR:
+-          newpos = info->offset + pos;
+-          break;
+-        case SEEK_END:
+-        case AVSEEK_SIZE:
+-          /* ffmpeg wants to know the current end position in bytes ! */
+-        {
+-          GstFormat format = GST_FORMAT_BYTES;
+-          gint64 duration;
+-
+-          GST_DEBUG ("Seek end");
+-
+-          if (gst_pad_is_linked (info->pad))
+-            if (gst_pad_query_duration (GST_PAD_PEER (info->pad), &format,
+-                    &duration))
+-              newpos = ((guint64) duration) + pos;
+-        }
+-          break;
+-        default:
+-          g_assert (0);
+-          break;
++  if (GST_PAD_IS_SINK (info->pad)) {
++    /* sinkpad */
++    switch (whence) {
++      case SEEK_SET:
++        newpos = (guint64) pos;
++        break;
++      case SEEK_CUR:
++        newpos = info->offset + pos;
++        break;
++      case SEEK_END:
++      case AVSEEK_SIZE:
++        /* ffmpeg wants to know the current end position in bytes ! */
++      {
++        GstFormat format = GST_FORMAT_BYTES;
++        gint64 duration;
++
++        GST_DEBUG ("Seek end");
++
++        if (gst_pad_is_linked (info->pad))
++          if (gst_pad_query_duration (GST_PAD_PEER (info->pad), &format,
++                  &duration))
++            newpos = ((guint64) duration) + pos;
+       }
+-      /* FIXME : implement case for push-based behaviour */
+-      if (whence != AVSEEK_SIZE)
+-        info->offset = newpos;
++        break;
++      default:
++        g_assert (0);
++        break;
+     }
+-      break;
+-    case URL_WRONLY:
+-    {
+-      /* srcpad */
+-      switch (whence) {
+-        case SEEK_SET:
+-          info->offset = (guint64) pos;
+-          gst_pad_push_event (info->pad, gst_event_new_new_segment
+-              (TRUE, 1.0, GST_FORMAT_BYTES, info->offset,
+-                  GST_CLOCK_TIME_NONE, info->offset));
+-          break;
+-        case SEEK_CUR:
+-          info->offset += pos;
+-          gst_pad_push_event (info->pad, gst_event_new_new_segment
+-              (TRUE, 1.0, GST_FORMAT_BYTES, info->offset,
+-                  GST_CLOCK_TIME_NONE, info->offset));
+-          break;
+-        default:
+-          break;
+-      }
+-      newpos = info->offset;
++    /* FIXME : implement case for push-based behaviour */
++    if (whence != AVSEEK_SIZE)
++      info->offset = newpos;
++  } else if (GST_PAD_IS_SRC (info->pad)) {
++    /* srcpad */
++    switch (whence) {
++      case SEEK_SET:
++        info->offset = (guint64) pos;
++        gst_pad_push_event (info->pad, gst_event_new_new_segment
++            (TRUE, 1.0, GST_FORMAT_BYTES, info->offset,
++                GST_CLOCK_TIME_NONE, info->offset));
++        break;
++      case SEEK_CUR:
++        info->offset += pos;
++        gst_pad_push_event (info->pad, gst_event_new_new_segment
++            (TRUE, 1.0, GST_FORMAT_BYTES, info->offset,
++                GST_CLOCK_TIME_NONE, info->offset));
++        break;
++      default:
++        break;
+     }
+-      break;
+-    default:
+-      g_assert (0);
+-      break;
++    newpos = info->offset;
++  } else {
++    g_assert_not_reached ();
+   }
+ 
+   GST_DEBUG ("Now at offset %" G_GUINT64_FORMAT " (returning %" G_GUINT64_FORMAT
+@@ -258,85 +199,91 @@
+   return newpos;
+ }
+ 
+-static int
+-gst_ffmpegdata_close (URLContext * h)
++int
++gst_ffmpegdata_close (AVIOContext * h)
+ {
+   GstProtocolInfo *info;
+ 
+-  info = (GstProtocolInfo *) h->priv_data;
++  info = (GstProtocolInfo *) h->opaque;
+   if (info == NULL)
+     return 0;
+ 
+   GST_LOG ("Closing file");
+ 
+-  switch (h->flags) {
+-    case URL_WRONLY:
+-    {
+-      /* send EOS - that closes down the stream */
+-      gst_pad_push_event (info->pad, gst_event_new_eos ());
+-      break;
+-    }
+-    default:
+-      break;
++  if (GST_PAD_IS_SRC (info->pad)) {
++    /* send EOS - that closes down the stream */
++    gst_pad_push_event (info->pad, gst_event_new_eos ());
+   }
+ 
+   /* clean up data */
+   g_free (info);
+-  h->priv_data = NULL;
++  h->opaque = NULL;
++
++  av_freep (&h->buffer);
++  av_free (h);
+ 
+   return 0;
+ }
+ 
++int
++gst_ffmpegdata_open (GstPad * pad, int flags, AVIOContext ** context)
++{
++  GstProtocolInfo *info;
++  static const int buffer_size = 4096;
++  unsigned char *buffer = NULL;
+ 
+-URLProtocol gstreamer_protocol = {
+-  /*.name = */ "gstreamer",
+-  /*.url_open = */ gst_ffmpegdata_open,
+-  /*.url_read = */ gst_ffmpegdata_read,
+-  /*.url_write = */ gst_ffmpegdata_write,
+-  /*.url_seek = */ gst_ffmpegdata_seek,
+-  /*.url_close = */ gst_ffmpegdata_close,
+-};
++  info = g_new0 (GstProtocolInfo, 1);
+ 
++  info->set_streamheader = flags & GST_FFMPEG_URL_STREAMHEADER;
++  flags &= ~GST_FFMPEG_URL_STREAMHEADER;
+ 
+-/* specialized protocol for cross-thread pushing,
+- * based on ffmpeg's pipe protocol */
++  /* we don't support R/W together */
++  if ((flags & AVIO_FLAG_WRITE) && (flags & AVIO_FLAG_READ)) {
++    GST_WARNING ("Only read-only or write-only are supported");
++    return -EINVAL;
++  }
+ 
+-static int
+-gst_ffmpeg_pipe_open (URLContext * h, const char *filename, int flags)
+-{
+-  GstFFMpegPipe *ffpipe;
++  /* make sure we're a pad and that we're of the right type */
++  g_return_val_if_fail (GST_IS_PAD (pad), -EINVAL);
+ 
+-  GST_LOG ("Opening %s", filename);
++  if ((flags & AVIO_FLAG_READ))
++    g_return_val_if_fail (GST_PAD_IS_SINK (pad), -EINVAL);
++  if ((flags & AVIO_FLAG_WRITE))
++    g_return_val_if_fail (GST_PAD_IS_SRC (pad), -EINVAL);
+ 
+-  /* we don't support W together */
+-  if (flags != URL_RDONLY) {
+-    GST_WARNING ("Only read-only is supported");
+-    return -EINVAL;
+-  }
++  info->eos = FALSE;
++  info->pad = pad;
++  info->offset = 0;
+ 
+-  if (sscanf (&filename[10], "%p", &ffpipe) != 1) {
+-    GST_WARNING ("could not decode pipe info from %s", filename);
+-    return -EIO;
++  buffer = av_malloc (buffer_size);
++  if (buffer == NULL) {
++    GST_WARNING ("Failed to allocate buffer");
++    return -ENOMEM;
+   }
+ 
+-  /* sanity check */
+-  g_return_val_if_fail (GST_IS_ADAPTER (ffpipe->adapter), -EINVAL);
+-
+-  h->priv_data = (void *) ffpipe;
+-  h->is_streamed = TRUE;
+-  h->max_packet_size = 0;
++  *context =
++      avio_alloc_context (buffer, buffer_size, flags, (void *) info,
++      gst_ffmpegdata_read, gst_ffmpegdata_write, gst_ffmpegdata_seek);
++  (*context)->seekable = AVIO_SEEKABLE_NORMAL;
++  if (!(flags & AVIO_FLAG_WRITE)) {
++    (*context)->buf_ptr = (*context)->buf_end;
++    (*context)->write_flag = 0;
++  }
+ 
+   return 0;
+ }
+ 
++/* specialized protocol for cross-thread pushing,
++ * based on ffmpeg's pipe protocol */
++
+ static int
+-gst_ffmpeg_pipe_read (URLContext * h, unsigned char *buf, int size)
++gst_ffmpeg_pipe_read (void *priv_data, unsigned char *buf, int size)
+ {
+   GstFFMpegPipe *ffpipe;
+   const guint8 *data;
+   guint available;
+ 
+-  ffpipe = (GstFFMpegPipe *) h->priv_data;
++  ffpipe = (GstFFMpegPipe *) priv_data;
+ 
+   GST_LOG ("requested size %d", size);
+ 
+@@ -367,21 +314,38 @@
+   return size;
+ }
+ 
+-static int
+-gst_ffmpeg_pipe_close (URLContext * h)
++int
++gst_ffmpeg_pipe_close (AVIOContext * h)
+ {
+   GST_LOG ("Closing pipe");
+ 
+-  h->priv_data = NULL;
++  h->opaque = NULL;
++  av_freep (&h->buffer);
++  av_free (h);
+ 
+   return 0;
+ }
+ 
+-URLProtocol gstpipe_protocol = {
+-  "gstpipe",
+-  gst_ffmpeg_pipe_open,
+-  gst_ffmpeg_pipe_read,
+-  NULL,
+-  NULL,
+-  gst_ffmpeg_pipe_close,
+-};
++int
++gst_ffmpeg_pipe_open (GstFFMpegPipe * ffpipe, int flags, AVIOContext ** context)
++{
++  static const int buffer_size = 4096;
++  unsigned char *buffer = NULL;
++
++  /* sanity check */
++  g_return_val_if_fail (GST_IS_ADAPTER (ffpipe->adapter), -EINVAL);
++
++  buffer = av_malloc (buffer_size);
++  if (buffer == NULL) {
++    GST_WARNING ("Failed to allocate buffer");
++    return -ENOMEM;
++  }
++
++  *context =
++      avio_alloc_context (buffer, buffer_size, 0, (void *) ffpipe,
++      gst_ffmpeg_pipe_read, NULL, NULL);
++  (*context)->seekable = 0;
++  (*context)->buf_ptr = (*context)->buf_end;
++
++  return 0;
++}
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegutils.c gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegutils.c
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegutils.c	2011-07-13 11:07:28.000000000 +0200
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegutils.c	2014-08-08 15:34:04.007874626 +0200
+@@ -25,6 +25,11 @@
+ #ifdef __APPLE__
+ #include <sys/sysctl.h>
+ #endif
++#ifdef HAVE_FFMPEG_UNINSTALLED
++#include <avformat.h>
++#else
++#include <libavformat/avformat.h>
++#endif
+ 
+ G_CONST_RETURN gchar *
+ gst_ffmpeg_get_codecid_longname (enum CodecID codec_id)
+@@ -39,21 +44,21 @@
+ }
+ 
+ gint
+-av_smp_format_depth (enum SampleFormat smp_fmt)
++av_smp_format_depth (enum AVSampleFormat smp_fmt)
+ {
+   gint depth = -1;
+   switch (smp_fmt) {
+-    case SAMPLE_FMT_U8:
++    case AV_SAMPLE_FMT_U8:
+       depth = 1;
+       break;
+-    case SAMPLE_FMT_S16:
++    case AV_SAMPLE_FMT_S16:
+       depth = 2;
+       break;
+-    case SAMPLE_FMT_S32:
+-    case SAMPLE_FMT_FLT:
++    case AV_SAMPLE_FMT_S32:
++    case AV_SAMPLE_FMT_FLT:
+       depth = 4;
+       break;
+-    case SAMPLE_FMT_DBL:
++    case AV_SAMPLE_FMT_DBL:
+       depth = 8;
+       break;
+     default:
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegutils.c.orig gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegutils.c.orig
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegutils.c.orig	1970-01-01 01:00:00.000000000 +0100
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegutils.c.orig	2011-07-13 11:07:28.000000000 +0200
+@@ -0,0 +1,483 @@
++/* GStreamer
++ * Copyright (c) 2009 Edward Hervey <bilboed@bilboed.com>
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library 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
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library General Public
++ * License along with this library; if not, write to the
++ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ * Boston, MA 02111-1307, USA.
++ */
++
++#ifdef HAVE_CONFIG_H
++#include "config.h"
++#endif
++#include "gstffmpegutils.h"
++#include <unistd.h>
++#ifdef __APPLE__
++#include <sys/sysctl.h>
++#endif
++
++G_CONST_RETURN gchar *
++gst_ffmpeg_get_codecid_longname (enum CodecID codec_id)
++{
++  AVCodec *codec;
++  /* Let's use what ffmpeg can provide us */
++
++  if ((codec = avcodec_find_decoder (codec_id)) ||
++      (codec = avcodec_find_encoder (codec_id)))
++    return codec->long_name;
++  return NULL;
++}
++
++gint
++av_smp_format_depth (enum SampleFormat smp_fmt)
++{
++  gint depth = -1;
++  switch (smp_fmt) {
++    case SAMPLE_FMT_U8:
++      depth = 1;
++      break;
++    case SAMPLE_FMT_S16:
++      depth = 2;
++      break;
++    case SAMPLE_FMT_S32:
++    case SAMPLE_FMT_FLT:
++      depth = 4;
++      break;
++    case SAMPLE_FMT_DBL:
++      depth = 8;
++      break;
++    default:
++      GST_ERROR ("UNHANDLED SAMPLE FORMAT !");
++      break;
++  }
++  return depth;
++}
++
++
++/*
++ * Fill in pointers to memory in a AVPicture, where
++ * everything is aligned by 4 (as required by X).
++ * This is mostly a copy from imgconvert.c with some
++ * small changes.
++ */
++
++#define FF_COLOR_RGB      0     /* RGB color space */
++#define FF_COLOR_GRAY     1     /* gray color space */
++#define FF_COLOR_YUV      2     /* YUV color space. 16 <= Y <= 235, 16 <= U, V <= 240 */
++#define FF_COLOR_YUV_JPEG 3     /* YUV color space. 0 <= Y <= 255, 0 <= U, V <= 255 */
++
++#define FF_PIXEL_PLANAR   0     /* each channel has one component in AVPicture */
++#define FF_PIXEL_PACKED   1     /* only one components containing all the channels */
++#define FF_PIXEL_PALETTE  2     /* one components containing indexes for a palette */
++
++typedef struct PixFmtInfo
++{
++  const char *name;
++  uint8_t nb_channels;          /* number of channels (including alpha) */
++  uint8_t color_type;           /* color type (see FF_COLOR_xxx constants) */
++  uint8_t pixel_type;           /* pixel storage type (see FF_PIXEL_xxx constants) */
++  uint8_t is_alpha:1;           /* true if alpha can be specified */
++  uint8_t x_chroma_shift;       /* X chroma subsampling factor is 2 ^ shift */
++  uint8_t y_chroma_shift;       /* Y chroma subsampling factor is 2 ^ shift */
++  uint8_t depth;                /* bit depth of the color components */
++} PixFmtInfo;
++
++
++/* this table gives more information about formats */
++static PixFmtInfo pix_fmt_info[PIX_FMT_NB];
++void
++gst_ffmpeg_init_pix_fmt_info (void)
++{
++  /* YUV formats */
++  pix_fmt_info[PIX_FMT_YUV420P].name = g_strdup ("yuv420p");
++  pix_fmt_info[PIX_FMT_YUV420P].nb_channels = 3;
++  pix_fmt_info[PIX_FMT_YUV420P].color_type = FF_COLOR_YUV;
++  pix_fmt_info[PIX_FMT_YUV420P].pixel_type = FF_PIXEL_PLANAR;
++  pix_fmt_info[PIX_FMT_YUV420P].depth = 8,
++      pix_fmt_info[PIX_FMT_YUV420P].x_chroma_shift = 1,
++      pix_fmt_info[PIX_FMT_YUV420P].y_chroma_shift = 1;
++
++  pix_fmt_info[PIX_FMT_YUV422P].name = g_strdup ("yuv422p");
++  pix_fmt_info[PIX_FMT_YUV422P].nb_channels = 3;
++  pix_fmt_info[PIX_FMT_YUV422P].color_type = FF_COLOR_YUV;
++  pix_fmt_info[PIX_FMT_YUV422P].pixel_type = FF_PIXEL_PLANAR;
++  pix_fmt_info[PIX_FMT_YUV422P].depth = 8;
++  pix_fmt_info[PIX_FMT_YUV422P].x_chroma_shift = 1;
++  pix_fmt_info[PIX_FMT_YUV422P].y_chroma_shift = 0;
++
++  pix_fmt_info[PIX_FMT_YUV444P].name = g_strdup ("yuv444p");
++  pix_fmt_info[PIX_FMT_YUV444P].nb_channels = 3;
++  pix_fmt_info[PIX_FMT_YUV444P].color_type = FF_COLOR_YUV;
++  pix_fmt_info[PIX_FMT_YUV444P].pixel_type = FF_PIXEL_PLANAR;
++  pix_fmt_info[PIX_FMT_YUV444P].depth = 8;
++  pix_fmt_info[PIX_FMT_YUV444P].x_chroma_shift = 0;
++  pix_fmt_info[PIX_FMT_YUV444P].y_chroma_shift = 0;
++
++  pix_fmt_info[PIX_FMT_YUYV422].name = g_strdup ("yuv422");
++  pix_fmt_info[PIX_FMT_YUYV422].nb_channels = 1;
++  pix_fmt_info[PIX_FMT_YUYV422].color_type = FF_COLOR_YUV;
++  pix_fmt_info[PIX_FMT_YUYV422].pixel_type = FF_PIXEL_PACKED;
++  pix_fmt_info[PIX_FMT_YUYV422].depth = 8;
++  pix_fmt_info[PIX_FMT_YUYV422].x_chroma_shift = 1;
++  pix_fmt_info[PIX_FMT_YUYV422].y_chroma_shift = 0;
++
++  pix_fmt_info[PIX_FMT_YUV410P].name = g_strdup ("yuv410p");
++  pix_fmt_info[PIX_FMT_YUV410P].nb_channels = 3;
++  pix_fmt_info[PIX_FMT_YUV410P].color_type = FF_COLOR_YUV;
++  pix_fmt_info[PIX_FMT_YUV410P].pixel_type = FF_PIXEL_PLANAR;
++  pix_fmt_info[PIX_FMT_YUV410P].depth = 8;
++  pix_fmt_info[PIX_FMT_YUV410P].x_chroma_shift = 2;
++  pix_fmt_info[PIX_FMT_YUV410P].y_chroma_shift = 2;
++
++  pix_fmt_info[PIX_FMT_YUV411P].name = g_strdup ("yuv411p");
++  pix_fmt_info[PIX_FMT_YUV411P].nb_channels = 3;
++  pix_fmt_info[PIX_FMT_YUV411P].color_type = FF_COLOR_YUV;
++  pix_fmt_info[PIX_FMT_YUV411P].pixel_type = FF_PIXEL_PLANAR;
++  pix_fmt_info[PIX_FMT_YUV411P].depth = 8;
++  pix_fmt_info[PIX_FMT_YUV411P].x_chroma_shift = 2;
++  pix_fmt_info[PIX_FMT_YUV411P].y_chroma_shift = 0;
++
++  /* JPEG YUV */
++  pix_fmt_info[PIX_FMT_YUVJ420P].name = g_strdup ("yuvj420p");
++  pix_fmt_info[PIX_FMT_YUVJ420P].nb_channels = 3;
++  pix_fmt_info[PIX_FMT_YUVJ420P].color_type = FF_COLOR_YUV_JPEG;
++  pix_fmt_info[PIX_FMT_YUVJ420P].pixel_type = FF_PIXEL_PLANAR;
++  pix_fmt_info[PIX_FMT_YUVJ420P].depth = 8;
++  pix_fmt_info[PIX_FMT_YUVJ420P].x_chroma_shift = 1;
++  pix_fmt_info[PIX_FMT_YUVJ420P].y_chroma_shift = 1;
++
++  pix_fmt_info[PIX_FMT_YUVJ422P].name = g_strdup ("yuvj422p");
++  pix_fmt_info[PIX_FMT_YUVJ422P].nb_channels = 3;
++  pix_fmt_info[PIX_FMT_YUVJ422P].color_type = FF_COLOR_YUV_JPEG;
++  pix_fmt_info[PIX_FMT_YUVJ422P].pixel_type = FF_PIXEL_PLANAR;
++  pix_fmt_info[PIX_FMT_YUVJ422P].depth = 8;
++  pix_fmt_info[PIX_FMT_YUVJ422P].x_chroma_shift = 1;
++  pix_fmt_info[PIX_FMT_YUVJ422P].y_chroma_shift = 0;
++
++  pix_fmt_info[PIX_FMT_YUVJ444P].name = g_strdup ("yuvj444p");
++  pix_fmt_info[PIX_FMT_YUVJ444P].nb_channels = 3;
++  pix_fmt_info[PIX_FMT_YUVJ444P].color_type = FF_COLOR_YUV_JPEG;
++  pix_fmt_info[PIX_FMT_YUVJ444P].pixel_type = FF_PIXEL_PLANAR;
++  pix_fmt_info[PIX_FMT_YUVJ444P].depth = 8;
++  pix_fmt_info[PIX_FMT_YUVJ444P].x_chroma_shift = 0;
++  pix_fmt_info[PIX_FMT_YUVJ444P].y_chroma_shift = 0;
++
++  /* RGB formats */
++  pix_fmt_info[PIX_FMT_RGB24].name = g_strdup ("rgb24");
++  pix_fmt_info[PIX_FMT_RGB24].nb_channels = 3;
++  pix_fmt_info[PIX_FMT_RGB24].color_type = FF_COLOR_RGB;
++  pix_fmt_info[PIX_FMT_RGB24].pixel_type = FF_PIXEL_PACKED;
++  pix_fmt_info[PIX_FMT_RGB24].depth = 8;
++  pix_fmt_info[PIX_FMT_RGB24].x_chroma_shift = 0;
++  pix_fmt_info[PIX_FMT_RGB24].y_chroma_shift = 0;
++
++  pix_fmt_info[PIX_FMT_BGR24].name = g_strdup ("bgr24");
++  pix_fmt_info[PIX_FMT_BGR24].nb_channels = 3;
++  pix_fmt_info[PIX_FMT_BGR24].color_type = FF_COLOR_RGB;
++  pix_fmt_info[PIX_FMT_BGR24].pixel_type = FF_PIXEL_PACKED;
++  pix_fmt_info[PIX_FMT_BGR24].depth = 8;
++  pix_fmt_info[PIX_FMT_BGR24].x_chroma_shift = 0;
++  pix_fmt_info[PIX_FMT_BGR24].y_chroma_shift = 0;
++
++  pix_fmt_info[PIX_FMT_RGB32].name = g_strdup ("rgba32");
++  pix_fmt_info[PIX_FMT_RGB32].nb_channels = 4;
++  pix_fmt_info[PIX_FMT_RGB32].is_alpha = 1;
++  pix_fmt_info[PIX_FMT_RGB32].color_type = FF_COLOR_RGB;
++  pix_fmt_info[PIX_FMT_RGB32].pixel_type = FF_PIXEL_PACKED;
++  pix_fmt_info[PIX_FMT_RGB32].depth = 8;
++  pix_fmt_info[PIX_FMT_RGB32].x_chroma_shift = 0;
++  pix_fmt_info[PIX_FMT_RGB32].y_chroma_shift = 0;
++
++  pix_fmt_info[PIX_FMT_RGB565].name = g_strdup ("rgb565");
++  pix_fmt_info[PIX_FMT_RGB565].nb_channels = 3;
++  pix_fmt_info[PIX_FMT_RGB565].color_type = FF_COLOR_RGB;
++  pix_fmt_info[PIX_FMT_RGB565].pixel_type = FF_PIXEL_PACKED;
++  pix_fmt_info[PIX_FMT_RGB565].depth = 5;
++  pix_fmt_info[PIX_FMT_RGB565].x_chroma_shift = 0;
++  pix_fmt_info[PIX_FMT_RGB565].y_chroma_shift = 0;
++
++  pix_fmt_info[PIX_FMT_RGB555].name = g_strdup ("rgb555");
++  pix_fmt_info[PIX_FMT_RGB555].nb_channels = 4;
++  pix_fmt_info[PIX_FMT_RGB555].is_alpha = 1;
++  pix_fmt_info[PIX_FMT_RGB555].color_type = FF_COLOR_RGB;
++  pix_fmt_info[PIX_FMT_RGB555].pixel_type = FF_PIXEL_PACKED;
++  pix_fmt_info[PIX_FMT_RGB555].depth = 5;
++  pix_fmt_info[PIX_FMT_RGB555].x_chroma_shift = 0;
++  pix_fmt_info[PIX_FMT_RGB555].y_chroma_shift = 0;
++
++  /* gray / mono formats */
++  pix_fmt_info[PIX_FMT_GRAY8].name = g_strdup ("gray");
++  pix_fmt_info[PIX_FMT_GRAY8].nb_channels = 1;
++  pix_fmt_info[PIX_FMT_GRAY8].color_type = FF_COLOR_GRAY;
++  pix_fmt_info[PIX_FMT_GRAY8].pixel_type = FF_PIXEL_PLANAR;
++  pix_fmt_info[PIX_FMT_GRAY8].depth = 8;
++
++  pix_fmt_info[PIX_FMT_MONOWHITE].name = g_strdup ("monow");
++  pix_fmt_info[PIX_FMT_MONOWHITE].nb_channels = 1;
++  pix_fmt_info[PIX_FMT_MONOWHITE].color_type = FF_COLOR_GRAY;
++  pix_fmt_info[PIX_FMT_MONOWHITE].pixel_type = FF_PIXEL_PLANAR;
++  pix_fmt_info[PIX_FMT_MONOWHITE].depth = 1;
++
++  pix_fmt_info[PIX_FMT_MONOBLACK].name = g_strdup ("monob");
++  pix_fmt_info[PIX_FMT_MONOBLACK].nb_channels = 1;
++  pix_fmt_info[PIX_FMT_MONOBLACK].color_type = FF_COLOR_GRAY;
++  pix_fmt_info[PIX_FMT_MONOBLACK].pixel_type = FF_PIXEL_PLANAR;
++  pix_fmt_info[PIX_FMT_MONOBLACK].depth = 1;
++
++  /* paletted formats */
++  pix_fmt_info[PIX_FMT_PAL8].name = g_strdup ("pal8");
++  pix_fmt_info[PIX_FMT_PAL8].nb_channels = 4;
++  pix_fmt_info[PIX_FMT_PAL8].is_alpha = 1;
++  pix_fmt_info[PIX_FMT_PAL8].color_type = FF_COLOR_RGB;
++  pix_fmt_info[PIX_FMT_PAL8].pixel_type = FF_PIXEL_PALETTE;
++  pix_fmt_info[PIX_FMT_PAL8].depth = 8;
++
++  pix_fmt_info[PIX_FMT_YUVA420P].name = g_strdup ("yuva420p");
++  pix_fmt_info[PIX_FMT_YUVA420P].nb_channels = 4;
++  pix_fmt_info[PIX_FMT_YUVA420P].is_alpha = 1;
++  pix_fmt_info[PIX_FMT_YUVA420P].color_type = FF_COLOR_YUV;
++  pix_fmt_info[PIX_FMT_YUVA420P].pixel_type = FF_PIXEL_PLANAR;
++  pix_fmt_info[PIX_FMT_YUVA420P].depth = 8,
++      pix_fmt_info[PIX_FMT_YUVA420P].x_chroma_shift = 1,
++      pix_fmt_info[PIX_FMT_YUVA420P].y_chroma_shift = 1;
++};
++
++int
++gst_ffmpeg_avpicture_get_size (int pix_fmt, int width, int height)
++{
++  AVPicture dummy_pict;
++
++  return gst_ffmpeg_avpicture_fill (&dummy_pict, NULL, pix_fmt, width, height);
++}
++
++#define GEN_MASK(x) ((1<<(x))-1)
++#define ROUND_UP_X(v,x) (((v) + GEN_MASK(x)) & ~GEN_MASK(x))
++#define ROUND_UP_2(x) ROUND_UP_X (x, 1)
++#define ROUND_UP_4(x) ROUND_UP_X (x, 2)
++#define ROUND_UP_8(x) ROUND_UP_X (x, 3)
++#define DIV_ROUND_UP_X(v,x) (((v) + GEN_MASK(x)) >> (x))
++
++int
++gst_ffmpeg_avpicture_fill (AVPicture * picture,
++    uint8_t * ptr, enum PixelFormat pix_fmt, int width, int height)
++{
++  int size, w2, h2, size2;
++  int stride, stride2;
++  PixFmtInfo *pinfo;
++
++  pinfo = &pix_fmt_info[pix_fmt];
++
++  switch (pix_fmt) {
++    case PIX_FMT_YUV420P:
++    case PIX_FMT_YUV422P:
++    case PIX_FMT_YUV444P:
++    case PIX_FMT_YUV410P:
++    case PIX_FMT_YUV411P:
++    case PIX_FMT_YUVJ420P:
++    case PIX_FMT_YUVJ422P:
++    case PIX_FMT_YUVJ444P:
++      stride = ROUND_UP_4 (width);
++      h2 = ROUND_UP_X (height, pinfo->y_chroma_shift);
++      size = stride * h2;
++      w2 = DIV_ROUND_UP_X (width, pinfo->x_chroma_shift);
++      stride2 = ROUND_UP_4 (w2);
++      h2 = DIV_ROUND_UP_X (height, pinfo->y_chroma_shift);
++      size2 = stride2 * h2;
++      picture->data[0] = ptr;
++      picture->data[1] = picture->data[0] + size;
++      picture->data[2] = picture->data[1] + size2;
++      picture->data[3] = NULL;
++      picture->linesize[0] = stride;
++      picture->linesize[1] = stride2;
++      picture->linesize[2] = stride2;
++      picture->linesize[3] = 0;
++      GST_DEBUG ("planes %d %d %d", 0, size, size + size2);
++      GST_DEBUG ("strides %d %d %d", stride, stride2, stride2);
++      return size + 2 * size2;
++    case PIX_FMT_YUVA420P:
++      stride = ROUND_UP_4 (width);
++      h2 = ROUND_UP_X (height, pinfo->y_chroma_shift);
++      size = stride * h2;
++      w2 = DIV_ROUND_UP_X (width, pinfo->x_chroma_shift);
++      stride2 = ROUND_UP_4 (w2);
++      h2 = DIV_ROUND_UP_X (height, pinfo->y_chroma_shift);
++      size2 = stride2 * h2;
++      picture->data[0] = ptr;
++      picture->data[1] = picture->data[0] + size;
++      picture->data[2] = picture->data[1] + size2;
++      picture->data[3] = picture->data[2] + size2;
++      picture->linesize[0] = stride;
++      picture->linesize[1] = stride2;
++      picture->linesize[2] = stride2;
++      picture->linesize[3] = stride;
++      GST_DEBUG ("planes %d %d %d %d", 0, size, size + size2, size + 2 * size2);
++      GST_DEBUG ("strides %d %d %d %d", stride, stride2, stride2, stride);
++      return 2 * size + 2 * size2;
++    case PIX_FMT_RGB24:
++    case PIX_FMT_BGR24:
++      stride = ROUND_UP_4 (width * 3);
++      size = stride * height;
++      picture->data[0] = ptr;
++      picture->data[1] = NULL;
++      picture->data[2] = NULL;
++      picture->data[3] = NULL;
++      picture->linesize[0] = stride;
++      picture->linesize[1] = 0;
++      picture->linesize[2] = 0;
++      picture->linesize[3] = 0;
++      return size;
++      /*case PIX_FMT_AYUV4444:
++         case PIX_FMT_BGR32:
++         case PIX_FMT_BGRA32:
++         case PIX_FMT_RGB32: */
++    case PIX_FMT_RGB32:
++      stride = width * 4;
++      size = stride * height;
++      picture->data[0] = ptr;
++      picture->data[1] = NULL;
++      picture->data[2] = NULL;
++      picture->data[3] = NULL;
++      picture->linesize[0] = stride;
++      picture->linesize[1] = 0;
++      picture->linesize[2] = 0;
++      picture->linesize[3] = 0;
++      return size;
++    case PIX_FMT_RGB555:
++    case PIX_FMT_RGB565:
++    case PIX_FMT_YUYV422:
++    case PIX_FMT_UYVY422:
++      stride = ROUND_UP_4 (width * 2);
++      size = stride * height;
++      picture->data[0] = ptr;
++      picture->data[1] = NULL;
++      picture->data[2] = NULL;
++      picture->data[3] = NULL;
++      picture->linesize[0] = stride;
++      picture->linesize[1] = 0;
++      picture->linesize[2] = 0;
++      picture->linesize[3] = 0;
++      return size;
++    case PIX_FMT_UYYVYY411:
++      /* FIXME, probably not the right stride */
++      stride = ROUND_UP_4 (width);
++      size = stride * height;
++      picture->data[0] = ptr;
++      picture->data[1] = NULL;
++      picture->data[2] = NULL;
++      picture->data[3] = NULL;
++      picture->linesize[0] = width + width / 2;
++      picture->linesize[1] = 0;
++      picture->linesize[2] = 0;
++      picture->linesize[3] = 0;
++      return size + size / 2;
++    case PIX_FMT_GRAY8:
++      stride = ROUND_UP_4 (width);
++      size = stride * height;
++      picture->data[0] = ptr;
++      picture->data[1] = NULL;
++      picture->data[2] = NULL;
++      picture->data[3] = NULL;
++      picture->linesize[0] = stride;
++      picture->linesize[1] = 0;
++      picture->linesize[2] = 0;
++      picture->linesize[3] = 0;
++      return size;
++    case PIX_FMT_MONOWHITE:
++    case PIX_FMT_MONOBLACK:
++      stride = ROUND_UP_4 ((width + 7) >> 3);
++      size = stride * height;
++      picture->data[0] = ptr;
++      picture->data[1] = NULL;
++      picture->data[2] = NULL;
++      picture->data[3] = NULL;
++      picture->linesize[0] = stride;
++      picture->linesize[1] = 0;
++      picture->linesize[2] = 0;
++      picture->linesize[3] = 0;
++      return size;
++    case PIX_FMT_PAL8:
++      /* already forced to be with stride, so same result as other function */
++      stride = ROUND_UP_4 (width);
++      size = stride * height;
++      picture->data[0] = ptr;
++      picture->data[1] = ptr + size;    /* palette is stored here as 256 32 bit words */
++      picture->data[2] = NULL;
++      picture->data[3] = NULL;
++      picture->linesize[0] = stride;
++      picture->linesize[1] = 4;
++      picture->linesize[2] = 0;
++      picture->linesize[3] = 0;
++      return size + 256 * 4;
++    default:
++      picture->data[0] = NULL;
++      picture->data[1] = NULL;
++      picture->data[2] = NULL;
++      picture->data[3] = NULL;
++      return -1;
++  }
++
++  return 0;
++}
++
++/* Create a GstBuffer of the requested size and caps.
++ * The memory will be allocated by ffmpeg, making sure it's properly aligned
++ * for any processing. */
++
++GstBuffer *
++new_aligned_buffer (gint size, GstCaps * caps)
++{
++  GstBuffer *buf;
++
++  buf = gst_buffer_new ();
++  GST_BUFFER_DATA (buf) = GST_BUFFER_MALLOCDATA (buf) = av_malloc (size);
++  GST_BUFFER_SIZE (buf) = size;
++  GST_BUFFER_FREE_FUNC (buf) = av_free;
++  if (caps)
++    gst_buffer_set_caps (buf, caps);
++
++  return buf;
++}
++
++int
++gst_ffmpeg_auto_max_threads (void)
++{
++  static gsize n_threads = 0;
++  if (g_once_init_enter (&n_threads)) {
++    int n = 1;
++#if defined(_WIN32)
++    {
++      const char *s = getenv ("NUMBER_OF_PROCESSORS");
++      if (s) {
++        n = atoi (s);
++      }
++    }
++#elif defined(__APPLE__)
++    {
++      int mib[] = { CTL_HW, HW_NCPU };
++      size_t dataSize = sizeof (int);
++
++      if (sysctl (mib, 2, &n_threads, &dataSize, NULL, 0)) {
++        n = 1;
++      }
++    }
++#else
++    n = sysconf (_SC_NPROCESSORS_CONF);
++#endif
++    if (n < 1)
++      n = 1;
++
++    g_once_init_leave (&n_threads, n);
++  }
++
++  return (int) (n_threads);
++}
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegutils.h gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegutils.h
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegutils.h	2011-11-02 14:04:05.000000000 +0100
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegutils.h	2014-08-08 15:34:04.007874626 +0200
+@@ -23,6 +23,7 @@
+ #ifdef HAVE_FFMPEG_UNINSTALLED
+ #include <avcodec.h>
+ #else
++#include <libavutil/mathematics.h>
+ #include <libavcodec/avcodec.h>
+ #endif
+ #include <gst/gst.h>
+@@ -87,7 +88,7 @@
+ gst_ffmpeg_get_codecid_longname (enum CodecID codec_id);
+ 
+ gint
+-av_smp_format_depth(enum SampleFormat smp_fmt);
++av_smp_format_depth(enum AVSampleFormat smp_fmt);
+ 
+ GstBuffer *
+ new_aligned_buffer (gint size, GstCaps * caps);
+diff -uNr gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegutils.h.orig gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegutils.h.orig
+--- gst-ffmpeg-0.10.13.orig/ext/ffmpeg/gstffmpegutils.h.orig	1970-01-01 01:00:00.000000000 +0100
++++ gst-ffmpeg-0.10.13/ext/ffmpeg/gstffmpegutils.h.orig	2014-08-08 15:26:38.473858652 +0200
+@@ -0,0 +1,95 @@
++/* GStreamer
++ * Copyright (C) <2009> Edward Hervey <bilboed@bilboed.com>
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Library General Public
++ * License as published by the Free Software Foundation; either
++ * version 2 of the License, or (at your option) any later version.
++ *
++ * This library 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
++ * Library General Public License for more details.
++ *
++ * You should have received a copy of the GNU Library General Public
++ * License along with this library; if not, write to the
++ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
++ * Boston, MA 02111-1307, USA.
++ */
++
++#ifndef __GST_FFMPEG_UTILS_H__
++#define __GST_FFMPEG_UTILS_H__
++
++#ifdef HAVE_FFMPEG_UNINSTALLED
++#include <avcodec.h>
++#else
++#include <libavcodec/avcodec.h>
++#endif
++#include <gst/gst.h>
++
++/*
++ *Get the size of an picture
++ */
++int
++gst_ffmpeg_avpicture_get_size (int pix_fmt, int width, int height);
++
++/*
++ * Fill in pointers in an AVPicture, aligned by 4 (required by X).
++ */
++
++int
++gst_ffmpeg_avpicture_fill (AVPicture * picture,
++                           uint8_t *   ptr,
++                           enum PixelFormat pix_fmt,
++                           int         width,
++                           int         height);
++
++/*
++ * Convert from/to a GStreamer <-> FFMpeg timestamp.
++ */
++static inline guint64
++gst_ffmpeg_time_ff_to_gst (gint64 pts, AVRational base)
++{
++  guint64 out;
++
++  if (pts == AV_NOPTS_VALUE){
++    out = GST_CLOCK_TIME_NONE;
++  } else {
++    AVRational bq = { 1, GST_SECOND };
++    out = av_rescale_q (pts, base, bq);
++  }
++
++  return out;
++}
++
++static inline gint64
++gst_ffmpeg_time_gst_to_ff (guint64 time, AVRational base)
++{
++  gint64 out;
++
++  if (!GST_CLOCK_TIME_IS_VALID (time) || base.num == 0) {
++    out = AV_NOPTS_VALUE;
++  } else {
++    AVRational bq = { 1, GST_SECOND };
++    out = av_rescale_q (time, bq, base);
++  }
++
++  return out;
++}
++
++void 
++gst_ffmpeg_init_pix_fmt_info(void);
++
++int
++gst_ffmpeg_auto_max_threads(void);
++
++G_CONST_RETURN gchar *
++gst_ffmpeg_get_codecid_longname (enum CodecID codec_id);
++
++gint
++av_smp_format_depth(enum AVSampleFormat smp_fmt);
++
++GstBuffer *
++new_aligned_buffer (gint size, GstCaps * caps);
++
++#endif /* __GST_FFMPEG_UTILS_H__ */
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/libav_e500mc.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/libav_e500mc.patch
new file mode 100644
index 0000000..eba4988
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/libav_e500mc.patch
@@ -0,0 +1,21 @@
+diff --git a/gst-libs/ext/libav/configure b/gst-libs/ext/libav/configure
+index 8473069..4f74952 100755
+--- a/gst-libs/ext/libav/configure
++++ b/gst-libs/ext/libav/configure
+Fix gst-ffmpeg build issues for libav on e500mc (fsl-p4080)
+
+Upstream-Status: Backport
+
+Signed-off-by: Yao Zhao <yao.zhao@windriver.com>
+
+@@ -2210,6 +2210,10 @@ elif enabled ppc; then
+             cpuflags="-mcpu=cell"
+             enable ldbrx
+         ;;
++        e500mc)
++            cpuflags="-mcpu=e500mc"
++            disable altivec
++        ;;
+         e500v2)
+             cpuflags="-mcpu=8548 -mhard-float -mfloat-gprs=double"
+             disable altivec
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/libav_e5500.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/libav_e5500.patch
new file mode 100644
index 0000000..d9ea2c2
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/libav_e5500.patch
@@ -0,0 +1,19 @@
+libav: Add configs for ppc e5500
+
+Upstream-Status: Pending
+
+Signed-off-by: Jesse Zhang <sen.zhang@windriver.com>
+
+--- gst-ffmpeg-0.10.13/gst-libs/ext/libav/configure	2013-06-20 05:18:36.073104964 -0400
++++ gst-ffmpeg-0.10.13/gst-libs/ext/libav/configure	2013-06-20 05:18:38.269104150 -0400
+@@ -2222,6 +2222,10 @@
+             cpuflags="-mcpu=8540 -mhard-float"
+             disable altivec
+         ;;
++        e5500)
++            cpuflags="-mcpu=e5500 -mhard-float"
++            disable altivec
++        ;;
+     esac
+ 
+ elif enabled x86; then
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/lower-rank.diff b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/lower-rank.diff
new file mode 100644
index 0000000..5f08afe
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg-0.10.13/lower-rank.diff
@@ -0,0 +1,16 @@
+Lower the rank of ffmpeg plugin so codecs that hook into accelerated pieces (e.g. dsp or hw engines) can get picked over this
+Derived from OE by Dongxiao Xu <dongxiao.xu@intel.com>
+
+Upstream-Status: Inappropriate [embedded specific]
+
+--- /tmp/gstffmpegdec.c	2009-03-05 09:31:15.000000000 +0100
++++ gst-ffmpeg-0.10.6/ext/ffmpeg/gstffmpegdec.c	2009-03-05 09:33:09.000000000 +0100
+@@ -2588,7 +2588,7 @@
+       case CODEC_ID_MSMPEG4V3:
+       case CODEC_ID_H264:
+       case CODEC_ID_COOK:
+-        rank = GST_RANK_PRIMARY;
++        rank = GST_RANK_SECONDARY;
+         break;
+       case CODEC_ID_DVVIDEO:
+         /* we have a good dv decoder, fast on both ppc as well as x86. they say
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg_0.10.13.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg_0.10.13.bb
new file mode 100644
index 0000000..891b10c
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-ffmpeg_0.10.13.bb
@@ -0,0 +1,103 @@
+SUMMARY = "FFmpeg-based GStreamer plug-in"
+SECTION = "multimedia"
+LICENSE = "GPLv2+ & LGPLv2+ & ( (GPLv2+ & LGPLv2.1+) | (GPLv3+ & LGPLv3+) )"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+                    file://ext/libpostproc/gstpostproc.c;beginline=1;endline=18;md5=5896e445e41681324381f5869ee33d38 \
+                    file://COPYING.LIB;md5=55ca817ccb7d5b5b66355690e9abc605 \
+                    file://ext/ffmpeg/gstffmpeg.h;beginline=1;endline=18;md5=ff65467b0c53cdfa98d0684c1bc240a9 \
+                    file://gst-libs/ext/libav/LICENSE;md5=abc3b8cb02856aa7823bbbd162d16232 \
+                    file://gst-libs/ext/libav/COPYING.GPLv2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \
+                    file://gst-libs/ext/libav/COPYING.GPLv3;md5=d32239bcb673463ab874e80d47fae504 \
+                    file://gst-libs/ext/libav/COPYING.LGPLv2.1;md5=e344c8fa836c3a41c4cbd79d7bd3a379 \
+                    file://gst-libs/ext/libav/COPYING.LGPLv3;md5=e6a600fd5e1d9cbde2d983680233ad02"
+LICENSE_FLAGS = "commercial"
+HOMEPAGE = "http://www.gstreamer.net/"
+DEPENDS = "gstreamer gst-plugins-base zlib bzip2 yasm-native libpostproc"
+
+inherit autotools-brokensep pkgconfig
+
+SRC_URI = "http://gstreamer.freedesktop.org/src/${BPN}/${BPN}-${PV}.tar.bz2 \
+           file://lower-rank.diff \
+           file://configure-fix.patch \
+           file://h264_qpel_mmx.patch \
+           file://libav_e500mc.patch \
+           file://libav_e5500.patch \
+           file://gst-ffmpeg-CVE-2013-3674.patch \
+           file://0001-avformat-mpegtsenc-Check-data-array-size-in-mpegts_w.patch \
+           file://0001-vqavideo-check-chunk-sizes-before-reading-chunks.patch \
+           file://0001-avcodec-msrle-use-av_image_get_linesize-to-calculate.patch \
+           file://0001-huffyuvdec-Skip-len-0-cases.patch \
+           file://0001-huffyuvdec-Check-init_vlc-return-codes.patch \
+           file://0001-alsdec-check-block-length.patch \
+           file://0001-pgssubdec-check-RLE-size-before-copying.-Fix-out-of-.patch \
+           file://0001-atrac3dec-Check-coding-mode-against-channels.patch \
+           file://0001-eamad-fix-out-of-array-accesses.patch \
+           file://0001-mjpegdec-check-SE.patch \
+           file://0001-alac-fix-nb_samples-order-case.patch \
+           file://0001-h264-correct-ref-count-check-and-limit-fix-out-of-ar.patch \
+           file://0001-roqvideodec-check-dimensions-validity.patch \
+           file://0001-aacdec-check-channel-count.patch \
+           file://0001-pngdec-filter-dont-access-out-of-array-elements-at-t.patch \
+           file://0001-error_concealment-Check-that-the-picture-is-not-in-a.patch \
+           file://0001-vp3-fix-oob-read-for-negative-tokens-and-memleaks-on.patch \
+           file://0001-vp3-Copy-all-3-frames-for-thread-updates.patch \
+           file://0001-h264_sei-Fix-infinite-loop.patch \
+           file://0001-avcodec-parser-reset-indexes-on-realloc-failure.patch \
+           file://0001-avcodec-rpza-Perform-pointer-advance-and-checks-befo.patch \
+           file://gst-ffmpeg-CVE-2013-0855.patch \
+           file://0001-qdm2dec-fix-buffer-overflow.patch \
+           file://0001-smackerdec-Check-that-the-last-indexes-are-within-th.patch \
+           file://0001-avcodec-dsputil-fix-signedness-in-sizeof-comparissio.patch \
+           file://0001-error-concealment-initialize-block-index.patch \
+           file://0001-qdm2-check-array-index-before-use-fix-out-of-array-a.patch \
+           file://0001-lavf-compute-probe-buffer-size-more-reliably.patch \
+           file://0001-ffserver-set-oformat.patch \
+           file://0001-h264-set-parameters-from-SPS-whenever-it-changes.patch \
+           file://0001-h264-skip-error-concealment-when-SPS-and-slices-are-.patch \
+           file://0001-avcodec-smc-fix-off-by-1-error.patch \
+           file://0002-avcodec-mjpegdec-check-bits-per-pixel-for-changes-si.patch \
+           file://libav-9.patch \
+           file://gst-ffmpeg-fix-CVE-2011-4352.patch \
+           file://gst-ffmpeg-fix-CVE-2014-7933.patch \
+           file://gst-ffmpeg-fix-CVE-2014-8542.patch \
+           file://gst-ffmpeg-fix-CVE-2014-8543.patch \
+           file://gst-ffmpeg-fix-CVE-2014-8544.patch \
+           file://gst-ffmpeg-fix-CVE-2014-8545.patch \
+           file://gst-ffmpeg-fix-CVE-2014-8546.patch \
+           file://gst-ffmpeg-fix-CVE-2014-8547.patch \
+           file://gst-ffmpeg-fix-CVE-2014-9318.patch \
+           file://gst-ffmpeg-fix-CVE-2014-9603.patch \
+"
+
+SRC_URI[md5sum] = "7f5beacaf1312db2db30a026b36888c4"
+SRC_URI[sha256sum] = "76fca05b08e00134e3cb92fa347507f42cbd48ddb08ed3343a912def187fbb62"
+
+PR = "r8"
+
+GSTREAMER_DEBUG ?= "--disable-debug"
+
+FFMPEG_EXTRA_CONFIGURE = "--with-ffmpeg-extra-configure"
+# pass --cpu for powerpc. get cpu name by stripping "ppc" or "ppc64"
+# from DEFAULTTUNE
+FFMPEG_CPU_powerpc = "--cpu=${@d.getVar('DEFAULTTUNE', False)[3:]}"
+FFMPEG_CPU_powerpc64 = "--cpu=${@d.getVar('DEFAULTTUNE', False)[5:]}"
+FFMPEG_EXTRA_CONFIGURE_COMMON_ARG = "--target-os=linux ${FFMPEG_CPU} \
+  --cc='${CC}' --as='${CC}' --ld='${CC}' --nm='${NM}' --ar='${AR}' \
+  --ranlib='${RANLIB}' \
+  ${GSTREAMER_DEBUG}"
+FFMPEG_EXTRA_CONFIGURE_COMMON = \
+'${FFMPEG_EXTRA_CONFIGURE}="${FFMPEG_EXTRA_CONFIGURE_COMMON_ARG}"'
+
+EXTRA_OECONF = "${FFMPEG_EXTRA_CONFIGURE_COMMON}"
+
+PACKAGECONFIG ??= "external-libav"
+PACKAGECONFIG[external-libav] = "--with-system-ffmpeg,,libav"
+PACKAGECONFIG[orc] = "--enable-orc,--disable-orc,orc"
+
+FILES_${PN} += "${libdir}/gstreamer-0.10/*.so"
+FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug"
+FILES_${PN}-dev += "${libdir}/gstreamer-0.10/*.la"
+FILES_${PN}-staticdev += "${libdir}/gstreamer-0.10/*.a"
+
+# http://errors.yoctoproject.org/Errors/Details/40736/
+PNBLACKLIST[gst-ffmpeg] ?= "Not compatible with currently used ffmpeg 3"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo-mp3_0.10.31.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo-mp3_0.10.31.bb
new file mode 100644
index 0000000..1e2cd2a
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo-mp3_0.10.31.bb
@@ -0,0 +1,14 @@
+require gst-fluendo.inc
+
+SUMMARY = "Fluendo closed-format mp3 GStreamer plug-in"
+LICENSE = "MIT"
+LIC_FILES_CHKSUM = "file://COPYING;md5=259a43dd1c9854b71fc396f74699f4d2"
+LICENSE_FLAGS = "commercial"
+
+GSTREAMER_DEBUG ?= "--disable-debug"
+EXTRA_OECONF += "${GSTREAMER_DEBUG} --with-gstreamer-api=0.10"
+
+acpaths = "-I ${S}/common/m4 -I ${S}/m4"
+
+SRC_URI[md5sum] = "adf0390f3416bb72f91c358528be0c38"
+SRC_URI[sha256sum] = "dae0d0559a4e159c0dd92b7e18de059a5783f8d038904c7de4ca6393f7d55c7d"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo-mpegdemux_0.10.85.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo-mpegdemux_0.10.85.bb
new file mode 100644
index 0000000..7bba41a
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo-mpegdemux_0.10.85.bb
@@ -0,0 +1,12 @@
+require gst-fluendo.inc
+
+SUMMARY = "Fluendo MPEG Transport Stream and Program Stream demuxer for GStreamer"
+LICENSE = "MPLv1.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=be282f1c3cc9a98cc0dc5c2b25dfc510 \
+                    file://src/gstmpegdemux.h;beginline=1;endline=19;md5=a9e90033f59897b91664d9f2a2ff01dd"
+LICENSE_FLAGS = "commercial"
+
+acpaths = "-I ${S}/common/m4 -I ${S}/m4"
+
+SRC_URI[md5sum] = "7c4fb993f80b9ae631b11897733f0970"
+SRC_URI[sha256sum] = "df04c91cc8e5d9a892c2492ed989974b4547beaa2a3647649e85113317897424"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo.inc b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo.inc
new file mode 100644
index 0000000..7a77d62
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-fluendo.inc
@@ -0,0 +1,14 @@
+SUMMARY = "Fluendo closed-format GStreamer plug-in"
+SECTION = "multimedia"
+HOMEPAGE = "https://core.fluendo.com/gstreamer/trac/wiki"
+DEPENDS = "gstreamer gst-plugins-base zlib"
+
+inherit autotools pkgconfig
+
+SRC_URI = "http://core.fluendo.com/gstreamer/src/${BPN}/${BPN}-${PV}.tar.bz2"
+
+FILES_${PN} += "${libdir}/gstreamer-0.10/*.so"
+FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug"
+FILES_${PN}-dev += "${libdir}/gstreamer-0.10/*.la ${libdir}/gstreamer-0.10/*.a"
+
+EXTRA_OECONF = "--disable-valgrind"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-meta-base_0.10.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-meta-base_0.10.bb
new file mode 100644
index 0000000..039abe1
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-meta-base_0.10.bb
@@ -0,0 +1,73 @@
+SUMMARY = "GStreamer package groups"
+LICENSE = "MIT"
+
+COMMERCIAL_PLUGINS = "${COMMERCIAL_AUDIO_PLUGINS} ${COMMERCIAL_VIDEO_PLUGINS}"
+DEPENDS_UGLY="${@'gst-plugins-ugly' if 'ugly' in COMMERCIAL_PLUGINS.split('-') else ''}"
+DEPENDS_BAD="${@'gst-plugins-bad' if 'bad' in COMMERCIAL_PLUGINS.split('-') else ''}"
+DEPENDS = "gstreamer gst-plugins-base gst-plugins-good ${DEPENDS_UGLY} ${DEPENDS_BAD}"
+
+LIC_FILES_CHKSUM = "file://${COREBASE}/LICENSE;md5=4d92cd373abda3937c2bc47fbc49d690 \
+                    file://${COREBASE}/meta/COPYING.MIT;md5=3da9cfbcb788c80a0384361b4de20420"
+
+
+PR = "r13"
+
+PACKAGES = "\
+    gst-meta-base \
+    gst-meta-x11-base \
+    gst-meta-audio \
+    gst-meta-debug \
+    gst-meta-video"
+
+ALLOW_EMPTY_gst-meta-base = "1"
+ALLOW_EMPTY_gst-meta-x11-base = "1"
+ALLOW_EMPTY_gst-meta-audio = "1"
+ALLOW_EMPTY_gst-meta-debug = "1"
+ALLOW_EMPTY_gst-meta-video = "1"
+
+RDEPENDS_gst-meta-base = "\
+    ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'gst-meta-x11-base', '', d)} \
+    gstreamer \
+    gst-plugins-base-playbin \
+    gst-plugins-base-decodebin \
+    gst-plugins-base-decodebin2 \
+    gst-plugins-base-gio \
+    gst-plugins-base-alsa \
+    gst-plugins-base-volume \
+    gst-plugins-base-audioconvert \
+    gst-plugins-base-audioresample \
+    gst-plugins-base-typefindfunctions \
+    gst-plugins-base-videoscale \
+    gst-plugins-base-ffmpegcolorspace \
+    gst-plugins-good-autodetect \
+    gst-plugins-good-souphttpsrc"
+
+RRECOMMENDS_gst-meta-x11-base = "\
+    gst-plugins-base-ximagesink \
+    gst-plugins-base-xvimagesink"
+
+RDEPENDS_gst-meta-audio = "\
+    gst-meta-base \
+    gst-plugins-base-vorbis \
+    gst-plugins-base-ogg \
+    gst-plugins-good-wavparse \
+    gst-plugins-good-flac \
+    ${COMMERCIAL_AUDIO_PLUGINS}"
+
+
+RDEPENDS_gst-meta-debug = "\
+    gst-meta-base \
+    gst-plugins-good-debug \
+    gst-plugins-base-audiotestsrc \
+    gst-plugins-base-videotestsrc"
+
+
+RDEPENDS_gst-meta-video = "\
+    gst-meta-base \
+    gst-plugins-good-avi \
+    gst-plugins-good-matroska \
+    gst-plugins-base-theora \
+    ${COMMERCIAL_VIDEO_PLUGINS}"
+
+RRECOMMENDS_gst-meta-video = "\
+    gst-meta-audio"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax/gcc_4.6.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax/gcc_4.6.patch
new file mode 100644
index 0000000..57a63b5
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax/gcc_4.6.patch
@@ -0,0 +1,18 @@
+Upstream-Status: Pending
+
+Signed-off-by: Saul Wold <sgw@linux.intel.com>
+
+Index: gst-openmax-0.10.1/omx/gstomx.c
+===================================================================
+--- gst-openmax-0.10.1.orig/omx/gstomx.c	2010-09-30 18:00:24.000000000 -0700
++++ gst-openmax-0.10.1/omx/gstomx.c	2011-05-17 23:08:08.794535872 -0700
+@@ -238,7 +238,8 @@
+     const gchar *element_name = gst_structure_nth_field_name (element_table, i);
+     GstStructure *element = get_element_entry (element_name);
+     const gchar *type_name, *parent_type_name;
+-    const gchar *component_name, *component_role, *library_name;
++    const gchar *component_name, *library_name;
++    const gchar __attribute__((__unused__)) *component_role;
+     GType type;
+     gint rank;
+ 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax/ptr-array.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax/ptr-array.patch
new file mode 100644
index 0000000..5965bba
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax/ptr-array.patch
@@ -0,0 +1,46 @@
+Rename static functions that use GLib naming conventions as one of them
+(g_ptr_array_insert) has now been added to GLib.
+
+Upstream-Status: Pending
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+
+diff --git a/omx/gstomx_util.c b/omx/gstomx_util.c
+index 423e441..579dbf5 100644
+--- a/omx/gstomx_util.c
++++ b/omx/gstomx_util.c
+@@ -85,7 +85,7 @@ static gboolean initialized;
+  */
+ 
+ static void
+-g_ptr_array_clear (GPtrArray * array)
++omx_g_ptr_array_clear (GPtrArray * array)
+ {
+   guint index;
+   for (index = 0; index < array->len; index++)
+@@ -93,7 +93,7 @@ g_ptr_array_clear (GPtrArray * array)
+ }
+ 
+ static void
+-g_ptr_array_insert (GPtrArray * array, guint index, gpointer data)
++omx_g_ptr_array_insert (GPtrArray * array, guint index, gpointer data)
+ {
+   if (index + 1 > array->len) {
+     g_ptr_array_set_size (array, index + 1);
+@@ -394,7 +394,7 @@ g_omx_core_unload (GOmxCore * core)
+   }
+ 
+   core_for_each_port (core, g_omx_port_free);
+-  g_ptr_array_clear (core->ports);
++  omx_g_ptr_array_clear (core->ports);
+ }
+ 
+ static inline GOmxPort *
+@@ -418,7 +418,7 @@ g_omx_core_new_port (GOmxCore * core, guint index)
+   }
+ 
+   port = g_omx_port_new (core, index);
+-  g_ptr_array_insert (core->ports, index, port);
++  omx_g_ptr_array_insert (core->ports, index, port);
+ 
+   return port;
+ }
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax_0.10.1.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax_0.10.1.bb
new file mode 100644
index 0000000..2e01579
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-openmax_0.10.1.bb
@@ -0,0 +1,35 @@
+SUMMARY = "GStreamer plug-in for communication with OpenMAX IL components"
+DESCRIPTION = "GstOpenMAX is a GStreamer plug-in that allows \
+communication with OpenMAX Integration Layer (IL) components. OpenMAX \
+IL is an industry standard that provides an abstraction layer for \
+computer graphics, video, and sound routines."
+HOMEPAGE = "http://freedesktop.org/wiki/GstOpenMAX"
+DEPENDS = "gstreamer"
+RDEPENDS_${PN} = "libomxil"
+LICENSE = "LGPLv2.1"
+LICENSE_FLAGS = "commercial"
+LIC_FILES_CHKSUM = "file://COPYING;md5=fbc093901857fcd118f065f900982c24 \
+                    file://util/sem.h;beginline=1;endline=20;md5=accce5550d5583b839b441a0623f09fc"
+
+SRC_URI = "http://gstreamer.freedesktop.org/src/gst-openmax/gst-openmax-${PV}.tar.bz2 \
+           file://gcc_4.6.patch \
+           file://ptr-array.patch \
+           "
+
+inherit autotools pkgconfig
+
+# Tell configure that this isn't a development snapshot so we don't want
+# -Werror (hopefully fixed in 0.10.2)
+export GST_CVS="no"
+
+EXTRA_OECONF += "--disable-valgrind"
+
+PR = "r4"
+
+FILES_${PN} += "${libdir}/gstreamer-0.10/libgstomx.so"
+FILES_${PN}-dev += "${libdir}/gstreamer-0.10/libgstomx.la"
+FILES_${PN}-staticdev += "${libdir}/gstreamer-0.10/libgstomx.a"
+FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug/"
+
+SRC_URI[md5sum] = "4d0370bfe99dea20918c84347abadb4e"
+SRC_URI[sha256sum] = "9074d5a0591995133d19cfb15144f19664f902c1623f996595695cf2c2070e1f"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-bad/buffer-overflow-mp4.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-bad/buffer-overflow-mp4.patch
new file mode 100644
index 0000000..235acda
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-bad/buffer-overflow-mp4.patch
@@ -0,0 +1,36 @@
+Description: Fix buffer overflow in mp4 parsing
+Author: Ralph Giles <giles@mozilla.com>
+---
+Backport patch from debian to fix CVE-2015-0797.
+https://sources.debian.net/data/main/g/gst-plugins-bad0.10/0.10.23-7.1+deb7u2/debian/patches/buffer-overflow-mp4.patch
+
+Upstream-Status: Backport
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+--- gst-plugins-bad0.10-0.10.23.orig/gst/videoparsers/gsth264parse.c
++++ gst-plugins-bad0.10-0.10.23/gst/videoparsers/gsth264parse.c
+@@ -384,6 +384,11 @@ gst_h264_parse_wrap_nal (GstH264Parse *
+ 
+   GST_DEBUG_OBJECT (h264parse, "nal length %d", size);
+ 
++  if (size > G_MAXUINT32 - nl) {
++    GST_ELEMENT_ERROR (h264parse, STREAM, FAILED, (NULL),
++        ("overflow in nal size"));
++    return NULL;
++  }
+   buf = gst_buffer_new_and_alloc (size + nl + 4);
+   if (format == GST_H264_PARSE_FORMAT_AVC) {
+     GST_WRITE_UINT32_BE (GST_BUFFER_DATA (buf), size << (32 - 8 * nl));
+@@ -452,6 +457,11 @@ gst_h264_parse_process_nal (GstH264Parse
+     GST_DEBUG_OBJECT (h264parse, "not processing nal size %u", nalu->size);
+     return;
+   }
++  if (G_UNLIKELY (nalu->size > 20 * 1024 * 1024)) {
++    GST_DEBUG_OBJECT (h264parse, "not processing nal size %u (too big)",
++        nalu->size);
++    return;
++  }
+ 
+   /* we have a peek as well */
+   nal_type = nalu->type;
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-bad_0.10.23.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-bad_0.10.23.bb
new file mode 100644
index 0000000..8aad0b7
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-bad_0.10.23.bb
@@ -0,0 +1,60 @@
+require gst-plugins.inc
+
+LICENSE = "GPLv2+ & LGPLv2+ & LGPLv2.1+ "
+LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \
+                    file://gst/tta/filters.h;beginline=12;endline=29;md5=629b0c7a665d155a6677778f4460ec06 \
+                    file://COPYING.LIB;md5=55ca817ccb7d5b5b66355690e9abc605 \
+                    file://gst/tta/crc32.h;beginline=12;endline=29;md5=71a904d99ce7ae0c1cf129891b98145c"
+
+DEPENDS += "gst-plugins-base"
+
+PR = "r4"
+
+SRC_URI += "file://buffer-overflow-mp4.patch"
+
+inherit gettext gsettings
+
+EXTRA_OECONF += "--disable-experimental \
+                 --disable-sdl --disable-cdaudio --disable-directfb \
+                 --disable-vdpau --disable-apexsink"
+
+PACKAGECONFIG ??= "bzip curl \
+                   ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'rsvg', '', d)}"
+
+PACKAGECONFIG[bzip] = "--enable-bz2,--disable-bz2,bzip2"
+PACKAGECONFIG[curl] = "--enable-curl,--disable-curl,curl"
+PACKAGECONFIG[rsvg] = "--enable-rsvg,--disable-rsvg,librsvg,"
+PACKAGECONFIG[orc] = "--enable-orc,--disable-orc,orc"
+PACKAGECONFIG[neon] = "--enable-neon,--disable-neon,neon"
+PACKAGECONFIG[mms] = "--enable-libmms,--disable-libmms,libmms"
+PACKAGECONFIG[cog] = "--enable-cog,--disable-cog,libpng"
+PACKAGECONFIG[faad] = "--enable-faad,--disable-faad,faad2"
+PACKAGECONFIG[jp2k] = "--enable-jp2k,--disable-jp2k,jasper"
+PACKAGECONFIG[modplug] = "--enable-modplug,--disable-modplug,libmodplug"
+PACKAGECONFIG[opus] = "--enable-opus,--disable-opus,libopus"
+PACKAGECONFIG[sndfile] = "--enable-sndfile,--disable-sndfile,libsndfile1"
+PACKAGECONFIG[vp8] = "--enable-vp8,--disable-vp8,libvpx"
+PACKAGECONFIG[ass] = "--enable-assrender,--disable-assrender,libass"
+PACKAGECONFIG[openal] = "--enable-openal,--disable-openal,openal-soft"
+PACKAGECONFIG[schro] = "--enable-schro,--disable-schro,schroedinger"
+PACKAGECONFIG[dc1394] = "--enable-dc1394,--disable-dc1394,libdc1394"
+PACKAGECONFIG[faac] = "--enable-faac,--disable-faac,faac"
+PACKAGECONFIG[rtmp] = "--enable-rtmp,--disable-rtmp,rtmpdump"
+PACKAGECONFIG[voamrwbenc] = "--enable-voamrwbenc,--disable-voamrwbenc,vo-amrwbenc"
+PACKAGECONFIG[voaacenc] = "--enable-voaacenc,--disable-voaacenc,vo-aacenc"
+PACKAGECONFIG[resindvd] = "--enable-resindvd,--disable-resindvd,libdvdnav libdvdread"
+
+ARM_INSTRUCTION_SET = "arm"
+
+PACKAGES =+ "${PN}-resindvd"
+FILES_${PN}-resindvd = "${libdir}/gstreamer-${LIBV}/libresindvd.so"
+FILES_${PN}-dev += "${libdir}/gstreamer-${LIBV}/libresindvd.la"
+FILES_${PN}-voamrwbenc += "${datadir}/gstreamer-${LIBV}/presets/GstVoAmrwbEnc.prs"
+
+do_configure_prepend() {
+	# This m4 file contains nastiness which conflicts with libtool 2.2.2
+	rm ${S}/m4/lib-link.m4 || true
+}
+
+SRC_URI[md5sum] = "fcb09798114461955260e4d940db5987"
+SRC_URI[sha256sum] = "0eae7d1a1357ae8377fded6a1b42e663887beabe0e6cc336e2ef9ada42e11491"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/audioresample-Fix-build-on-x86-if-emmintrin.h-is-ava.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/audioresample-Fix-build-on-x86-if-emmintrin.h-is-ava.patch
new file mode 100644
index 0000000..5214256
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/audioresample-Fix-build-on-x86-if-emmintrin.h-is-ava.patch
@@ -0,0 +1,37 @@
+audioresample: Fix build on x86 if emmintrin.h is available but can't be used
+
+On x86, EMMINTRIN is defined but not usable without SSE so check for
+__SSE__ and __SSE2__ as well.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=670690
+
+Upstream-Status: Backport
+
+Signed-off-by: Jackie Huang <jackie.huang@windriver.com>
+---
+ gst/audioresample/resample.c |    4 ++--
+ 1 files changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/gst/audioresample/resample.c b/gst/audioresample/resample.c
+index 98d006c..481fa01 100644
+--- a/gst/audioresample/resample.c
++++ b/gst/audioresample/resample.c
+@@ -77,13 +77,13 @@
+ #define EXPORT G_GNUC_INTERNAL
+ 
+ #ifdef _USE_SSE
+-#ifndef HAVE_XMMINTRIN_H
++#if !defined(__SSE__) || !defined(HAVE_XMMINTRIN_H)
+ #undef _USE_SSE
+ #endif
+ #endif
+ 
+ #ifdef _USE_SSE2
+-#ifndef HAVE_EMMINTRIN_H
++#if !defined(__SSE2__) || !defined(HAVE_EMMINTRIN_H)
+ #undef _USE_SSE2
+ #endif
+ #endif
+-- 
+1.7.1
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/configure.ac-fix-subparse-plugin.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/configure.ac-fix-subparse-plugin.patch
new file mode 100644
index 0000000..b8602c8
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/configure.ac-fix-subparse-plugin.patch
@@ -0,0 +1,27 @@
+Upstream-Status: Submitted [similar patch by other author, bugzilla]
+Bugtracker-URL: https://bugzilla.gnome.org/show_bug.cgi?id=663600
+
+Prepend PKG_CONFIG_SYSROOT to includedir, so configure doesn't
+search for gstconfig.h in /usr/include.
+
+Signed-off-by: Andreas Oberritter <obi@opendreambox.org>
+---
+ configure.ac |    2 +-
+ 1 files changed, 1 insertions(+), 1 deletions(-)
+
+diff --git a/configure.ac b/configure.ac
+index 1901bcf..460fb0a 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -435,7 +435,7 @@ AG_GST_CHECK_PLUGIN(volume)
+ dnl check for gstreamer core features (subsystems)
+ dnl FIXME: this assumes srcdir == builddir for uninstalled setups
+ GST_CONFIGPATH=`$PKG_CONFIG --variable=includedir gstreamer-0.10`"/gst/gstconfig.h"
+-AG_GST_PARSE_SUBSYSTEM_DISABLES($GST_CONFIGPATH)
++AG_GST_PARSE_SUBSYSTEM_DISABLES($PKG_CONFIG_SYSROOT_DIR$GST_CONFIGPATH)
+ AM_CONDITIONAL(USE_XML, test $GST_DISABLE_XML != "1")
+ 
+ dnl disable plug-ins that require libxml2's HTML support if it is not available
+-- 
+1.7.5.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/gst-plugins-base-tremor.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/gst-plugins-base-tremor.patch
new file mode 100644
index 0000000..99dbc9d
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base-0.10.36/gst-plugins-base-tremor.patch
@@ -0,0 +1,20 @@
+Remove -DTREMOR option since Tremor has dropped its internal
+libogg2, and gst-plugins-base has dependency on that.
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
+Signed-off-by: Shane Wang <shane.wang@intel.com>
+
+diff -r 70065fb4e085 ext/vorbis/Makefile.am
+--- a/ext/vorbis/Makefile.am	Tue Mar 13 16:36:56 2012 +0800
++++ b/ext/vorbis/Makefile.am	Tue Mar 13 16:38:53 2012 +0800
+@@ -30,7 +30,7 @@
+ 	gstvorbisdec.c gstvorbisdeclib.c gstvorbiscommon.c
+ libgstivorbisdec_la_CFLAGS = \
+ 	$(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS) \
+-	-DTREMOR $(IVORBIS_CFLAGS)
++	$(IVORBIS_CFLAGS)
+ libgstivorbisdec_la_LIBADD = \
+ 	$(top_builddir)/gst-libs/gst/tag/libgsttag-@GST_MAJORMINOR@.la \
+ 	$(top_builddir)/gst-libs/gst/audio/libgstaudio-@GST_MAJORMINOR@.la \
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base_0.10.36.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base_0.10.36.bb
new file mode 100644
index 0000000..c86834f
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-base_0.10.36.bb
@@ -0,0 +1,43 @@
+require gst-plugins.inc
+
+LICENSE = "GPLv2+ & LGPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \
+                    file://common/coverage/coverage-report.pl;beginline=2;endline=17;md5=622921ffad8cb18ab906c56052788a3f \
+                    file://COPYING.LIB;md5=55ca817ccb7d5b5b66355690e9abc605 \
+                    file://gst/ffmpegcolorspace/utils.c;beginline=1;endline=20;md5=9c83a200b8e597b26ca29df20fc6ecd0"
+
+DEPENDS += "alsa-lib libogg libvorbis libtheora util-linux tremor glib-2.0-native"
+
+SRC_URI += "file://gst-plugins-base-tremor.patch \
+            file://configure.ac-fix-subparse-plugin.patch \
+            file://audioresample-Fix-build-on-x86-if-emmintrin.h-is-ava.patch \
+"
+
+SRC_URI[md5sum] = "776c73883e567f67b9c4a2847d8d041a"
+SRC_URI[sha256sum] = "2cd3b0fa8e9b595db8f514ef7c2bdbcd639a0d63d154c00f8c9b609321f49976"
+
+PR = "r8"
+
+inherit gettext
+
+EXTRA_OECONF += "--disable-freetypetest"
+
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11', '', d)}"
+
+PACKAGECONFIG[gnomevfs] = "--enable-gnome_vfs,--disable-gnome_vfs,gnome-vfs"
+PACKAGECONFIG[orc] = "--enable-orc,--disable-orc,orc"
+PACKAGECONFIG[pango] = "--enable-pango,--disable-pango,pango"
+PACKAGECONFIG[x11] = "--enable-x --enable-xvideo,--disable-x --disable-xvideo,virtual/libx11 libxv libsm libice"
+PACKAGECONFIG[cdparanoia] = "--enable-cdparanoia,--disable-cdparanoia,cdparanoia"
+
+do_configure_prepend() {
+	# This m4 file contains nastiness which conflicts with libtool 2.2.2
+	rm -f ${S}/m4/lib-link.m4
+}
+
+FILES_${PN} += "${datadir}/${BPN}"
+
+CACHED_CONFIGUREVARS_append_x86 = " ac_cv_header_emmintrin_h=no ac_cv_header_xmmintrin_h=no"
+
+# /usr/bin/gst-visualise-0.10 is a perl script.
+RDEPENDS_${PN}-apps += "perl"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl/0001-conditional-gl-framebuffer-undefined-use.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl/0001-conditional-gl-framebuffer-undefined-use.patch
new file mode 100644
index 0000000..bc2f88b
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl/0001-conditional-gl-framebuffer-undefined-use.patch
@@ -0,0 +1,35 @@
+From 14d51cbefef19737e7ab2b6818ee1d3bdb248d12 Mon Sep 17 00:00:00 2001
+From: Jeremy Stashluk <jstashluk@dekaresearch.com>
+Date: Wed, 6 Feb 2013 09:59:48 -0500
+Subject: [PATCH] conditional gl framebuffer undefined use
+
+The OpenGL extension GL_ARB_framebuffer_object defines the macro
+GL_FRAMEBUFFER_UNDEFINED. The macro will only need to map to an error
+string if the extension provides functions that might return the macro.
+
+Upstream-Status: Pending
+
+Signed-off-by: Jeremy Stashluk <jstashluk@dekaresearch.com>
+---
+ gst-libs/gst/gl/gstgldisplay.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/gst-libs/gst/gl/gstgldisplay.c b/gst-libs/gst/gl/gstgldisplay.c
+index 3ed0b71..64c6c2c 100644
+--- a/gst-libs/gst/gl/gstgldisplay.c
++++ b/gst-libs/gst/gl/gstgldisplay.c
+@@ -2177,9 +2177,11 @@ gst_gl_display_check_framebuffer_status (void)
+       GST_ERROR ("GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS");
+       break;
+ 
++#if defined(GL_ARB_framebuffer_object)
+     case GL_FRAMEBUFFER_UNDEFINED:
+       GST_ERROR ("GL_FRAMEBUFFER_UNDEFINED");
+       break;
++#endif
+ 
+     default:
+       GST_ERROR ("General FBO error");
+-- 
+1.7.9.5
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl_0.10.3.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl_0.10.3.bb
new file mode 100644
index 0000000..6859f33
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-gl_0.10.3.bb
@@ -0,0 +1,25 @@
+require gst-plugins.inc
+
+LICENSE = "GPLv2+ & LGPLv2+ & LGPLv2.1+ "
+LIC_FILES_CHKSUM = "file://COPYING;md5=55ca817ccb7d5b5b66355690e9abc605"
+
+SRC_URI[md5sum] = "ac70ede13f79978d56eaed8abaa3c938"
+SRC_URI[sha256sum] = "48340b6a4b8abce16344a7bc33e74a94fdcce4f57ef6342cdf2f941c429bf210"
+
+SRC_URI += " file://0001-conditional-gl-framebuffer-undefined-use.patch"
+
+DEPENDS += "gst-plugins-base virtual/libgles2 virtual/egl jpeg libpng glew"
+
+PR = "r4"
+
+inherit gettext
+
+# This package doesn't have a configure switch for EGL or GL, so forcibly tell
+# configure that it can't find gl.h so it always uses EGL.  If/when we have some
+# way for machines to specify their preferred GL flavour this can be
+# automatically adapted.
+EXTRA_OECONF += "ac_cv_header_GL_gl_h=no"
+
+ALLOW_EMPTY_${PN} = "1"
+ALLOW_EMPTY_${PN}-apps = "1"
+ALLOW_EMPTY_${PN}-glib = "1"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0001-v4l2-fix-build-with-recent-kernels-the-v4l2_buffer-i.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0001-v4l2-fix-build-with-recent-kernels-the-v4l2_buffer-i.patch
new file mode 100644
index 0000000..6456d3c
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0001-v4l2-fix-build-with-recent-kernels-the-v4l2_buffer-i.patch
@@ -0,0 +1,33 @@
+From 12d18fe4e98e7c232d59b56d529a0521f293fe6d Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
+Date: Wed, 5 Sep 2012 18:54:42 +0200
+Subject: [PATCH] v4l2: fix build with recent kernels, the v4l2_buffer input
+ field was removed
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Upstream-Status: Backport
+
+[1] http://cgit.freedesktop.org/gstreamer/gst-plugins-good/commit/?id=9f2aa8d47f835ea155aaf635f618c0fc1ca87012
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+---
+ sys/v4l2/gstv4l2bufferpool.c |    1 -
+ 1 files changed, 0 insertions(+), 1 deletions(-)
+
+diff --git a/sys/v4l2/gstv4l2bufferpool.c b/sys/v4l2/gstv4l2bufferpool.c
+index b81c6a4..51cc0ce 100644
+--- a/sys/v4l2/gstv4l2bufferpool.c
++++ b/sys/v4l2/gstv4l2bufferpool.c
+@@ -181,7 +181,6 @@ gst_v4l2_buffer_new (GstV4l2BufferPool * pool, guint index, GstCaps * caps)
+     GST_LOG_OBJECT (pool->v4l2elem, "  MMAP offset:  %u",
+         ret->vbuffer.m.offset);
+   GST_LOG_OBJECT (pool->v4l2elem, "  length:    %u", ret->vbuffer.length);
+-  GST_LOG_OBJECT (pool->v4l2elem, "  input:     %u", ret->vbuffer.input);
+ 
+   data = (guint8 *) v4l2_mmap (0, ret->vbuffer.length,
+       PROT_READ | PROT_WRITE, MAP_SHARED, pool->video_fd,
+-- 
+1.7.6.5
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0001-v4l2_calls-define-V4L2_CID_HCENTER-and-V4L2_CID_VCEN.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0001-v4l2_calls-define-V4L2_CID_HCENTER-and-V4L2_CID_VCEN.patch
new file mode 100644
index 0000000..bd0de58
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0001-v4l2_calls-define-V4L2_CID_HCENTER-and-V4L2_CID_VCEN.patch
@@ -0,0 +1,45 @@
+From ccb01de8096a32d86d47b0d92ec3416c57ee4d25 Mon Sep 17 00:00:00 2001
+From: Bruce Ashfield <bruce.ashfield@windriver.com>
+Date: Thu, 22 Aug 2013 12:15:54 -0400
+Subject: [PATCH] v4l2_calls: define V4L2_CID_HCENTER and V4L2_CID_VCENTER
+
+kernel commit 24b9f5017 [[media] V4L: Remove deprecated image centering controls]
+removed the definitions of V4L2_CID_HCENTER and V4L2_CID_VCENTER after three
+years of depreciation.
+
+The ioctl values are still free, and the case statement which processess them
+in v4l2 userspace falls through to the proper replacement. So in the short
+term, we can explicitly define them using the old absolute values, and everything
+will work.
+
+Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
+---
+ sys/v4l2/v4l2_calls.c |    9 +++++++--
+ 1 file changed, 7 insertions(+), 2 deletions(-)
+
+diff --git a/sys/v4l2/v4l2_calls.c b/sys/v4l2/v4l2_calls.c
+index 309bfb6..3c64544 100644
+--- a/sys/v4l2/v4l2_calls.c
++++ b/sys/v4l2/v4l2_calls.c
+@@ -54,11 +54,16 @@
+ #include "gst/gst-i18n-plugin.h"
+ 
+ /* Those are ioctl calls */
++
++/* V4L2_CID_HCENTER has been removed from the mainline kernel, but
++   the ioctl space is still present. Since these values fall through
++   to their replacement, it is safe (in the short term) to re-use the
++    old values explictily */
+ #ifndef V4L2_CID_HCENTER
+-#define V4L2_CID_HCENTER V4L2_CID_HCENTER_DEPRECATED
++#define V4L2_CID_HCENTER V4L2_CID_BASE+22
+ #endif
+ #ifndef V4L2_CID_VCENTER
+-#define V4L2_CID_VCENTER V4L2_CID_VCENTER_DEPRECATED
++#define V4L2_CID_VCENTER V4L2_CID_BASE+23
+ #endif
+ 
+ GST_DEBUG_CATEGORY_EXTERN (v4l2_debug);
+-- 
+1.7.10.4
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0407-mulawdec-fix-integer-overrun.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0407-mulawdec-fix-integer-overrun.patch
new file mode 100644
index 0000000..48b8e98
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good-0.10.31/0407-mulawdec-fix-integer-overrun.patch
@@ -0,0 +1,47 @@
+From ce94b2c2b91b6db190c121860e12a6afafce7ae1 Mon Sep 17 00:00:00 2001
+From: Roland Krikava <rkrikava@gmail.com>
+Date: Fri, 2 Nov 2012 12:38:44 -0400
+Subject: [PATCH 407/440] mulawdec: fix integer overrun
+
+There might be more than 65535 samples in a chunk of data.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=687469
+
+Commit - 3be45f70220310ec1c60d819f90b5f2ae03b5d83 in 0.10 branch
+
+Upstream Status:  Backported
+
+Signed-off-by: Roland Krikava <rkrikava@gmail.com>
+---
+ gst/law/mulaw-conversion.c |    6 ++++--
+ 1 file changed, 4 insertions(+), 2 deletions(-)
+
+diff --git a/gst/law/mulaw-conversion.c b/gst/law/mulaw-conversion.c
+index 8afae80..190a9f5 100644
+--- a/gst/law/mulaw-conversion.c
++++ b/gst/law/mulaw-conversion.c
+@@ -51,9 +51,10 @@ mulaw_encode (gint16 * in, guint8 * out, gint numsamples)
+     7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
+     7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7
+   };
+-  gint16 sign, exponent, mantissa, i;
++  gint16 sign, exponent, mantissa;
+   gint16 sample;
+   guint8 ulawbyte;
++  gint i;
+ 
+   for (i = 0; i < numsamples; i++) {
+     sample = in[i];
+@@ -102,7 +103,8 @@ mulaw_decode (guint8 * in, gint16 * out, gint numsamples)
+   static gint16 exp_lut[8] = { 0, 132, 396, 924, 1980, 4092, 8316, 16764 };
+   gint16 sign, exponent, mantissa;
+   guint8 ulawbyte;
+-  gint16 linear, i;
++  gint16 linear;
++  gint i;
+ 
+   for (i = 0; i < numsamples; i++) {
+     ulawbyte = in[i];
+-- 
+1.7.9.5
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good_0.10.31.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good_0.10.31.bb
new file mode 100644
index 0000000..d922895
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-good_0.10.31.bb
@@ -0,0 +1,48 @@
+require gst-plugins.inc
+
+LICENSE = "GPLv2+ & LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \
+                    file://common/coverage/coverage-report.pl;beginline=2;endline=17;md5=622921ffad8cb18ab906c56052788a3f \
+                    file://gst/replaygain/rganalysis.c;beginline=1;endline=23;md5=b60ebefd5b2f5a8e0cab6bfee391a5fe"
+
+PR = "r8"
+
+PACKAGECONFIG ?= "jpeg v4l \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', 'pulseaudio', '', d)} \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11', '', d)} \
+"
+PACKAGECONFIG[pulseaudio] = "--enable-pulse,--disable-pulse,pulseaudio"
+PACKAGECONFIG[jack] = "--enable-jack,--disable-jack,jack"
+PACKAGECONFIG[jpeg] = "--enable-jpeg,--disable-jpeg,jpeg"
+PACKAGECONFIG[wavpack] = "--enable-wavpack,--disable-wavpack,wavpack"
+PACKAGECONFIG[gdkpixbuf] = "--enable-gdk_pixbuf,--disable-gdk_pixbuf,gdk-pixbuf"
+PACKAGECONFIG[v4l] = "--enable-gst_v4l2 --with-gudev,--disable-gst_v4l2 --without-gudev,libgudev"
+# sub-feature of v4l, but control separately since libv4l is not part of oe-core
+PACKAGECONFIG[libv4l] = "--with-libv4l2,--without-libv4l2,libv4l"
+PACKAGECONFIG[bzip2] = "--enable-bz2,--disable-bz2,bzip2"
+PACKAGECONFIG[orc] = "--enable-orc,--disable-orc,orc"
+PACKAGECONFIG[x11] = "--enable-x,--disable-x,virtual/libx11 libxfixes libxdamage"
+PACKAGECONFIG[dv1394] = "--enable-dv1394,--disable-dv1394,libraw1394 libiec61883 libavc1394"
+
+DEPENDS += "gst-plugins-base gconf cairo libpng zlib libid3tag flac \
+            speex libsoup-2.4 libcap"
+
+inherit gettext gconf
+
+SRC_URI += "file://0001-v4l2-fix-build-with-recent-kernels-the-v4l2_buffer-i.patch \
+            file://0001-v4l2_calls-define-V4L2_CID_HCENTER-and-V4L2_CID_VCEN.patch \
+            file://0407-mulawdec-fix-integer-overrun.patch \
+"
+EXTRA_OECONF += "--disable-aalib --disable-esd --disable-shout2 --disable-libcaca --disable-hal \
+                 --disable-examples --disable-taglib"
+
+do_configure_prepend() {
+	# This m4 file contains nastiness which conflicts with libtool 2.2.2
+	rm ${S}/m4/lib-link.m4 || true
+}
+
+SRC_URI[md5sum] = "24f98a294a2b521e1b29412bdadae2e6"
+SRC_URI[sha256sum] = "7e27840e40a7932ef2dc032d7201f9f41afcaf0b437daf5d1d44dc96d9e35ac6"
+
+FILES_${PN}-gconfelements += "${sysconfdir}/gconf/schemas/gstreamer-0.10.schemas"
+FILES_${PN}-equalizer += "${datadir}/gstreamer-0.10/presets/*.prs"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly/0001-cdio-compensate-for-libcdio-s-recent-cd-text-api-cha.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly/0001-cdio-compensate-for-libcdio-s-recent-cd-text-api-cha.patch
new file mode 100644
index 0000000..1f72fc0
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly/0001-cdio-compensate-for-libcdio-s-recent-cd-text-api-cha.patch
@@ -0,0 +1,193 @@
+From 649bd92cd2600719862ad5189899212409dd0a67 Mon Sep 17 00:00:00 2001
+From: Leon Merten Lohse <leon@green-side.de>
+Date: Thu, 3 May 2012 23:50:30 +0100
+Subject: [PATCH] cdio: compensate for libcdio's recent cd-text api changes
+
+https://bugzilla.gnome.org/show_bug.cgi?id=675112
+
+Conflicts:
+
+	ext/cdio/gstcdiocddasrc.c
+
+Signed-off-by: Andreas Müller <schnitzeltony@googlemail.com>
+
+Upstream-Status: Backport
+---
+ ext/cdio/gstcdio.c        | 35 ++++++++++++++++++++++++++++-------
+ ext/cdio/gstcdio.h        | 16 ++++++++++++++++
+ ext/cdio/gstcdiocddasrc.c | 19 +++++++++++++++++++
+ 3 files changed, 63 insertions(+), 7 deletions(-)
+
+diff --git a/ext/cdio/gstcdio.c b/ext/cdio/gstcdio.c
+index 2f58d18..483ebf5 100644
+--- a/ext/cdio/gstcdio.c
++++ b/ext/cdio/gstcdio.c
+@@ -30,12 +30,16 @@
+ GST_DEBUG_CATEGORY (gst_cdio_debug);
+ 
+ void
+-gst_cdio_add_cdtext_field (GstObject * src, cdtext_t * cdtext,
++gst_cdio_add_cdtext_field (GstObject * src, cdtext_t * cdtext, track_t track,
+     cdtext_field_t field, const gchar * gst_tag, GstTagList ** p_tags)
+ {
+   const gchar *txt;
+ 
++#if LIBCDIO_VERSION_NUM > 83
++  txt = cdtext_get_const (cdtext, field, track);
++#else
+   txt = cdtext_get_const (field, cdtext);
++#endif
+   if (txt == NULL || *txt == '\0') {
+     GST_DEBUG_OBJECT (src, "empty CD-TEXT field %u (%s)", field, gst_tag);
+     return;
+@@ -57,6 +61,12 @@ gst_cdio_add_cdtext_field (GstObject * src, cdtext_t * cdtext,
+ }
+ 
+ GstTagList *
++#if LIBCDIO_VERSION_NUM > 83
++gst_cdio_get_cdtext (GstObject * src, cdtext_t * t, track_t track)
++{
++  GstTagList *tags = NULL;
++
++#else
+ gst_cdio_get_cdtext (GstObject * src, CdIo * cdio, track_t track)
+ {
+   GstTagList *tags = NULL;
+@@ -67,14 +77,22 @@ gst_cdio_get_cdtext (GstObject * src, CdIo * cdio, track_t track)
+     GST_DEBUG_OBJECT (src, "no CD-TEXT for track %u", track);
+     return NULL;
+   }
++#endif
+ 
+-  gst_cdio_add_cdtext_field (src, t, CDTEXT_PERFORMER, GST_TAG_ARTIST, &tags);
+-  gst_cdio_add_cdtext_field (src, t, CDTEXT_TITLE, GST_TAG_TITLE, &tags);
++  gst_cdio_add_cdtext_field (src, t, track, CDTEXT_FIELD_PERFORMER,
++      GST_TAG_ARTIST, &tags);
++  gst_cdio_add_cdtext_field (src, t, track, CDTEXT_FIELD_TITLE, GST_TAG_TITLE,
++      &tags);
+ 
+   return tags;
+ }
+ 
+ void
++#if LIBCDIO_VERSION_NUM > 83
++gst_cdio_add_cdtext_album_tags (GstObject * src, cdtext_t * t,
++    GstTagList * tags)
++{
++#else
+ gst_cdio_add_cdtext_album_tags (GstObject * src, CdIo * cdio, GstTagList * tags)
+ {
+   cdtext_t *t;
+@@ -84,11 +102,14 @@ gst_cdio_add_cdtext_album_tags (GstObject * src, CdIo * cdio, GstTagList * tags)
+     GST_DEBUG_OBJECT (src, "no CD-TEXT for album");
+     return;
+   }
++#endif
+ 
+-  /* FIXME: map CDTEXT_PERFORMER to GST_TAG_ALBUM_ARTIST once we have that */
+-  gst_cdio_add_cdtext_field (src, t, CDTEXT_TITLE, GST_TAG_ALBUM, &tags);
+-  gst_cdio_add_cdtext_field (src, t, CDTEXT_GENRE, GST_TAG_GENRE, &tags);
+-
++  gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_PERFORMER,
++      GST_TAG_ALBUM_ARTIST, &tags);
++  gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_TITLE, GST_TAG_ALBUM,
++      &tags);
++  gst_cdio_add_cdtext_field (src, t, 0, CDTEXT_FIELD_GENRE, GST_TAG_GENRE,
++      &tags);
+   GST_DEBUG ("CD-TEXT album tags: %" GST_PTR_FORMAT, tags);
+ }
+ 
+diff --git a/ext/cdio/gstcdio.h b/ext/cdio/gstcdio.h
+index ef31ed0..c6da580 100644
+--- a/ext/cdio/gstcdio.h
++++ b/ext/cdio/gstcdio.h
+@@ -24,22 +24,38 @@
+ #include <gst/gst.h>
+ #include <cdio/cdio.h>
+ #include <cdio/cdtext.h>
++#include <cdio/version.h>
++
++#if LIBCDIO_VERSION_NUM <= 83
++  #define CDTEXT_FIELD_PERFORMER CDTEXT_PERFORMER
++  #define CDTEXT_FIELD_GENRE     CDTEXT_GENRE
++  #define CDTEXT_FIELD_TITLE     CDTEXT_TITLE
++#endif
+ 
+ GST_DEBUG_CATEGORY_EXTERN (gst_cdio_debug);
+ #define GST_CAT_DEFAULT gst_cdio_debug
+ 
+ void     gst_cdio_add_cdtext_field (GstObject      * src,
+                                     cdtext_t       * cdtext,
++                                    track_t          track,
+                                     cdtext_field_t   field,
+                                     const gchar    * gst_tag,
+                                     GstTagList    ** p_tags);
+ 
+ GstTagList  * gst_cdio_get_cdtext  (GstObject      * src,
++#if LIBCDIO_VERSION_NUM > 83
++                                    cdtext_t       * t,
++#else
+                                     CdIo           * cdio,
++#endif
+                                     track_t          track);
+ 
+ void      gst_cdio_add_cdtext_album_tags (GstObject  * src,
++#if LIBCDIO_VERSION_NUM > 83
++                                          cdtext_t   * t,
++#else
+                                           CdIo       * cdio,
++#endif
+                                           GstTagList * tags);
+ 
+ #endif /* __GST_CDIO_H__ */
+diff --git a/ext/cdio/gstcdiocddasrc.c b/ext/cdio/gstcdiocddasrc.c
+index 615a0c8..830839e 100644
+--- a/ext/cdio/gstcdiocddasrc.c
++++ b/ext/cdio/gstcdiocddasrc.c
+@@ -206,6 +206,9 @@ gst_cdio_cdda_src_open (GstAudioCdSrc * audiocdsrc, const gchar * device)
+   GstCdioCddaSrc *src;
+   discmode_t discmode;
+   gint first_track, num_tracks, i;
++#if LIBCDIO_VERSION_NUM > 83
++  cdtext_t *cdtext;
++#endif
+ 
+   src = GST_CDIO_CDDA_SRC (audiocdsrc);
+ 
+@@ -244,8 +244,18 @@ gst_cdio_cdda_src_open (GstCddaBaseSrc * cddabasesrc, const gchar * device)
+   if (src->read_speed != -1)
+     cdio_set_speed (src->cdio, src->read_speed);
+ 
++#if LIBCDIO_VERSION_NUM > 83
++  cdtext = cdio_get_cdtext (src->cdio);
++
++  if (NULL == cdtext)
++    GST_DEBUG_OBJECT (src, "no CD-TEXT on disc");
++  else
++    gst_cdio_add_cdtext_album_tags (GST_OBJECT_CAST (src), cdtext,
++        cddabasesrc->tags);
++#else
+   gst_cdio_add_cdtext_album_tags (GST_OBJECT_CAST (src), src->cdio,
+       cddabasesrc->tags);
++#endif
+ 
+   GST_LOG_OBJECT (src, "%u tracks, first track: %d", num_tracks, first_track);
+ 
+@@ -250,8 +263,14 @@ gst_cdio_cdda_src_open (GstAudioCdSrc * audiocdsrc, const gchar * device)
+      * the right thing here (for cddb id calculations etc. as well) */
+     track.start = cdio_get_track_lsn (src->cdio, i + first_track);
+     track.end = track.start + len_sectors - 1;  /* -1? */
++#if LIBCDIO_VERSION_NUM > 83
++    if (NULL != cdtext)
++      track.tags = gst_cdio_get_cdtext (GST_OBJECT (src), cdtext,
++          i + first_track);
++#else
+     track.tags = gst_cdio_get_cdtext (GST_OBJECT (src), src->cdio,
+         i + first_track);
++#endif
+ 
+     gst_audio_cd_src_add_track (GST_AUDIO_CD_SRC (src), &track);
+   }
+-- 
+2.1.0
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly/0002-Fix-opencore-include-paths.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly/0002-Fix-opencore-include-paths.patch
new file mode 100644
index 0000000..3fd6a26
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly/0002-Fix-opencore-include-paths.patch
@@ -0,0 +1,58 @@
+From e634bc6420826f760f6519a9f134c6a4d3412ef8 Mon Sep 17 00:00:00 2001
+From: Carlos Rafael Giani <dv@pseudoterminal.org>
+Date: Mon, 19 Oct 2015 15:26:24 +0200
+Subject: [PATCH] Fix opencore include paths
+
+Upstream-Status: Inappropriate [no upstream - GStreamer 0.10 is no longer being maintained]
+
+Signed-off-by: Carlos Rafael Giani <dv@pseudoterminal.org>
+---
+ ext/amrnb/amrnbdec.h    | 2 +-
+ ext/amrnb/amrnbenc.h    | 2 +-
+ ext/amrwbdec/amrwbdec.h | 4 ++--
+ 3 files changed, 4 insertions(+), 4 deletions(-)
+
+diff --git a/ext/amrnb/amrnbdec.h b/ext/amrnb/amrnbdec.h
+index 1e81839..01b7154 100644
+--- a/ext/amrnb/amrnbdec.h
++++ b/ext/amrnb/amrnbdec.h
+@@ -22,7 +22,7 @@
+ 
+ #include <gst/gst.h>
+ #include <gst/audio/gstaudiodecoder.h>
+-#include <interf_dec.h>
++#include <opencore-amrnb/interf_dec.h>
+ 
+ G_BEGIN_DECLS
+ 
+diff --git a/ext/amrnb/amrnbenc.h b/ext/amrnb/amrnbenc.h
+index 7f673ac..5be39b5 100644
+--- a/ext/amrnb/amrnbenc.h
++++ b/ext/amrnb/amrnbenc.h
+@@ -21,7 +21,7 @@
+ #define __GST_AMRNBENC_H__
+ 
+ #include <gst/gst.h>
+-#include <interf_enc.h>
++#include <opencore-amrnb/interf_enc.h>
+ #include <gst/audio/gstaudioencoder.h>
+ 
+ G_BEGIN_DECLS
+diff --git a/ext/amrwbdec/amrwbdec.h b/ext/amrwbdec/amrwbdec.h
+index c3528fc..f27c6d2 100644
+--- a/ext/amrwbdec/amrwbdec.h
++++ b/ext/amrwbdec/amrwbdec.h
+@@ -22,8 +22,8 @@
+ 
+ #include <gst/gst.h>
+ #include <gst/audio/gstaudiodecoder.h>
+-#include <dec_if.h>
+-#include <if_rom.h>
++#include <opencore-amrwb/dec_if.h>
++#include <opencore-amrwb/if_rom.h>
+ 
+ G_BEGIN_DECLS
+ 
+-- 
+1.9.1
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly_0.10.19.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly_0.10.19.bb
new file mode 100644
index 0000000..a8cb852
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins-ugly_0.10.19.bb
@@ -0,0 +1,35 @@
+require gst-plugins.inc
+
+LICENSE = "GPLv2+ & LGPLv2.1+ & LGPLv2+"
+LICENSE_FLAGS = "commercial"
+LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \
+                    file://gst/synaesthesia/synaescope.h;beginline=1;endline=20;md5=99f301df7b80490c6ff8305fcc712838 \
+                    file://tests/check/elements/xingmux.c;beginline=1;endline=21;md5=4c771b8af188724855cb99cadd390068 \
+                    file://gst/mpegstream/gstmpegparse.h;beginline=1;endline=18;md5=ff65467b0c53cdfa98d0684c1bc240a9"
+
+DEPENDS += "gst-plugins-base libid3tag libmad mpeg2dec liba52 lame"
+PR = "r3"
+
+inherit gettext
+
+EXTRA_OECONF += "--with-plugins=a52dec,lame,id3tag,mad,mpeg2dec,mpegstream,mpegaudioparse,asfdemux,realmedia \
+                 --disable-orc"
+
+PACKAGECONFIG ??= ""
+PACKAGECONFIG[x264] = "--enable-x264,--disable-x264,x264"
+PACKAGECONFIG[cdio] = "--enable-cdio,--disable-cdio,libcdio"
+PACKAGECONFIG[dvdread] = "--enable-dvdread,--disable-dvdread,libdvdread"
+PACKAGECONFIG[amrnb] = "--enable-amrnb,--disable-amrnb,opencore-amr"
+PACKAGECONFIG[amrwb] = "--enable-amrwb,--disable-amrwb,opencore-amr"
+
+do_configure_prepend() {
+	# This m4 file contains nastiness which conflicts with libtool 2.2.2
+	rm ${S}/m4/lib-link.m4 || true
+}
+
+SRC_URI[md5sum] = "1d81c593e22a6cdf0f2b4f57eae93df2"
+SRC_URI[sha256sum] = "1ca90059275c0f5dca71d4d1601a8f429b7852baed0723e820703b977e2c8df0"
+SRC_URI += "file://0001-cdio-compensate-for-libcdio-s-recent-cd-text-api-cha.patch \
+            file://0002-Fix-opencore-include-paths.patch"
+
+FILES_${PN}-amrnb += "${datadir}/gstreamer-0.10/presets/GstAmrnbEnc.prs"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins.inc b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins.inc
new file mode 100644
index 0000000..68a70b1
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-plugins.inc
@@ -0,0 +1,29 @@
+SUMMARY = "Plugins for the GStreamer multimedia framework"
+HOMEPAGE = "http://gstreamer.freedesktop.org/"
+BUGTRACKER = "https://bugzilla.gnome.org/enter_bug.cgi?product=Gstreamer"
+SECTION = "multimedia"
+DEPENDS = "gstreamer"
+
+# gobject-introspection to get --disable-introspection into UNKNOWN_CONFIGURE_WHITELIST
+inherit autotools pkgconfig gobject-introspection
+
+SRC_URI = "http://gstreamer.freedesktop.org/src/${BPN}/${BPN}-${PV}.tar.bz2"
+
+GSTREAMER_DEBUG ?= "--disable-debug"
+EXTRA_OECONF = "--disable-valgrind ${GSTREAMER_DEBUG} --disable-examples --disable-introspection"
+
+acpaths = "-I ${S}/common/m4 -I ${S}/m4"
+
+LIBV = "0.10"
+require recipes-multimedia/gstreamer/gst-plugins-package.inc
+
+PACKAGES_DYNAMIC += "^${PN}-.*"
+
+# apply gstreamer hack after Makefile.in.in in source is replaced by our version from
+# ${STAGING_DATADIR_NATIVE}/gettext/po/Makefile.in.in, but before configure is executed
+# http://lists.linuxtogo.org/pipermail/openembedded-core/2012-November/032233.html
+oe_runconf_prepend() {
+	if [ -e ${S}/po/Makefile.in.in ]; then
+		sed -i -e "1a\\" -e 'GETTEXT_PACKAGE = @GETTEXT_PACKAGE@' ${S}/po/Makefile.in.in
+	fi
+}
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-rtsp/0001-change-deprecated-INCLUDES-to-AM_CPPFLAGS-for-automa.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-rtsp/0001-change-deprecated-INCLUDES-to-AM_CPPFLAGS-for-automa.patch
new file mode 100644
index 0000000..3afca4e
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-rtsp/0001-change-deprecated-INCLUDES-to-AM_CPPFLAGS-for-automa.patch
@@ -0,0 +1,34 @@
+index gst-rtsp_0.10.8/bindings/python/Makefile.am
+--- gst-rtsp_0.10.8.orig/bindings/python/Makefile.am
++++ gst-rtsp_0.10.8/bindings/python/Makefile.am
+@@ -14,7 +14,7 @@ defs_DATA = $(DEFS)
+ defsdir = $(pkgdatadir)/$(GST_MAJORMINOR)/defs
+ OVERRIDES = rtspserver.override
+
+-INCLUDES = -I$(top_srcdir) -I$(srcdir) $(PYTHON_INCLUDES)
++AM_CPPFLAGS = -I$(top_srcdir) -I$(srcdir) $(PYTHON_INCLUDES)
+
+ rtspserver_la_CFLAGS = -I$(top_srcdir)/src \
+         $(PYGOBJECT_CFLAGS) $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+index gst-rtsp_0.10.8/examples/Makefile.am
+--- gst-rtsp_0.10.8.orig/examples/Makefile.am
++++ gst-rtsp_0.10.8/examples/Makefile.am
+@@ -1,6 +1,6 @@
+ noinst_PROGRAMS = test-video test-ogg test-mp4 test-readme test-launch test-sdp test-uri test-auth
+
+-INCLUDES = -I$(top_srcdir) -I$(srcdir)
++AM_CPPFLAGS = -I$(top_srcdir) -I$(srcdir)
+
+ AM_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+ AM_LDFLAGS = \
+index gst-rtsp_0.10.8/tests/Makefile.am
+--- gst-rtsp_0.10.8.orig/tests/Makefile.am
++++ gst-rtsp_0.10.8/tests/Makefile.am
+@@ -1,6 +1,6 @@
+ noinst_PROGRAMS = test-cleanup
+
+-INCLUDES = -I$(top_srcdir) -I$(srcdir)
++AM_CPPFLAGS = -I$(top_srcdir) -I$(srcdir)
+
+ AM_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_CFLAGS)
+ AM_LDFLAGS = \
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-rtsp_0.10.8.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-rtsp_0.10.8.bb
new file mode 100644
index 0000000..b78bcaf
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gst-rtsp_0.10.8.bb
@@ -0,0 +1,18 @@
+SUMMARY = "GStreamer RTSP server"
+LICENSE = "LGPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=55ca817ccb7d5b5b66355690e9abc605"
+
+SRC_URI = "http://gstreamer.freedesktop.org/src/${BPN}/${BPN}-${PV}.tar.bz2 \
+           file://0001-change-deprecated-INCLUDES-to-AM_CPPFLAGS-for-automa.patch"
+SRC_URI[md5sum] = "b511af07000595f63c3a705946221643"
+SRC_URI[sha256sum] = "9915887cf8515bda87462c69738646afb715b597613edc7340477ccab63a6617"
+
+DEPENDS = "gst-plugins-base gstreamer"
+
+EXTRA_OECONF = "--disable-introspection"
+
+# Configure always checks for Python so inherit pythonnative. Better solution
+# would be to disable the checks entirely.
+inherit autotools pythonnative gettext
+
+FILES_${PN}-dev += "${datadir}/vala/vapi/"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0001-baseparse-Fix-self-comparison-always-evaluates-to-tr.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0001-baseparse-Fix-self-comparison-always-evaluates-to-tr.patch
new file mode 100644
index 0000000..d077496
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0001-baseparse-Fix-self-comparison-always-evaluates-to-tr.patch
@@ -0,0 +1,32 @@
+From ed7f4802222234eef192aa3f74bc92268f338f97 Mon Sep 17 00:00:00 2001
+From: Sebastian Droege <sebastian.droege@collabora.co.uk>
+Date: Tue, 6 Mar 2012 12:28:02 +0100
+Subject: [PATCH] baseparse: Fix 'self-comparison always evaluates to true'
+
+This was really a bug.
+
+Commit is ed7f4802222234eef192aa3f74bc92268f338f97 in 0.10 branch
+
+Upstream Status:  Backported
+
+Signed-off-by: Sebastian Droege <sebastian.droege@collabora.co.uk>
+---
+ libs/gst/base/gstbaseparse.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/libs/gst/base/gstbaseparse.c b/libs/gst/base/gstbaseparse.c
+index 851ec1d..108ee89 100644
+--- a/libs/gst/base/gstbaseparse.c
++++ b/libs/gst/base/gstbaseparse.c
+@@ -3899,7 +3899,7 @@ gst_base_parse_handle_seek (GstBaseParse * parse, GstEvent * event)
+        seek event (in bytes) to upstream. Segment / flush handling happens
+        in corresponding src event handlers */
+     GST_DEBUG_OBJECT (parse, "seek in PUSH mode");
+-    if (seekstop >= 0 && seekpos <= seekpos)
++    if (seekstop >= 0 && seekstop <= seekpos)
+       seekstop = seekpos;
+     new_event = gst_event_new_seek (rate, GST_FORMAT_BYTES, flags,
+         GST_SEEK_TYPE_SET, seekpos, stop_type, seekstop);
+-- 
+1.7.9.5
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0001-parse-make-grammar.y-work-with-Bison-3.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0001-parse-make-grammar.y-work-with-Bison-3.patch
new file mode 100644
index 0000000..dc2d606
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/0001-parse-make-grammar.y-work-with-Bison-3.patch
@@ -0,0 +1,35 @@
+From 60516f4798894f958fc53b470e1283318d0f8706 Mon Sep 17 00:00:00 2001
+From: Kerrick Staley <kerrick@kerrickstaley.com>
+Date: Tue, 20 Aug 2013 23:59:29 -0700
+Subject: [PATCH 1/2] parse: make grammar.y work with Bison 3
+
+YYLEX_PARAM is no longer supported in Bison 3.
+
+https://bugzilla.gnome.org/show_bug.cgi?id=706462
+---
+ gst/parse/grammar.y | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/gst/parse/grammar.y b/gst/parse/grammar.y
+index 24fc87b..7f9dd16 100644
+--- a/gst/parse/grammar.y
++++ b/gst/parse/grammar.y
+@@ -26,7 +26,6 @@
+  */
+ 
+ #define YYERROR_VERBOSE 1
+-#define YYLEX_PARAM scanner
+ 
+ #define YYENABLE_NLS 0
+ 
+@@ -648,6 +647,7 @@ static int yyerror (void *scanner, graph_t *graph, const char *s);
+ %right '.'
+ %left '!' '='
+ 
++%lex-param { void *scanner }
+ %parse-param { void *scanner }
+ %parse-param { graph_t *graph }
+ %pure-parser
+-- 
+2.7.2
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/check_fix.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/check_fix.patch
new file mode 100644
index 0000000..5d8bb13
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/check_fix.patch
@@ -0,0 +1,19 @@
+# gstreamer: Fix a problem with configure if check has already been built
+# Richard Purdie <rpurdie@linux.intel.com>
+
+Upstream-Status: Inappropriate [configuration]
+
+diff -urN gstreamer-0.10.29-orig/configure.ac gstreamer-0.10.29/configure.ac
+--- gstreamer-0.10.29-orig/configure.ac	2010-06-26 12:49:27.774930773 +0800
++++ gstreamer-0.10.29/configure.ac	2010-06-26 12:51:12.899200233 +0800
+@@ -543,8 +543,10 @@
+       *) BUILD_CHECK=yes ;;
+     esac
+ ])
++
+ dnl bit of a misnomer, but keep the conditional named like this so we don't
+ dnl have to change too much elsewhere
++HAVE_CHECK=no
+ AM_CONDITIONAL(HAVE_CHECK, test "x$BUILD_CHECK" = "xyes")
+ 
+ dnl configure the desired buffer alignment
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gst-inspect-check-error.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gst-inspect-check-error.patch
new file mode 100644
index 0000000..30be85f
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gst-inspect-check-error.patch
@@ -0,0 +1,16 @@
+# Fix crash with gst-inspect
+# Chris Lord <chris@openedhand.com>
+
+Upstream-Status: Pending
+
+--- gstreamer-0.10.9/tools/gst-inspect.c.old	2006-09-12 11:56:53.000000000 +0100
++++ gstreamer-0.10.9/tools/gst-inspect.c	2006-09-12 11:57:27.000000000 +0100
+@@ -1123,7 +1123,7 @@
+   g_option_context_add_main_entries (ctx, options, GETTEXT_PACKAGE);
+   g_option_context_add_group (ctx, gst_init_get_option_group ());
+   if (!g_option_context_parse (ctx, &argc, &argv, &err)) {
+-    g_print ("Error initializing: %s\n", err->message);
++    g_print ("Error initializing: %s\n", err ? err->message : "(null)");
+     exit (1);
+   }
+   g_option_context_free (ctx);
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gstregistrybinary.c b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gstregistrybinary.c
new file mode 100644
index 0000000..c1f3e71
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gstregistrybinary.c
@@ -0,0 +1,487 @@
+/* GStreamer
+ * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
+ *                    2000 Wim Taymans <wtay@chello.be>
+ *                    2005 David A. Schleef <ds@schleef.org>
+ *
+ * gstregistryxml.c: GstRegistry object, support routines
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it ulnder the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+
+#include <gst/gstregistrybinary.h>
+
+/*
+** Simple handy function to write a memory location to the registry cache file
+*/
+inline static gboolean
+gst_registry_binary_write(GstRegistry *registry, const void *mem, const ssize_t size)
+{
+  if (write(registry->cache_file, mem, size) != size)
+    {
+      GST_ERROR("Failed to write binary registry element: ptr=%p size=%u error=%s\n",
+		mem, size, strerror(errno));
+      return FALSE;
+    }
+  return TRUE;
+}
+
+/*
+** Save features GstBinary style
+*/
+static gboolean 
+gst_registry_binary_fill_feature(GList **list, GstPluginFeature *orig, GstBinaryPluginFeature *dest, const char *name)
+{
+  GstBinaryChunck *chk;
+
+  if ((chk = calloc(1, sizeof (GstBinaryChunck))) == NULL)
+    return FALSE;
+
+  chk->data = dest;
+  chk->size = sizeof (GstBinaryPluginFeature);
+
+  *list = g_list_append(*list, chk);
+
+  dest->rank = orig->rank;
+  if (!strncpy(dest->typename, name, GST_BINARY_REGISTRY_TYPENAME_TYPENAME_LEN) ||
+      !strncpy(dest->name, orig->name, GST_BINARY_REGISTRY_TYPENAME_NAME_LEN))
+    {
+      GST_ERROR("Failed to write binary registry feature");
+      goto fail;
+    }
+  
+  if (GST_IS_ELEMENT_FACTORY(orig))
+    {
+      GstElementFactory *factory = GST_ELEMENT_FACTORY(orig);
+      
+      if (!strncpy(dest->longname, factory->details.longname, GST_BINARY_REGISTRY_TYPENAME_LONGNAME_LEN) ||
+	  !strncpy(dest->class, factory->details.klass, GST_BINARY_REGISTRY_TYPENAME_CLASS_LEN) ||
+	  !strncpy(dest->description, factory->details.description, GST_BINARY_REGISTRY_TYPENAME_DESCRIPTION_LEN) ||
+	  !strncpy(dest->author, factory->details.author, GST_BINARY_REGISTRY_TYPENAME_AUTHOR_LEN))
+	{
+	  GST_ERROR("Failed to write binary registry feature");
+	  goto fail;
+	}
+    }
+  
+  dest->npadtemplates = dest->ninterfaces = dest->nuritypes = 0;
+  return TRUE;
+
+ fail:
+  free(chk);
+  return FALSE;
+}
+
+
+/*
+** Initialize the GstBinaryRegistryMagic, setting both our magic number and gstreamer major/minor version
+*/
+inline static gboolean
+gst_registry_binary_initialize_magic(GstBinaryRegistryMagic *m)
+{
+  if (!strncpy(m->magic, GST_MAGIC_BINARY_REGISTRY_STR, GST_MAGIC_BINARY_REGISTRY_LEN) ||
+      !strncpy(m->version, GST_MAJORMINOR, GST_BINARY_REGISTRY_VERSION_LEN))
+    {
+      GST_ERROR("Failed to write magic to the registry magic structure");
+      return FALSE;
+    }
+  return TRUE;
+}
+
+/*
+** Check GstBinaryRegistryMagic validity.
+** Return a pointer pointing right after the magic structure
+*/
+static gchar *
+gst_registry_binary_check_magic(gchar *in)
+{
+  GstBinaryRegistryMagic *m = (GstBinaryRegistryMagic *) in;
+
+  if (m == NULL || m->magic == NULL || m->version == NULL)
+    {
+      GST_ERROR("Binary registry magic structure is broken");
+      return NULL;
+    }
+  if (strncmp(m->magic, GST_MAGIC_BINARY_REGISTRY_STR, GST_MAGIC_BINARY_REGISTRY_LEN) != 0)
+    {
+      GST_ERROR("Binary registry magic is different : %02x%02x%02x%02x != %02x%02x%02x%02x",
+		GST_MAGIC_BINARY_REGISTRY_STR[0] & 0xff, GST_MAGIC_BINARY_REGISTRY_STR[1] & 0xff,
+		GST_MAGIC_BINARY_REGISTRY_STR[2] & 0xff, GST_MAGIC_BINARY_REGISTRY_STR[3] & 0xff,
+		m->magic[0] & 0xff, m->magic[1] & 0xff, m->magic[2] & 0xff, m->magic[3] & 0xff);
+      return NULL;
+    }
+  if (strncmp(m->version, GST_MAJORMINOR, GST_BINARY_REGISTRY_VERSION_LEN))
+    {
+      GST_ERROR("Binary registry magic version is different : %s != %s",
+		GST_MAJORMINOR, m->version);
+      return NULL;
+    }
+  return (in + sizeof (GstBinaryRegistryMagic));
+}
+
+/*
+** Adapt a GstPlugin to our GstBinaryPluginElement structure, and write it to the 
+** registry file.
+*/   
+static gboolean
+gst_registry_binary_save_plugin(GList **list, GstRegistry *registry, GstPlugin *plugin)
+{
+  GstBinaryPluginElement *e;
+  GstBinaryChunck *chk;
+  GList *walk;
+
+  if ((e = calloc(1, sizeof (GstBinaryPluginElement))) == NULL ||
+      (chk = calloc(1, sizeof (GstBinaryChunck))) == NULL)
+    return FALSE;
+
+  chk->data = e;
+  chk->size = sizeof (GstBinaryPluginElement);
+  *list = g_list_append(*list, chk);
+
+  if (!strncpy(e->name, plugin->desc.name, GST_BINARY_REGISTRY_NAME_LEN)		       	||
+      !strncpy(e->description, plugin->desc.description, GST_BINARY_REGISTRY_DESCRIPTION_LEN)	||
+      !strncpy(e->filename, plugin->filename, _POSIX_PATH_MAX)					||
+      !strncpy(e->version, plugin->desc.version, GST_BINARY_REGISTRY_VERSION_LEN)		||
+      !strncpy(e->license, plugin->desc.license, GST_BINARY_REGISTRY_LICENSE_LEN)		||
+      !strncpy(e->source, plugin->desc.source, GST_BINARY_REGISTRY_SOURCE_LEN)			||
+      !strncpy(e->package, plugin->desc.package, GST_BINARY_REGISTRY_PACKAGE_LEN)		||
+      !strncpy(e->origin, plugin->desc.origin, GST_BINARY_REGISTRY_ORIGIN_LEN))
+    {
+      GST_DEBUG("Can't adapt GstPlugin to GstBinaryPluginElement");
+      goto fail;
+    }
+
+  e->size = plugin->file_size;
+  e->m32p = plugin->file_mtime;
+  
+  GList *ft_list = gst_registry_get_feature_list_by_plugin(registry, plugin->desc.name);
+
+  for (walk = ft_list; walk; walk = g_list_next(walk), e->nfeatures++)
+    {
+      GstPluginFeature *curfeat = GST_PLUGIN_FEATURE (walk->data);
+      GstBinaryPluginFeature *newfeat;
+      const char *feat_name = g_type_name(G_OBJECT_TYPE(curfeat));
+      
+      if ((newfeat = calloc(1, sizeof (GstBinaryPluginFeature))) == NULL)
+	  goto fail;
+
+      if (!feat_name || !gst_registry_binary_fill_feature(list, curfeat, newfeat, feat_name))
+	{
+	  GST_ERROR("Can't fill plugin feature, aborting.");
+	  goto fail;
+	}
+    }
+
+  GST_DEBUG("Found %d features in plugin \"%s\"\n", e->nfeatures, e->name);
+  return TRUE;
+
+ fail:
+  free(chk);
+  free(e);
+  return FALSE;
+}
+
+/*
+** Write the cache to file. Part of the code was taken from gstregistryxml.c
+*/
+gboolean 
+gst_registry_binary_write_cache(GstRegistry *registry, const char *location)
+{
+  GList *walk;
+  char *tmp_location;
+  GstBinaryRegistryMagic *magic;
+  GstBinaryChunck *magic_chunck;
+  GList *to_write = NULL;
+ 
+  GST_INFO("Writing binary registry cache");
+
+  g_return_val_if_fail (GST_IS_REGISTRY (registry), FALSE);
+  tmp_location = g_strconcat (location, ".tmpXXXXXX", NULL);
+  registry->cache_file = g_mkstemp (tmp_location);
+  if (registry->cache_file == -1)
+    {
+      char *dir;
+
+      /* oops, I bet the directory doesn't exist */
+      dir = g_path_get_dirname (location);
+      g_mkdir_with_parents (dir, 0777);
+      g_free (dir);
+      
+      registry->cache_file = g_mkstemp (tmp_location);
+    }
+
+  if (registry->cache_file == -1)
+    goto fail;
+
+  if ((magic = calloc(1, sizeof (GstBinaryRegistryMagic))) == NULL ||
+      !gst_registry_binary_initialize_magic(magic))
+    goto fail;
+
+  if ((magic_chunck = calloc(1, sizeof (GstBinaryChunck))) == NULL)
+    goto fail;
+
+  magic_chunck->data = magic;
+  magic_chunck->size = sizeof (GstBinaryRegistryMagic);
+  to_write = g_list_append(to_write, magic_chunck); 
+
+  /* Iterate trough the list of plugins in the GstRegistry and adapt them to our structures */
+  for (walk = g_list_last(registry->plugins); walk; walk = g_list_previous(walk))
+    {
+      GstPlugin *plugin = GST_PLUGIN(walk->data);
+      
+      if (!plugin->filename)
+	continue;
+	  
+      if (plugin->flags & GST_PLUGIN_FLAG_CACHED)
+	{
+	  int ret;
+	  struct stat statbuf;
+	  
+	  ret = g_stat (plugin->filename, &statbuf);
+	  if ((ret = g_stat (plugin->filename, &statbuf)) < 0 	||
+	      plugin->file_mtime != statbuf.st_mtime		||
+	      plugin->file_size != statbuf.st_size)
+	    continue;
+	}
+
+      if (!gst_registry_binary_save_plugin(&to_write, registry, plugin))
+	{
+	  GST_ERROR("Can't write binary plugin information for \"%s\"", plugin->filename);
+	  continue; /* Try anyway */
+	}
+    }
+
+  for (walk = g_list_first(to_write); walk; walk = g_list_next(walk))
+    {
+      GstBinaryChunck *cur = walk->data;
+
+      if (!gst_registry_binary_write(registry, cur->data, cur->size))
+	{
+	  free(cur->data);
+	  free(cur);
+	  g_list_free(to_write);
+	  goto fail;
+	}
+      free(cur->data);
+      free(cur);
+    }
+  g_list_free(to_write);
+
+  if (close(registry->cache_file) < 0)
+    {
+      GST_DEBUG("Can't close registry file : %s", strerror(errno));
+      goto fail;
+    }
+  
+  if (g_file_test (tmp_location, G_FILE_TEST_EXISTS)) {
+#ifdef WIN32
+    remove (location);
+#endif
+    rename (tmp_location, location);
+  }
+
+  g_free (tmp_location);
+  return TRUE;
+
+ fail:
+  g_free(tmp_location);
+  return FALSE;
+}
+
+static GstPluginFeature*
+gst_registry_binary_load_feature(GstBinaryPluginFeature *in)
+{
+  GstPluginFeature *feature;
+  GType type;
+
+  if (!in->typename || !*(in->typename))
+    return NULL;
+
+  /*  GST_INFO("Plugin feature typename : %s", in->typename);*/
+
+  if (!(type = g_type_from_name(in->typename)))
+    {
+      GST_ERROR("Unknown type from typename");
+      return NULL;
+    }
+  feature = g_object_new (type, NULL);
+
+  if (!feature) {
+    GST_ERROR("Can't create feature from type");
+    return NULL;
+  }
+
+  if (!GST_IS_PLUGIN_FEATURE (feature)) {
+    /* don't really know what it is */
+    if (GST_IS_OBJECT (feature))
+      gst_object_unref (feature);
+    else
+      g_object_unref (feature);
+    return NULL;
+  }
+
+  feature->name = g_strdup(in->name);
+  feature->rank = in->rank;
+
+  if (GST_IS_ELEMENT_FACTORY(feature))
+    {
+      GstElementFactory *factory = GST_ELEMENT_FACTORY(feature);
+
+      factory->details.longname = g_strdup(in->longname);
+      factory->details.klass = g_strdup(in->class);
+      factory->details.description = g_strdup(in->description);
+      factory->details.author = g_strdup(in->author);
+
+      /*      GST_INFO("Element factory : %s", factory->details.longname); */
+    }
+
+  GST_DEBUG("Added feature %p with name %s", feature, feature->name);
+  return feature;
+}
+
+/*
+** Make a new plugin from current GstBinaryPluginElement structure
+** and save it to the GstRegistry. Return an offset to the next
+** GstBinaryPluginElement structure.
+*/
+static unsigned long
+gst_registry_binary_get_binary_plugin(GstRegistry *registry, gchar *in)
+{
+  GstBinaryPluginElement *p = (GstBinaryPluginElement *) in;
+  GstPlugin *plugin = NULL;
+  GList *plugin_features = NULL;
+  GstBinaryPluginFeature *feat;
+  unsigned int i;
+  unsigned long offset;
+
+  plugin = g_object_new (GST_TYPE_PLUGIN, NULL);
+
+  plugin->flags |= GST_PLUGIN_FLAG_CACHED;
+
+  plugin->desc.name = g_strdup(p->name);
+  plugin->desc.description= g_strdup(p->description);
+  plugin->filename = g_strdup(p->filename);
+  plugin->desc.version = g_strdup(p->version);
+  plugin->desc.license = g_strdup(p->license);
+  plugin->desc.source = g_strdup(p->source);
+  plugin->desc.package = g_strdup(p->package);
+  plugin->desc.origin = g_strdup(p->origin);
+  plugin->file_mtime = p->m32p;
+  plugin->file_size = p->size;
+  plugin->basename = g_path_get_basename (plugin->filename);
+
+  if (plugin->file_mtime < 0 || plugin->file_size < 0)
+    {
+      GST_ERROR("Plugin time or file size is not valid !");
+      g_free(plugin);
+      return -1;
+    }
+
+  if (p->nfeatures < 0)
+    {
+      GST_ERROR("The number of feature structure is not valid !");
+      gst_object_unref(plugin);
+      return -1;
+    }
+
+  for (feat = (GstBinaryPluginFeature *) (in + sizeof (GstBinaryPluginElement)), i = 0; 
+       i < p->nfeatures; i++, feat++)
+    {
+      GstPluginFeature *gstfeat;
+
+      if ((gstfeat = gst_registry_binary_load_feature(feat)) == NULL)
+	{
+	  g_list_free(plugin_features);
+	  g_free(plugin);
+	  GST_ERROR("Error while loading binary feature");
+	  return -1;
+	}
+      gstfeat->plugin_name = g_strdup(plugin->desc.name);
+      plugin_features = g_list_prepend(plugin_features, gstfeat);
+    }
+  
+  GST_DEBUG("Added plugin \"%s\" to global registry from binary registry", plugin->desc.name); 
+  GList *g;
+
+  gst_registry_add_plugin (registry, plugin);
+  for (g = plugin_features; g; g = g_list_next (g))
+    gst_registry_add_feature (registry, GST_PLUGIN_FEATURE (g->data));
+  /*  g_list_free(plugin_features); */
+
+  offset = sizeof (GstBinaryPluginElement) + p->nfeatures * sizeof (GstBinaryPluginFeature);
+  return offset;
+}
+
+
+/*
+** Read the cache and adapt it to fill GstRegistry
+*/ 
+gboolean 
+gst_registry_binary_read_cache(GstRegistry *registry, const char *location)
+{
+  GMappedFile *mapped = NULL;
+  GTimer *timer = NULL;
+  gchar *contents = NULL;
+  gdouble seconds;
+  unsigned long offset, inc;
+  gsize size;
+
+  /* make sure these types exist */
+  GST_TYPE_ELEMENT_FACTORY;
+  GST_TYPE_TYPE_FIND_FACTORY;
+  GST_TYPE_INDEX_FACTORY;
+
+  timer = g_timer_new ();
+
+  if ((mapped = g_mapped_file_new(location, FALSE, NULL)) == NULL ||
+      (contents = g_mapped_file_get_contents(mapped)) == NULL)
+    {
+      GST_ERROR("Can't load file : %s", strerror(errno));
+      return FALSE;
+    }
+  if ((contents = gst_registry_binary_check_magic(contents)) == NULL)
+    {
+      GST_ERROR("Binary registry type not recognized (invalid magic)");
+      g_mapped_file_free(mapped);
+      return FALSE;
+    }
+
+  if ((size = g_mapped_file_get_length(mapped)) < sizeof (GstBinaryPluginElement))
+    {
+      GST_INFO("No binary plugins structure to read");
+      return TRUE; /* This is not really an error */
+    }
+
+  for (offset = inc = 0; (offset + sizeof (GstBinaryPluginElement)) < size &&
+	 (inc = gst_registry_binary_get_binary_plugin(registry, contents + offset)) > 0;
+       offset += inc)
+    ; /* May want in the future to do something here */
+  if (inc < 0)
+    {
+      GST_DEBUG("Problem while reading binary registry");
+      return FALSE;
+    }
+
+  g_timer_stop (timer);
+  seconds = g_timer_elapsed (timer, NULL);
+  g_timer_destroy (timer);
+
+  GST_INFO ("loaded %s in %f seconds", location, seconds);
+
+  if (mapped)
+    g_mapped_file_free (mapped);
+  return TRUE;
+}
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gstregistrybinary.h b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gstregistrybinary.h
new file mode 100644
index 0000000..2ef24d7
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer-0.10.36/gstregistrybinary.h
@@ -0,0 +1,194 @@
+/* GStreamer
+ * Copyright (C) 1999,2000 Erik Walthinsen <omega@cse.ogi.edu>
+ *                    2000 Wim Taymans <wim.taymans@chello.be>
+ *
+ * gstregistry.h: Header for registry handling
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/* SUGGESTIONS AND TODO :
+** ====================
+** - Use a compressed registry, but would induce performance loss
+** - Encrypt the registry, for security purpose, but would also reduce performances
+** - Also have a non-mmap based cache reading (work with file descriptors)
+*/
+
+#ifndef __GST_REGISTRYBINARY_H__
+#define __GST_REGISTRYBINARY_H__
+
+#ifdef HAVE_CONFIG_H
+#  include "config.h"
+#endif
+
+#include <stdio.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <dirent.h>
+#include <fcntl.h>
+#include <sys/mman.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+
+#include <gst/gst_private.h>
+#include <gst/gstelement.h>
+#include <gst/gsttypefind.h>
+#include <gst/gsttypefindfactory.h>
+#include <gst/gsturi.h>
+#include <gst/gstinfo.h>
+#include <gst/gstenumtypes.h>
+#include <gst/gstregistry.h>
+#include <gst/gstpadtemplate.h>
+
+#include "glib-compat-private.h"
+#include <glib/gstdio.h>
+
+/* A magic, written at the beginning of the file */
+#define GST_MAGIC_BINARY_REGISTRY_STR "\xc0\xde\xf0\x0d"
+#define GST_MAGIC_BINARY_REGISTRY_LEN (4)
+#define GST_MAGIC_BINARY_VERSION_LEN (64)
+
+typedef struct _GstBinaryRegistryMagic
+{
+  char magic[GST_MAGIC_BINARY_REGISTRY_LEN];
+  char version[GST_MAGIC_BINARY_VERSION_LEN];
+} GstBinaryRegistryMagic;
+
+
+/* Used to store pointers to write */
+typedef struct _GstBinaryChunck
+{
+  void *data;
+  unsigned int size;
+} GstBinaryChunck;
+
+
+/* A structure containing (staticely) every information needed for a plugin
+**
+** Notes :
+** "nfeatures" is used to say how many GstBinaryPluginFeature structures we will have 
+** right after the structure itself.
+*/
+
+/* Various lenght defines for our GstBinaryPluginElement structure 
+** Note : We could eventually use smaller size
+*/
+#define GST_BINARY_REGISTRY_NAME_LEN (256)
+#define GST_BINARY_REGISTRY_DESCRIPTION_LEN (1024)
+#define GST_BINARY_REGISTRY_VERSION_LEN (64)
+#define GST_BINARY_REGISTRY_LICENSE_LEN (256)
+#define GST_BINARY_REGISTRY_SOURCE_LEN (256)
+#define GST_BINARY_REGISTRY_PACKAGE_LEN (1024)
+#define GST_BINARY_REGISTRY_ORIGIN_LEN (1024)
+
+typedef struct _GstBinaryPluginElement
+{
+  char name[GST_BINARY_REGISTRY_NAME_LEN];
+  char description[GST_BINARY_REGISTRY_DESCRIPTION_LEN];
+  char filename[_POSIX_PATH_MAX];
+  char version[GST_BINARY_REGISTRY_VERSION_LEN];
+  char license[GST_BINARY_REGISTRY_LICENSE_LEN];
+  char source[GST_BINARY_REGISTRY_SOURCE_LEN];
+  char package[GST_BINARY_REGISTRY_PACKAGE_LEN];
+  char origin[GST_BINARY_REGISTRY_ORIGIN_LEN];
+  unsigned long size;
+  unsigned long m32p;
+  unsigned int nfeatures;
+} GstBinaryPluginElement;
+
+
+/* A structure containing the plugin features
+**
+** Note :
+** "npadtemplates" is used to store the number of GstBinaryPadTemplate structures following the structure itself.
+** "ninterfaces" is used to store the number of GstBinaryInterface structures following the structure itself.
+** "nuritypes" is used to store the number of GstBinaryUriType structures following the structure itself.
+*/
+#define GST_BINARY_REGISTRY_TYPENAME_TYPENAME_LEN (256)
+#define GST_BINARY_REGISTRY_TYPENAME_NAME_LEN (256)
+#define GST_BINARY_REGISTRY_TYPENAME_LONGNAME_LEN (1024)
+#define GST_BINARY_REGISTRY_TYPENAME_CLASS_LEN (512)
+#define GST_BINARY_REGISTRY_TYPENAME_DESCRIPTION_LEN (1024)
+#define GST_BINARY_REGISTRY_TYPENAME_AUTHOR_LEN (256)
+
+typedef struct _GstBinaryPluginFeature
+{
+  char typename[GST_BINARY_REGISTRY_TYPENAME_TYPENAME_LEN];
+  char name[GST_BINARY_REGISTRY_TYPENAME_NAME_LEN];
+  unsigned long rank;
+  char longname[GST_BINARY_REGISTRY_TYPENAME_LONGNAME_LEN];
+  char class[GST_BINARY_REGISTRY_TYPENAME_CLASS_LEN];
+  char description[GST_BINARY_REGISTRY_TYPENAME_DESCRIPTION_LEN];
+  char author[GST_BINARY_REGISTRY_TYPENAME_AUTHOR_LEN];
+  unsigned int npadtemplates;
+  unsigned int ninterfaces;
+  unsigned int nuritypes;
+} GstBinaryPluginFeature;
+
+
+/* 
+** A structure containing the static pad templates of a plugin feature 
+*/
+#define GST_BINARY_REGISTRY_PADTEMPLATE_NAME_LEN (256)
+#define GST_BINARY_REGISTRY_PADTEMPLATE_CAP_LEN (1024)
+
+typedef struct _GstBinaryPadTemplate
+{
+  char name[GST_BINARY_REGISTRY_PADTEMPLATE_NAME_LEN];
+  char cap[GST_BINARY_REGISTRY_PADTEMPLATE_CAP_LEN];
+  int direction;					/* Either 0:"sink" or 1:"src" */
+  GstPadPresence presence;
+} GstBinaryPadTemplate;
+
+/*
+** A very simple structure defining the plugin feature interface string
+*/
+#define GST_BINARY_REGISTRY_INTERFACE_INTERFACE_LEN (512)
+typedef struct _GstBinaryInterface
+{
+  char interface[GST_BINARY_REGISTRY_INTERFACE_INTERFACE_LEN];
+  unsigned long size;
+} GstBinaryInterface;
+
+/* Uri Type */
+typedef struct _GstBinaryUriType
+{
+  GstURIType type;
+  unsigned long nuriprotocols;
+} GstBinaryUriType;
+
+/* 
+** Function prototypes
+*/
+
+/* Local prototypes */
+inline static gboolean gst_registry_binary_write(GstRegistry *registry, const void *mem, const ssize_t size);
+inline static gboolean gst_registry_binary_initialize_magic(GstBinaryRegistryMagic *m);
+static gboolean gst_registry_binary_fill_feature(GList **list, GstPluginFeature *, GstBinaryPluginFeature *, const char *);
+static gboolean gst_registry_binary_save_plugin(GList **list, GstRegistry *registry, GstPlugin *plugin);
+static gchar *gst_registry_binary_check_magic(gchar *in);
+static GstPluginFeature *gst_registry_binary_load_feature(GstBinaryPluginFeature *);
+static unsigned long gst_registry_binary_get_binary_plugin(GstRegistry *registry, gchar *in);
+
+/* Exportable */
+gboolean gst_registry_binary_write_cache(GstRegistry *registry, const char *location);
+gboolean gst_registry_binary_read_cache(GstRegistry *registry, const char *location);
+
+#endif /* !__GST_REGISTRYBINARY_H__ */
+
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer_0.10.36.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer_0.10.36.bb
new file mode 100644
index 0000000..f61a410
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer-0.10/gstreamer_0.10.36.bb
@@ -0,0 +1,52 @@
+SUMMARY = "GStreamer multimedia framework"
+DESCRIPTION = "GStreamer is a multimedia framework for encoding and decoding video and sound. \
+It supports a wide range of formats including mp3, ogg, avi, mpeg and quicktime."
+HOMEPAGE = "http://gstreamer.freedesktop.org/"
+BUGTRACKER = "https://bugzilla.gnome.org/enter_bug.cgi?product=Gstreamer"
+SECTION = "multimedia"
+LICENSE = "LGPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=55ca817ccb7d5b5b66355690e9abc605 \
+                    file://gst/gst.h;beginline=1;endline=21;md5=8e5fe5e87d33a04479fde862e238eaa4"
+DEPENDS = "glib-2.0 libxml2 bison-native flex-native"
+
+PR = "r2"
+
+SRC_URI = "http://gstreamer.freedesktop.org/src/gstreamer/gstreamer-${PV}.tar.bz2 \
+           file://check_fix.patch \
+           file://gst-inspect-check-error.patch \
+           file://0001-baseparse-Fix-self-comparison-always-evaluates-to-tr.patch \
+           file://0001-parse-make-grammar.y-work-with-Bison-3.patch \
+"
+
+SRC_URI[md5sum] = "a0cf7d6877f694a1a2ad2b4d1ecb890b"
+SRC_URI[sha256sum] = "e556a529e0a8cf1cd0afd0cab2af5488c9524e7c3f409de29b5d82bb41ae7a30"
+
+inherit autotools pkgconfig gettext
+
+GSTREAMER_DEBUG ?= "--disable-debug"
+EXTRA_OECONF = "--disable-docbook --disable-gtk-doc \
+            --disable-dependency-tracking --disable-check \
+            --disable-examples --disable-tests \
+            --disable-valgrind ${GSTREAMER_DEBUG} \
+            --disable-introspection \
+            "
+
+CACHED_CONFIGUREVARS += "ac_cv_header_valgrind_valgrind_h=no"
+
+# apply gstreamer hack after Makefile.in.in in source is replaced by our version from
+# ${STAGING_DATADIR_NATIVE}/gettext/po/Makefile.in.in, but before configure is executed
+# http://lists.linuxtogo.org/pipermail/openembedded-core/2012-November/032233.html
+oe_runconf_prepend() {
+        sed -i -e "1a\\" -e 'GETTEXT_PACKAGE = @GETTEXT_PACKAGE@' ${S}/po/Makefile.in.in
+}
+
+#do_compile_prepend () {
+#	mv ${WORKDIR}/gstregistrybinary.[ch] ${S}/gst/
+#}
+
+RRECOMMENDS_${PN}_qemux86    += "kernel-module-snd-ens1370 kernel-module-snd-rawmidi"
+RRECOMMENDS_${PN}_qemux86-64 += "kernel-module-snd-ens1370 kernel-module-snd-rawmidi"
+
+FILES_${PN} += " ${libdir}/gstreamer-0.10/*.so"
+FILES_${PN}-dev += " ${libdir}/gstreamer-0.10/*.la ${libdir}/gstreamer-0.10/*.a"
+FILES_${PN}-dbg += " ${libdir}/gstreamer-0.10/.debug/ ${libexecdir}/gstreamer-0.10/.debug/"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer/files/display.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer/files/display.patch
new file mode 100644
index 0000000..61b0e6c
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer/files/display.patch
@@ -0,0 +1,60 @@
+Upstream-Status: Backport
+Signed-off-by: Ross Burton <ross.burton@intel.com>
+
+From 3e46d2e501da68d929bb5f26900a292a5fc04a1f Mon Sep 17 00:00:00 2001
+From: Stefan Westerfeld <stefan@space.twc.de>
+Date: Mon, 23 Apr 2012 03:10:22 +0200
+Subject: [PATCH] Fix time display updates (broken by introduction of quiet
+ mode).
+
+---
+ src/gst123.cc |    1 +
+ src/msg.cc    |    7 +++++++
+ src/msg.h     |    1 +
+ 3 files changed, 9 insertions(+)
+
+diff --git a/src/gst123.cc b/src/gst123.cc
+index 20e91e5..ce5876d 100644
+--- a/src/gst123.cc
++++ b/src/gst123.cc
+@@ -640,6 +640,7 @@ cb_print_position (gpointer *data)
+       else
+         blanks += "         ";
+       Msg::print ("%s%s\r", status.c_str(), blanks.c_str());
++      Msg::flush();
+     }
+ 
+   /* call me again */
+diff --git a/src/msg.cc b/src/msg.cc
+index 547cd90..33cada2 100644
+--- a/src/msg.cc
++++ b/src/msg.cc
+@@ -41,6 +41,13 @@ print (const char *format, ...)
+     }
+ }
+ 
++void
++flush()
++{
++  if (!Options::the().quiet)
++    fflush (stdout);
++}
++
+ }
+ 
+ }
+diff --git a/src/msg.h b/src/msg.h
+index e0ced24..5bebac0 100644
+--- a/src/msg.h
++++ b/src/msg.h
+@@ -27,6 +27,7 @@ namespace Msg
+ {
+ 
+ void print (const char *format, ...);
++void flush();
+ 
+ }
+ 
+-- 
+1.7.9.5
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer/gst123_0.3.1.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer/gst123_0.3.1.bb
new file mode 100644
index 0000000..47f1d9f
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/gstreamer/gst123_0.3.1.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Flexible CLI player in the spirit of mpg123, based on GStreamer"
+HOMEPAGE = "http://space.twc.de/~stefan/gst123.php"
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=5f30f0716dfdd0d91eb439ebec522ec2 \
+                    file://src/gst123.cc;beginline=1;endline=19;md5=05d2f5d54b985b986c26af931d2084f8"
+
+DEPENDS = "libx11 gstreamer gst-plugins-base gtk+ ncurses"
+
+SRC_URI = "http://space.twc.de/~stefan/gst123/${BPN}-${PV}.tar.bz2 \
+           file://display.patch"
+
+SRC_URI[md5sum] = "1e77767c9d6fecee5641f95804f160fe"
+SRC_URI[sha256sum] = "89d1de025eca0466c125dcd6a11b64341bdf98ee4c03c3e5a12321d77cb8b0ce"
+
+inherit autotools
+
+PNBLACKLIST[gst123] ?= "gst123 is still "sometimes" using wrong sysroot"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libao/libao_1.2.0.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libao/libao_1.2.0.bb
new file mode 100644
index 0000000..1339df6
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libao/libao_1.2.0.bb
@@ -0,0 +1,34 @@
+SUMMARY = "Cross-platform audio output library and plugins"
+DESCRIPTION = "Libao is a cross-platform audio library that allows programs to \
+               output audio using a simple API on a wide variety of platforms."
+SECTION = "multimedia"
+HOMEPAGE = "https://www.xiph.org/ao/"
+
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+SRC_URI="http://downloads.xiph.org/releases/ao/${BP}.tar.gz"
+SRC_URI[md5sum] = "9f5dd20d7e95fd0dd72df5353829f097"
+SRC_URI[sha256sum] = "03ad231ad1f9d64b52474392d63c31197b0bc7bd416e58b1c10a329a5ed89caf"
+
+inherit autotools
+
+PACKAGES += "${BPN}-ckport"
+PACKAGES_DYNAMIC += "^${BPN}-plugin-.*"
+
+do_install_append () {
+    find "${D}" -name '*.la' -exec rm -f {} +
+}
+
+python populate_packages_prepend () {
+    rootdir = bb.data.expand('${libdir}/ao/plugins-4', d)
+    rootdir_dbg = bb.data.expand('${libdir}/ao/plugins-4/.debug', d)
+    do_split_packages(d, rootdir, '^(.*)\.so$', output_pattern='${BPN}-plugin-%s', description='AO %s plugin')
+    do_split_packages(d, rootdir_dbg, '^(.*)\.so$', output_pattern='${BPN}-plugin-%s-dbg', description='AO %s plugin debug data')
+}
+
+PACKAGECONFIG ?= "${@bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', 'pulseaudio', '', d)} ${@bb.utils.contains('DISTRO_FEATURES', 'alsa', 'alsa', '', d)}"
+PACKAGECONFIG[esound] = "--enable-esd,--disable-esd,esound"
+PACKAGECONFIG[alsa] = "--enable-alsa,--disable-alsa,alsa-lib"
+PACKAGECONFIG[pulseaudio] = "--enable-pulse,--disable-pulse,pulseaudio"
+FILES_${BPN}-ckport = "${libdir}/ckport"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libavc1394/libavc1394_0.5.4.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libavc1394/libavc1394_0.5.4.bb
new file mode 100644
index 0000000..97e2bf1
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libavc1394/libavc1394_0.5.4.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "libavc1394 is a programming interface for the 1394 Trade \
+Association AV/C (Audio/Video Control) Digital Interface Command Set"
+HOMEPAGE = "http://sourceforge.net/projects/libavc1394/"
+SECTION = "libs/multimedia"
+
+DEPENDS = "libraw1394"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=dcf3c825659e82539645da41a7908589"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/${BPN}/${BP}.tar.gz"
+SRC_URI[md5sum] = "caf0db059d8b8d35d6f08e6c0e1c7dfe"
+SRC_URI[sha256sum] = "7cb1ff09506ae911ca9860bef4af08c2403f3e131f6c913a2cbd6ddca4215b53"
+
+inherit autotools pkgconfig
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/files/install_examples.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/files/install_examples.patch
new file mode 100755
index 0000000..89133ad
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/files/install_examples.patch
@@ -0,0 +1,14 @@
+Index: libdc1394/examples/Makefile.am
+===================================================================
+--- libdc1394.orig/examples/Makefile.am	2012-06-30 17:50:46.000000000 -0700
++++ libdc1394/examples/Makefile.am	2012-06-30 19:02:13.822646430 -0700
+@@ -36,8 +36,7 @@
+ AM_LDFLAGS = -framework CoreFoundation -framework Carbon
+ endif
+ 
+-noinst_PROGRAMS = $(A)
+-bin_PROGRAMS = $(B)
++bin_PROGRAMS = $(A) $(B)
+ 
+ LDADD = ../dc1394/libdc1394.la
+ 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/libdc1394_git.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/libdc1394_git.bb
new file mode 100755
index 0000000..0ea5cb9
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libdc1394/libdc1394_git.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Capture and control API for IIDC compliant cameras"
+HOMEPAGE = "http://sourceforge.net/projects/libdc1394/"
+SECTION = "libs"
+LICENSE = "LGPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=c848e78d9a4a5cc69906178e4d6fbd64"
+
+# libsdl to provide sdl.m4 with AM_PATH_SDL
+DEPENDS += "libusb1 libraw1394 libsdl"
+
+PV = "2.2.1+gitr${SRCPV}"
+
+SRCREV = "b90342933b4b48634b98b73805f47bd25ed5857e"
+
+SRC_URI = "git://git.code.sf.net/p/libdc1394/code;branch=master;protocol=git \
+           file://install_examples.patch \
+          "
+
+S = "${WORKDIR}/git/${PN}"
+
+inherit autotools-brokensep pkgconfig
+
+EXTRA_OECONF += "--disable-doxygen-doc --disable-examples"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libdvbpsi/libdvbpsi_1.3.0.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libdvbpsi/libdvbpsi_1.3.0.bb
new file mode 100644
index 0000000..48b0111
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libdvbpsi/libdvbpsi_1.3.0.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "libdvbpsi is a simple library designed for decoding \
+and generation of MPEG TS and DVB PSI tables according to standards \
+ISO/IEC 13818 and ITU-T H.222.0."
+HOMEPAGE = "http://www.videolan.org/developers/libdvbpsi.html"
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c"
+
+SRC_URI = "http://download.videolan.org/pub/libdvbpsi/${PV}/libdvbpsi-${PV}.tar.bz2"
+SRC_URI[md5sum] = "2b217039a1299000c39423441f77e76a"
+SRC_URI[sha256sum] = "a2fed1d11980662f919bbd1f29e2462719e0f6227e1a531310bd5a706db0a1fe"
+
+inherit autotools
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libdvdnav/libdvdnav_5.0.3.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libdvdnav/libdvdnav_5.0.3.bb
new file mode 100644
index 0000000..c2dd96f
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libdvdnav/libdvdnav_5.0.3.bb
@@ -0,0 +1,14 @@
+SUMMARY = "library for DVD navigation features"
+SECTION = "libs/multimedia"
+LICENSE = "GPLv2+"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+DEPENDS = "libdvdread"
+
+SRC_URI = "http://download.videolan.org/pub/videolan/${BPN}/${PV}/${BP}.tar.bz2"
+SRC_URI[md5sum] = "e9ea4de3bd8f204e61301d407d09f033"
+SRC_URI[sha256sum] = "5097023e3d2b36944c763f1df707ee06b19dc639b2b68fb30113a5f2cbf60b6d"
+
+inherit autotools lib_package binconfig pkgconfig
+
+CONFIGUREOPTS_remove = "--disable-silent-rules"
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libiec61883/libiec61883_1.2.0.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libiec61883/libiec61883_1.2.0.bb
new file mode 100644
index 0000000..e6079bd
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/libiec61883/libiec61883_1.2.0.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "An implementation of the most relevant parts of IEC 61883 over \
+libraw1394 for transmission, reception, and management of media streams and \
+devices such as DV, MPEG2-TS, audio, and MIDI"
+HOMEPAGE = "https://ieee1394.wiki.kernel.org/index.php/Libraries#libiec61883"
+SECTION = "libs/multimedia"
+
+DEPENDS = "libraw1394"
+
+LICENSE = "LGPLv2.1"
+LIC_FILES_CHKSUM = "file://COPYING;md5=771782cb6245c7fbbe74bc0ec059beff"
+
+SRC_URI = "https://www.kernel.org/pub/linux/libs/ieee1394/${BPN}-${PV}.tar.xz"
+SRC_URI[md5sum] = "ed91bc1727fac8e019402fc3724a283d"
+SRC_URI[sha256sum] = "d1e02c7e276fac37313a2f8c1c33d7a9e19282ff16f32e72435428ff5121f09e"
+
+inherit autotools pkgconfig
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/mpg123/mpg123_1.22.4.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/mpg123/mpg123_1.22.4.bb
new file mode 100644
index 0000000..e6a912b
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/mpg123/mpg123_1.22.4.bb
@@ -0,0 +1,65 @@
+SUMMARY = "Audio decoder for MPEG-1 Layer 1/2/3"
+DESCRIPTION = "The core of mpg123 is an MPEG-1 Layer 1/2/3 decoding library, which can be used by other programs. \
+mpg123 also comes with a command-line tool which can playback using ALSA, PulseAudio, OSS, and several other APIs, \
+and also can write the decoded audio to WAV."
+HOMEPAGE = "http://mpg123.de/"
+BUGTRACKER = "http://sourceforge.net/p/mpg123/bugs/"
+SECTION = "multimedia"
+
+LICENSE = "LGPLv2.1"
+LICENSE_FLAGS = "commercial"
+LIC_FILES_CHKSUM = "file://COPYING;md5=1e86753638d3cf2512528b99079bc4f3"
+
+DEPENDS = "audiofile"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/mpg123/mpg123/${PV}/${BP}.tar.bz2"
+
+SRC_URI[md5sum] = "2dfafae3bbc532b4c8b04a77c6a6de89"
+SRC_URI[sha256sum] = "5069e02e50138600f10cc5f7674e44e9bf6f1930af81d0e1d2f869b3c0ee40d2"
+
+inherit autotools pkgconfig
+
+# The options should be mutually exclusive for configuration script.
+# If both alsa and pulseaudio are specified (as in the default distro features)
+# pulseaudio takes precedence.
+PACKAGECONFIG_ALSA = "${@bb.utils.contains('DISTRO_FEATURES', 'alsa', 'alsa', '', d)}"
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', 'pulseaudio', '${PACKAGECONFIG_ALSA}', d)}"
+
+PACKAGECONFIG[alsa] = "--with-default-audio=alsa,,alsa-lib"
+PACKAGECONFIG[esd] = ",,esound"
+PACKAGECONFIG[jack] = ",,jack"
+PACKAGECONFIG[openal] = ",,openal-soft"
+PACKAGECONFIG[portaudio] = ",,portaudio-v19"
+PACKAGECONFIG[pulseaudio] = "--with-default-audio=pulse,,pulseaudio"
+PACKAGECONFIG[sdl] = ",,libsdl"
+
+# Following are possible sound output modules:
+# alsa arts coreaudio dummy esd jack nas openal os2 oss portaudio pulse sdl sndio sun tinyalsa win32 win32_wasapi
+AUDIOMODS += "${@bb.utils.contains('PACKAGECONFIG', 'alsa', 'alsa', '', d)}"
+AUDIOMODS += "${@bb.utils.contains('PACKAGECONFIG', 'esd', 'esd', '', d)}"
+AUDIOMODS += "${@bb.utils.contains('PACKAGECONFIG', 'jack', 'jack', '', d)}"
+AUDIOMODS += "${@bb.utils.contains('PACKAGECONFIG', 'openal', 'openal', '', d)}"
+AUDIOMODS += "${@bb.utils.contains('PACKAGECONFIG', 'portaudio', 'portaudio', '', d)}"
+AUDIOMODS += "${@bb.utils.contains('PACKAGECONFIG', 'pulseaudio', 'pulse', '', d)}"
+AUDIOMODS += "${@bb.utils.contains('PACKAGECONFIG', 'sdl', 'sdl', '', d)}"
+
+EXTRA_OECONF = " \
+    --enable-shared \
+    --with-audio='${AUDIOMODS}' \
+    --with-module-suffix=.so \
+    ${@bb.utils.contains('TUNE_FEATURES', 'neon', '--with-cpu=neon', '', d)} \
+    ${@bb.utils.contains('TUNE_FEATURES', 'altivec', '--with-cpu=altivec', '', d)} \
+"
+
+# The x86 assembler optimisations contains text relocations and there are no
+# upstream plans to fix them: http://sourceforge.net/p/mpg123/bugs/168/
+INSANE_SKIP_${PN}_append_x86 = " textrel"
+
+# Fails to build with thumb-1 (qemuarm)
+#| {standard input}: Assembler messages:
+#| {standard input}:47: Error: selected processor does not support Thumb mode `smull r5,r6,r7,r4'
+#| {standard input}:48: Error: shifts in CMP/MOV instructions are only supported in unified syntax -- `mov r5,r5,lsr#24'
+#...
+#| make[3]: *** [equalizer.lo] Error 1
+ARM_INSTRUCTION_SET_armv4 = "arm"
+ARM_INSTRUCTION_SET_armv5 = "arm"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/files/allow-libdir-override.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/files/allow-libdir-override.patch
new file mode 100644
index 0000000..d59d12e
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/files/allow-libdir-override.patch
@@ -0,0 +1,21 @@
+Allow LIB_INSTALL_DIR to be set by the the cmake configure invocation.  We dont
+easily have a way of determining something that patches ${LIB_SUFFIX} so we'll
+set LIB_INSTALL_DIR.
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
+
+Index: libmusicbrainz-3.0.3/CMakeLists.txt
+===================================================================
+--- libmusicbrainz-3.0.3.orig/CMakeLists.txt
++++ libmusicbrainz-3.0.3/CMakeLists.txt
+@@ -26,7 +26,7 @@ FIND_PACKAGE(DiscId)
+ SET(LIB_SUFFIX "" CACHE STRING "Define suffix of directory name (32/64)")
+ SET(EXEC_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX} CACHE PATH "Installation prefix for executables and object code libraries" FORCE)
+ SET(BIN_INSTALL_DIR ${EXEC_INSTALL_PREFIX}/bin CACHE PATH "Installation prefix for user executables" FORCE)
+-SET(LIB_INSTALL_DIR ${EXEC_INSTALL_PREFIX}/lib${LIB_SUFFIX} CACHE PATH  "Installation prefix for object code libraries" FORCE)
++SET(LIB_INSTALL_DIR ${EXEC_INSTALL_PREFIX}/lib${LIB_SUFFIX} CACHE PATH  "Installation prefix for object code libraries")
+ SET(INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_PREFIX}/include CACHE PATH "Installation prefix for C header files" FORCE)
+ 
+ CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/libmusicbrainz3.pc.cmake ${CMAKE_CURRENT_BINARY_DIR}/libmusicbrainz3.pc)
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/libmusicbrainz_git.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/libmusicbrainz_git.bb
new file mode 100644
index 0000000..a6a4f6a
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicbrainz/libmusicbrainz_git.bb
@@ -0,0 +1,41 @@
+SUMMARY = "MusicBrainz client library"
+DESCRIPTION = "The MusicBrainz client is a library which can be built into other programs.  The library allows you to access the data held on the MusicBrainz server."
+HOMEPAGE = "http://musicbrainz.org"
+LICENSE = "LGPLv2.1+"
+LIC_FILES_CHKSUM = "file://COPYING.txt;md5=fbc093901857fcd118f065f900982c24"
+DEPENDS = "expat neon neon-native"
+
+PV = "5.0.1+git${SRCPV}"
+PR = "r1"
+
+SRCREV = "0749dd0a35b4a54316da064475863a4ac6e28e7e"
+SRC_URI = "git://github.com/metabrainz/libmusicbrainz.git \
+           file://allow-libdir-override.patch "
+
+S = "${WORKDIR}/git"
+
+LDFLAGS_prepend_libc-uclibc = " -lpthread "
+
+inherit cmake pkgconfig
+
+do_configure_prepend() {
+    # The native build really doesn't like being rebuilt, so delete
+    # it if it's already present. Also delete all other files not
+    # known to Git to fix subsequent invocations of do_configure.
+    git clean -dfx -e /.pc/ -e /patches/ .
+    mkdir build-native
+    cd build-native
+    cmake -DCMAKE_C_FLAGS=${BUILD_CFLAGS} \
+          -DCMAKE_C_COMPILER=${BUILD_CC} \
+          -DCMAKE_CXX_FLAGS=${BUILD_CXXFLAGS} \
+          -DCMAKE_CXX_COMPILER=${BUILD_CXX} \
+          ..
+    make make-c-interface
+    cd ..
+}
+
+EXTRA_OECMAKE = "-DLIB_INSTALL_DIR:PATH=${libdir} \
+                 -DIMPORT_EXECUTABLES=build-native/ImportExecutables.cmake"
+
+# out-of-tree building doesn't appear to work for this package.
+B = "${S}"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/libmpd-11.8.17/glibc-2.20.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/libmpd-11.8.17/glibc-2.20.patch
new file mode 100644
index 0000000..4a2b25c
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/libmpd-11.8.17/glibc-2.20.patch
@@ -0,0 +1,10 @@
+--- libmpd-11.8.17/src/libmpd-internal.h.orig	2014-09-30 04:08:50.963292427 +0200
++++ libmpd-11.8.17/src/libmpd-internal.h	2014-09-30 04:08:30.595292223 +0200
+@@ -21,6 +21,7 @@
+ #define __MPD_INTERNAL_LIB_
+ 
+ #include "libmpdclient.h"
++#include "config.h"
+ struct _MpdData_real;
+ 
+ typedef struct _MpdData_real {
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/libmpd_11.8.17.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/libmpd_11.8.17.bb
new file mode 100644
index 0000000..54d7910
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/libmpd_11.8.17.bb
@@ -0,0 +1,13 @@
+SUMMARY = "Music Player Daemon library"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+HOMEPAGE ="http://sourceforge.net/projects/musicpd"
+DEPENDS = "glib-2.0"
+
+SRC_URI = "http://www.musicpd.org/download/${BPN}/${PV}/${BP}.tar.gz \
+    file://glibc-2.20.patch \
+"
+SRC_URI[md5sum] = "5ae3d87467d52aef3345407adb0a2488"
+SRC_URI[sha256sum] = "fe20326b0d10641f71c4673fae637bf9222a96e1712f71f170fca2fc34bf7a83"
+
+inherit autotools pkgconfig
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/mpd.conf.in b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/mpd.conf.in
new file mode 100644
index 0000000..f9f92c9
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd/mpd.conf.in
@@ -0,0 +1,420 @@
+# An example configuration file for MPD
+# See the mpd.conf man page for a more detailed description of each parameter.
+
+
+# Files and directories #######################################################
+#
+# This setting controls the top directory which MPD will search to discover the
+# available audio files and add them to the daemon's online database. This
+# setting defaults to the XDG directory, otherwise the music directory will be
+# be disabled and audio files will only be accepted over ipc socket (using
+# file:// protocol) or streaming files over an accepted protocol.
+#
+music_directory		"%music_directory%"
+#
+# This setting sets the MPD internal playlist directory. The purpose of this
+# directory is storage for playlists created by MPD. The server will use
+# playlist files not created by the server but only if they are in the MPD
+# format. This setting defaults to playlist saving being disabled.
+#
+playlist_directory		"%playlist_directory%"
+#
+# This setting sets the location of the MPD database. This file is used to
+# load the database at server start up and store the database while the
+# server is not up. This setting defaults to disabled which will allow
+# MPD to accept files over ipc socket (using file:// protocol) or streaming
+# files over an accepted protocol.
+#
+db_file			"%db_file%"
+#
+# These settings are the locations for the daemon log files for the daemon.
+# These logs are great for troubleshooting, depending on your log_level
+# settings.
+#
+# The special value "syslog" makes MPD use the local syslog daemon. This
+# setting defaults to logging to syslog, otherwise logging is disabled.
+#
+log_file			"%log_file%"
+#
+# This setting sets the location of the file which stores the process ID
+# for use of mpd --kill and some init scripts. This setting is disabled by
+# default and the pid file will not be stored.
+#
+#pid_file			"/var/run/mpd/mpd.pid"
+#
+# This setting sets the location of the file which contains information about
+# most variables to get MPD back into the same general shape it was in before
+# it was brought down. This setting is disabled by default and the server
+# state will be reset on server start up.
+#
+state_file		"%state_file%"
+#
+# The location of the sticker database.  This is a database which
+# manages dynamic information attached to songs.
+#
+#sticker_file			"~/.mpd/sticker.sql"
+#
+###############################################################################
+
+
+# General music daemon options ################################################
+#
+# This setting specifies the user that MPD will run as. MPD should never run as
+# root and you may use this setting to make MPD change its user ID after
+# initialization. This setting is disabled by default and MPD is run as the
+# current user.
+#
+user "mpd"
+#
+# This setting specifies the group that MPD will run as. If not specified
+# primary group of user specified with "user" setting will be used (if set).
+# This is useful if MPD needs to be a member of group such as "audio" to
+# have permission to use sound card.
+#
+group				"audio"
+#
+# This setting sets the address for the daemon to listen on. Careful attention
+# should be paid if this is assigned to anything other then the default, any.
+# This setting can deny access to control of the daemon.
+#
+# For network
+bind_to_address		"any"
+#
+# And for Unix Socket
+#bind_to_address		"~/.mpd/socket"
+#
+# This setting is the TCP port that is desired for the daemon to get assigned
+# to.
+#
+#port				"6600"
+#
+# This setting controls the type of information which is logged. Available
+# setting arguments are "default", "secure" or "verbose". The "verbose" setting
+# argument is recommended for troubleshooting, though can quickly stretch
+# available resources on limited hardware storage.
+#
+#log_level			"default"
+#
+# If you have a problem with your MP3s ending abruptly it is recommended that
+# you set this argument to "no" to attempt to fix the problem. If this solves
+# the problem, it is highly recommended to fix the MP3 files with vbrfix
+# (available from <http://www.willwap.co.uk/Programs/vbrfix.php>), at which
+# point gapless MP3 playback can be enabled.
+#
+#gapless_mp3_playback			"yes"
+#
+# This setting enables MPD to create playlists in a format usable by other
+# music players.
+#
+#save_absolute_paths_in_playlists	"no"
+#
+# This setting defines a list of tag types that will be extracted during the
+# audio file discovery process. Optionally, 'comment' can be added to this
+# list.
+#
+#metadata_to_use	"artist,album,title,track,name,genre,date,composer,performer,disc"
+#
+# This setting enables automatic update of MPD's database when files in
+# music_directory are changed.
+#
+#auto_update	"yes"
+#
+# Limit the depth of the directories being watched, 0 means only watch
+# the music directory itself.  There is no limit by default.
+#
+#auto_update_depth "3"
+#
+###############################################################################
+
+
+# Symbolic link behavior ######################################################
+#
+# If this setting is set to "yes", MPD will discover audio files by following
+# symbolic links outside of the configured music_directory.
+#
+#follow_outside_symlinks	"yes"
+#
+# If this setting is set to "yes", MPD will discover audio files by following
+# symbolic links inside of the configured music_directory.
+#
+#follow_inside_symlinks		"yes"
+#
+###############################################################################
+
+
+# Zeroconf / Avahi Service Discovery ##########################################
+#
+# If this setting is set to "yes", service information will be published with
+# Zeroconf / Avahi.
+#
+#zeroconf_enabled		"yes"
+#
+# The argument to this setting will be the Zeroconf / Avahi unique name for
+# this MPD server on the network.
+#
+#zeroconf_name			"Music Player"
+#
+###############################################################################
+
+
+# Permissions #################################################################
+#
+# If this setting is set, MPD will require password authorization. The password
+# can setting can be specified multiple times for different password profiles.
+#
+#password                        "password@read,add,control,admin"
+#
+# This setting specifies the permissions a user has who has not yet logged in.
+#
+#default_permissions             "read,add,control,admin"
+#
+###############################################################################
+
+
+# Input #######################################################################
+#
+
+input {
+        plugin "curl"
+#       proxy "proxy.isp.com:8080"
+#       proxy_user "user"
+#       proxy_password "password"
+}
+
+#
+###############################################################################
+
+# Audio Output ################################################################
+#
+# MPD supports various audio output types, as well as playing through multiple
+# audio outputs at the same time, through multiple audio_output settings
+# blocks. Setting this block is optional, though the server will only attempt
+# autodetection for one sound card.
+#
+# See <http://mpd.wikia.com/wiki/Configuration#Audio_Outputs> for examples of
+# other audio outputs.
+#
+# board specific examples #####################################################
+# (feel free to add futher)
+#
+# gumstix overo (tested with TOBI expansion board)
+#audio_output {
+#	type		"alsa"
+#	name		"overo"
+#	mixer_control	"Headset"
+#	mixer_index	"0"
+#}
+#
+# general examples ############################################################
+#
+# An example of an ALSA output:
+#
+#audio_output {
+#	type		"alsa"
+#	name		"My ALSA Device"
+##	device		"hw:0,0"	# optional
+##	format		"44100:16:2"	# optional
+##	mixer_type      "hardware"	# optional
+##	mixer_device	"default"	# optional
+##	mixer_control	"PCM"		# optional
+##	mixer_index	"0"		# optional
+#}
+#
+# An example of an OSS output:
+#
+#audio_output {
+#	type		"oss"
+#	name		"My OSS Device"
+##	device		"/dev/dsp"	# optional
+##	format		"44100:16:2"	# optional
+##	mixer_type      "hardware"	# optional
+##	mixer_device	"/dev/mixer"	# optional
+##	mixer_control	"PCM"		# optional
+#}
+#
+# An example of a shout output (for streaming to Icecast):
+#
+#audio_output {
+#	type		"shout"
+#	encoding	"ogg"			# optional
+#	name		"My Shout Stream"
+#	host		"localhost"
+#	port		"8000"
+#	mount		"/mpd.ogg"
+#	password	"hackme"
+#	quality		"5.0"
+#	bitrate		"128"
+#	format		"44100:16:1"
+##	protocol	"icecast2"		# optional
+##	user		"source"		# optional
+##	description	"My Stream Description"	# optional
+##	genre		"jazz"			# optional
+##	public		"no"			# optional
+##	timeout		"2"			# optional
+##	mixer_type      "software"		# optional
+#}
+#
+# An example of a recorder output:
+#
+#audio_output {
+#	type		"recorder"
+#	name		"My recorder"
+#	encoder		"vorbis"		# optional, vorbis or lame
+#	path		"/var/lib/mpd/recorder/mpd.ogg"
+##	quality		"5.0"			# do not define if bitrate is defined
+#	bitrate		"128"			# do not define if quality is defined
+#	format		"44100:16:1"
+#}
+#
+# An example of a httpd output (built-in HTTP streaming server):
+#
+#audio_output {
+#	type		"httpd"
+#	name		"My HTTP Stream"
+#	encoder		"vorbis"		# optional, vorbis or lame
+#	port		"8000"
+#	bind_to_address	"0.0.0.0"		# optional, IPv4 or IPv6
+##	quality		"5.0"			# do not define if bitrate is defined
+#	bitrate		"128"			# do not define if quality is defined
+#	format		"44100:16:1"
+#	max_clients	"0"			# optional 0=no limit
+#}
+#
+# An example of a pulseaudio output (streaming to a remote pulseaudio server)
+#
+#audio_output {
+#	type		"pulse"
+#	name		"My Pulse Output"
+##	server		"remote_server"		# optional
+##	sink		"remote_server_sink"	# optional
+#}
+#
+## Example "pipe" output:
+#
+#audio_output {
+#	type		"pipe"
+#	name		"my pipe"
+#	command		"aplay -f cd 2>/dev/null"
+## Or if you're want to use AudioCompress
+#	command		"AudioCompress -m | aplay -f cd 2>/dev/null"
+## Or to send raw PCM stream through PCM:
+#	command		"nc example.org 8765"
+#	format		"44100:16:2"
+#}
+#
+## An example of a null output (for no audio output):
+#
+#audio_output {
+#	type		"null"
+#	name		"My Null Output"
+#	mixer_type      "none"			# optional
+#}
+#
+# This setting will change all decoded audio to be converted to the specified
+# format before being passed to the audio outputs. By default, this setting is
+# disabled.
+#
+#audio_output_format		"44100:16:2"
+#
+# If MPD has been compiled with libsamplerate support, this setting specifies
+# the sample rate converter to use.  Possible values can be found in the
+# mpd.conf man page or the libsamplerate documentation. By default, this is
+# setting is disabled.
+#
+#samplerate_converter		"Fastest Sinc Interpolator"
+#
+###############################################################################
+
+
+# Normalization automatic volume adjustments ##################################
+#
+# This setting specifies the type of ReplayGain to use. This setting can have
+# the argument "off", "album" or "track". See <http://www.replaygain.org>
+# for more details. This setting is off by default.
+#
+#replaygain			"album"
+#
+# This setting sets the pre-amp used for files that have ReplayGain tags. By
+# default this setting is disabled.
+#
+#replaygain_preamp		"0"
+#
+# This setting enables on-the-fly normalization volume adjustment. This will
+# result in the volume of all playing audio to be adjusted so the output has
+# equal "loudness". This setting is disabled by default.
+#
+#volume_normalization		"no"
+#
+###############################################################################
+
+
+# MPD Internal Buffering ######################################################
+#
+# This setting adjusts the size of internal decoded audio buffering. Changing
+# this may have undesired effects. Don't change this if you don't know what you
+# are doing.
+#
+#audio_buffer_size		"2048"
+#
+# This setting controls the percentage of the buffer which is filled before
+# beginning to play. Increasing this reduces the chance of audio file skipping,
+# at the cost of increased time prior to audio playback.
+#
+#buffer_before_play		"10%"
+#
+###############################################################################
+
+
+# Resource Limitations ########################################################
+#
+# These settings are various limitations to prevent MPD from using too many
+# resources. Generally, these settings should be minimized to prevent security
+# risks, depending on the operating resources.
+#
+#connection_timeout		"60"
+#max_connections		"10"
+#max_playlist_length		"16384"
+#max_command_list_size		"2048"
+#max_output_buffer_size		"8192"
+#
+###############################################################################
+
+
+# Character Encoding ##########################################################
+#
+# If file or directory names do not display correctly for your locale then you
+# may need to modify this setting.
+#
+#filesystem_charset		"UTF-8"
+#
+# This setting controls the encoding that ID3v1 tags should be converted from.
+#
+#id3v1_encoding			"ISO-8859-1"
+#
+###############################################################################
+
+
+# SIDPlay decoder #############################################################
+#
+# songlength_database:
+#  Location of your songlengths file, as distributed with the HVSC.
+#  The sidplay plugin checks this for matching MD5 fingerprints.
+#  See http://www.c64.org/HVSC/DOCUMENTS/Songlengths.faq
+#
+# default_songlength:
+#  This is the default playing time in seconds for songs not in the
+#  songlength database, or in case you're not using a database.
+#  A value of 0 means play indefinitely.
+#
+# filter:
+#  Turns the SID filter emulation on or off.
+#
+#decoder {
+#	plugin			"sidplay"
+#	songlength_database	"/media/C64Music/DOCUMENTS/Songlengths.txt"
+#	default_songlength	"120"
+#	filter "true"
+#}
+#
+###############################################################################
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd_0.19.10.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd_0.19.10.bb
new file mode 100644
index 0000000..7b124ca
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/musicpd/mpd_0.19.10.bb
@@ -0,0 +1,59 @@
+SUMMARY = "Music Player Daemon"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+HOMEPAGE ="http://www.musicpd.org"
+
+DEPENDS = "alsa-lib libsamplerate0 libsndfile1 libvorbis libogg faad2 ffmpeg curl sqlite bzip2 pulseaudio tcp-wrappers openal-soft yajl jack faad2 flac libao fluidsynth libcdio wavpack libopus mpg123 libmms libmodplug boost icu dbus expat zlib libupnp"
+
+SRC_URI = " \
+    http://www.musicpd.org/download/${BPN}/0.19/${BP}.tar.xz \
+    file://mpd.conf.in \
+"
+SRC_URI[md5sum] = "da4bc3e47afd0faf9e7a67168e012102"
+SRC_URI[sha256sum] = "c386eb3d22f98dc993b5ae3c272f969aa7763713483c6800040ebf1791b15851"
+
+inherit autotools useradd systemd
+
+EXTRA_OECONF = "enable_bzip2=yes"
+EXTRA_OECONF += "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '--with-systemdsystemunitdir=${systemd_unitdir}/system/', '--without-systemdsystemunitdir', d)}"
+
+PACKAGECONFIG[mad] = "--enable-mad,--disable-mad,libmad"
+PACKAGECONFIG[id3tag] = "--enable-id3,--disable-id3,libid3tag"
+PACKAGECONFIG[lame] = "--enable-lame-encoder,--disable-lame-encoder,lame"
+PACKAGECONFIG[smb] = "--enable-smbclient,--disable-smbclient,samba"
+
+do_install_append() {
+    install -d ${D}/${localstatedir}/lib/mpd/music
+    chmod 775 ${D}/${localstatedir}/lib/mpd/music
+    install -d ${D}/${localstatedir}/lib/mpd/playlists
+    chown -R mpd ${D}/${localstatedir}/lib/mpd
+    chown mpd:mpd ${D}/${localstatedir}/lib/mpd/music
+
+    install -d ${D}/${sysconfdir}
+    install -m 644 ${WORKDIR}/mpd.conf.in ${D}/${sysconfdir}/mpd.conf
+    sed -i \
+        -e 's|%music_directory%|${localstatedir}/lib/mpd/music|' \
+        -e 's|%playlist_directory%|${localstatedir}/lib/mpd/playlists|' \
+        -e 's|%db_file%|${localstatedir}/lib/mpd/mpd.db|' \
+        -e 's|%log_file%|${localstatedir}/log/mpd.log|' \
+        -e 's|%state_file%|${localstatedir}/lib/mpd/state|' \
+        ${D}/${sysconfdir}/mpd.conf
+
+    if [ -e ${D}/${systemd_unitdir}/system/mpd.service ] ; then
+        sed -i \
+            's|^ExecStart=.*|ExecStart=${bindir}/mpd --no-daemon|' \
+            ${D}/${systemd_unitdir}/system/mpd.service
+    fi
+}
+
+RPROVIDES_${PN} += "${PN}-systemd"
+RREPLACES_${PN} += "${PN}-systemd"
+RCONFLICTS_${PN} += "${PN}-systemd"
+SYSTEMD_SERVICE_${PN} = "mpd.service mpd.socket"
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM_${PN} = " \
+    --system --no-create-home \
+    --home ${localstatedir}/lib/mpd \
+    --groups audio \
+    --user-group mpd"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/openal/openal-soft_1.15.1.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/openal/openal-soft_1.15.1.bb
new file mode 100644
index 0000000..5895234
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/openal/openal-soft_1.15.1.bb
@@ -0,0 +1,23 @@
+SUMMARY = "OpenAL is a cross-platform 3D audio API"
+HOMEPAGE = "http://kcat.strangesoft.net/openal.html"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=facc3a8f452930083bbb95d82b989c35"
+
+inherit cmake
+
+SRC_URI = "http://kcat.strangesoft.net/openal-releases/${BP}.tar.bz2"
+SRC_URI[md5sum] = "ea83dec3b9655a27d28e7bc7cae9cd71"
+SRC_URI[sha256sum] = "0e29a162f0841ccb4135ce76e92e8a704589b680a85eddf76f898de5236eb056"
+
+PACKAGECONFIG ?= "\
+    ${@bb.utils.contains('DISTRO_FEATURES', 'alsa', 'alsa', '', d)} \
+    ${@bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', 'pulseaudio', '', d)} \
+"
+PACKAGECONFIG[alsa] = "-DALSA=TRUE, -DALSA=FALSE, alsa-lib"
+PACKAGECONFIG[pulseaudio] = "-DPULSEAUDIO=TRUE, -DPULSEAUDIO=FALSE, pulseaudio"
+# currently doesn't work with libav-9
+# PKG_CHECK_MODULES(FFMPEG libavcodec>=53.61.100 libavformat>=53.32.100 libavutil>=51.35.100)
+# but alffmpeg.c:418:44: error: 'AV_CH_LAYOUT_MONO' undeclared (first use in this function)
+PACKAGECONFIG[examples] = "-DEXAMPLES=TRUE, -DEXAMPLES=FALSE, libav"
+
+FILES_${PN} += "${datadir}/openal"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/opencore-amr_0.1.3.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/opencore-amr_0.1.3.bb
new file mode 100644
index 0000000..ab5813e
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/opencore-amr_0.1.3.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "OpenCORE Adaptive Multi Rate (AMR) speech codec library implementation"
+HOMEPAGE = "http://sourceforge.net/projects/opencore-amr/"
+SECTION = "libs"
+
+LICENSE = "Apache-2.0"
+LICENSE_FLAGS = "commercial"
+LIC_FILES_CHKSUM = "file://COPYING;md5=dd2c2486aca02190153cf399e508c7e7"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/opencore-amr/${BP}.tar.gz"
+SRC_URI[md5sum] = "09d2c5dfb43a9f6e9fec8b1ae678e725"
+SRC_URI[sha256sum] = "106bf811c1f36444d7671d8fd2589f8b2e0cca58a2c764da62ffc4a070595385"
+
+inherit autotools
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/vo-aacenc_0.1.3.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/vo-aacenc_0.1.3.bb
new file mode 100644
index 0000000..ce37362
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/vo-aacenc_0.1.3.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "VisualOn Advanced Audio Coding (AAC) encoder"
+HOMEPAGE = "http://sourceforge.net/projects/opencore-amr/"
+SECTION = "libs"
+
+LICENSE = "Apache-2.0"
+LICENSE_FLAGS = "commercial"
+LIC_FILES_CHKSUM = "file://COPYING;md5=dd2c2486aca02190153cf399e508c7e7"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/opencore-amr/${BP}.tar.gz"
+SRC_URI[md5sum] = "b574da1d92d75fc40b0b75aa16f24ac4"
+SRC_URI[sha256sum] = "e51a7477a359f18df7c4f82d195dab4e14e7414cbd48cf79cc195fc446850f36"
+
+inherit autotools
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/vo-amrwbenc_0.1.3.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/vo-amrwbenc_0.1.3.bb
new file mode 100644
index 0000000..cc049ed
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/opencore-amr/vo-amrwbenc_0.1.3.bb
@@ -0,0 +1,13 @@
+DESCRIPTION = "VisualOn Adaptive Multi Rate Wideband (AMR-WB) encoder"
+HOMEPAGE = "http://sourceforge.net/projects/opencore-amr/"
+SECTION = "libs"
+
+LICENSE = "Apache-2.0"
+LICENSE_FLAGS = "commercial"
+LIC_FILES_CHKSUM = "file://COPYING;md5=dd2c2486aca02190153cf399e508c7e7"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/opencore-amr/${BP}.tar.gz"
+SRC_URI[md5sum] = "f63bb92bde0b1583cb3cb344c12922e0"
+SRC_URI[sha256sum] = "5652b391e0f0e296417b841b02987d3fd33e6c0af342c69542cbb016a71d9d4e"
+
+inherit autotools
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/rtmpdump/rtmpdump/fix-racing-build-issue.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/rtmpdump/rtmpdump/fix-racing-build-issue.patch
new file mode 100644
index 0000000..bb3d8b0
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/rtmpdump/rtmpdump/fix-racing-build-issue.patch
@@ -0,0 +1,18 @@
+Make sure libdir (SODIR) is created when running parallel make.
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Andrei Gherzan <andrei@gherzan.ro>
+
+Index: git/librtmp/Makefile
+===================================================================
+--- git.orig/librtmp/Makefile
++++ git/librtmp/Makefile
+@@ -107,6 +107,7 @@ install_base:	librtmp.a librtmp.pc
+ 	cp librtmp.3 $(MANDIR)/man3
+ 
+ install_so:	librtmp.$(SO_EXT)
++	-mkdir -p $(SODIR)
+ 	cp librtmp.$(SO_EXT) $(SODIR)
+ 	cd $(SODIR); ln -sf librtmp.$(SO_EXT) librtmp.$(SOX)
+ 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/rtmpdump/rtmpdump_2.4.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/rtmpdump/rtmpdump_2.4.bb
new file mode 100644
index 0000000..a1e6502
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/rtmpdump/rtmpdump_2.4.bb
@@ -0,0 +1,22 @@
+SUMMARY = "RTMP Dump"
+DESCRIPTION = "rtmpdump is a toolkit for RTMP streams. All forms of RTMP are \
+supported, including rtmp://, rtmpt://, rtmpe://, rtmpte://, and rtmps://."
+HOMEPAGE = "http://rtmpdump.mplayerhq.hu/"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe"
+
+DEPENDS = "openssl zlib"
+
+SRCREV = "3121324046e4ca1934e7e28293fc8326475d5053"
+SRC_URI = " \
+    git://git.ffmpeg.org/rtmpdump \
+    file://fix-racing-build-issue.patch"
+
+S = "${WORKDIR}/git"
+
+inherit autotools-brokensep
+
+EXTRA_OEMAKE = " \
+    CC='${CC}' LD='${LD} ${STAGING_LIBDIR}' \
+    SYS=posix INC=-I=/usr/include DESTDIR=${D} \
+    prefix=${prefix} libdir=${libdir} incdir=${includedir}/librtmp bindir=${bindir} mandir=${mandir}"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-1080p.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-1080p.bb
new file mode 100644
index 0000000..e91ba45
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-1080p.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Big Buck Bunny movie - 1080P"
+LICENSE = "CC-BY-3.0"
+# http://www.bigbuckbunny.org/index.php/about/
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/CC-BY-3.0;md5=dfa02b5755629022e267f10b9c0a2ab7"
+
+SRC_URI = "http://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_1080p_surround.avi"
+SRC_URI[md5sum] = "223991c8b33564eb77988a4c13c1c76a"
+SRC_URI[sha256sum] = "69fe2cfe7154a6e752688e3a0d7d6b07b1605bbaf75b56f6470dc7b4c20c06ea"
+
+inherit allarch
+
+do_install() {
+	install -d ${D}${datadir}/movies
+	install -m 0644 ${WORKDIR}/big_buck_bunny_1080p_surround.avi ${D}${datadir}/movies/
+}
+
+FILES_${PN} += "${datadir}/movies"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-480p.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-480p.bb
new file mode 100644
index 0000000..e7029d9
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-480p.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Big Buck Bunny movie - 480P"
+LICENSE = "CC-BY-3.0"
+# http://www.bigbuckbunny.org/index.php/about/
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/CC-BY-3.0;md5=dfa02b5755629022e267f10b9c0a2ab7"
+
+SRC_URI = "http://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_480p_surround-fix.avi"
+SRC_URI[md5sum] = "ed7ed01e9aefba8ddd77c13332cec120"
+SRC_URI[sha256sum] = "40d1cf5bc8e1b0e55dac7bb2e3fbc2aea05b6679444864781299b24db044634f"
+
+inherit allarch
+
+do_install() {
+	install -d ${D}${datadir}/movies
+	install -m 0644 ${WORKDIR}/big_buck_bunny_480p_surround-fix.avi ${D}${datadir}/movies/
+}
+
+FILES_${PN} += "${datadir}/movies"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-720p.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-720p.bb
new file mode 100644
index 0000000..55fceab
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/bigbuckbunny-720p.bb
@@ -0,0 +1,17 @@
+SUMMARY = "Big Buck Bunny movie - 720P"
+LICENSE = "CC-BY-3.0"
+# http://www.bigbuckbunny.org/index.php/about/
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/CC-BY-3.0;md5=dfa02b5755629022e267f10b9c0a2ab7"
+
+SRC_URI = "http://download.blender.org/peach/bigbuckbunny_movies/big_buck_bunny_720p_surround.avi"
+SRC_URI[md5sum] = "0da8fe124595f5b206d64cb1400bbefc"
+SRC_URI[sha256sum] = "b957d6e6212638441b52d3b620af157cc8d40c2a0342669294854a06edcd528c"
+
+inherit allarch
+
+do_install() {
+	install -d ${D}${datadir}/movies
+	install -m 0644 ${WORKDIR}/big_buck_bunny_720p_surround.avi ${D}${datadir}/movies/
+}
+
+FILES_${PN} += "${datadir}/movies"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/tearsofsteel-1080p.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/tearsofsteel-1080p.bb
new file mode 100644
index 0000000..bb7ee7c
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sample-content/tearsofsteel-1080p.bb
@@ -0,0 +1,16 @@
+SUMMARY = "Tears of Steel movie - 1080P"
+LICENSE = "CC-BY-3.0"
+LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/CC-BY-3.0;md5=dfa02b5755629022e267f10b9c0a2ab7"
+
+SRC_URI = "http://ftp.nluug.nl/pub/graphics/blender/demo/movies/ToS/ToS-4k-1920.mov"
+SRC_URI[md5sum] = "e3fee55b1779c553e37b1d3988e6fad6"
+SRC_URI[sha256sum] = "bd2b5bc6c16d4085034f47ef7e4b3938afe86b4eec4ac3cf2685367d3b0b23b0"
+
+inherit allarch
+
+do_install() {
+	install -d ${D}${datadir}/movies
+	install -m 0644 ${WORKDIR}/ToS-4k-1920.mov ${D}${datadir}/movies/
+}
+
+FILES_${PN} += "${datadir}/movies"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger/configure.ac.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger/configure.ac.patch
new file mode 100644
index 0000000..2ed8d22
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger/configure.ac.patch
@@ -0,0 +1,20 @@
+Use the version of orcc in the sysroot not the one from the host
+
+Signed-off-by: Dongxiao Xu <dongxiao.xu@intel.com>
+Signed-off-by: Paul Eggleton <paul.eggleton@linux.intel.com>
+
+Upstream-Status: Inappropriate [configuration]
+
+Index: schroedinger-1.0.9/configure.ac
+===================================================================
+--- schroedinger-1.0.9.orig/configure.ac
++++ schroedinger-1.0.9/configure.ac
+@@ -54,7 +54,7 @@ if test "x${HAVE_ORC}" != xyes ; then
+   AC_ERROR([orc-0.4 >= $ORC_VER is required])
+ fi
+ SCHRO_PKG_DEPS="$SCHRO_PKG_DEPS orc-0.4 >= $ORC_VER"
+-ORCC=`$PKG_CONFIG --variable=orcc orc-0.4`
++ORCC=$STAGING_DIR`$PKG_CONFIG --variable=orcc orc-0.4`
+ AC_SUBST(ORCC)
+ 
+ AC_ARG_WITH([thread],
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger_1.0.11.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger_1.0.11.bb
new file mode 100644
index 0000000..d38eb94
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/schroedinger/schroedinger_1.0.11.bb
@@ -0,0 +1,22 @@
+SUMMARY = "Dirac compressed video encoder/decoder"
+HOMEPAGE = "http://schrodinger.sourceforge.net/"
+LICENSE = "MPL-1.1 | GPLv2 | LGPLv2 | MIT"
+
+LIC_FILES_CHKSUM = "file://COPYING;md5=d91a46405fc074b88c963cc4f2a0aae9 \
+                    file://COPYING.GPL;md5=e181e3b7c66f5f96921d813c1074f833 \
+                    file://COPYING.LGPL;md5=38c893e21baec4cd75ad800ba9e2410a \
+                    file://COPYING.MIT;md5=8b345371b3536b4ce37ead1eafc88221 \
+                    file://COPYING.MPL;md5=0117647fecb9a932c25a7bbfc0333c37"
+
+DEPENDS = "liboil orc-native orc"
+
+SRC_URI = "http://www.diracvideo.org/download/schroedinger/${BP}.tar.gz \
+           file://configure.ac.patch"
+
+SRC_URI[md5sum] = "da6af08e564ca1157348fb8d92efc891"
+SRC_URI[sha256sum] = "1e572a0735b92aca5746c4528f9bebd35aa0ccf8619b22fa2756137a8cc9f912"
+
+EXTRA_OECONF += "STAGING_DIR=${STAGING_DIR_NATIVE}"
+
+inherit autotools-brokensep pkgconfig
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox_14.4.0.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox_14.4.0.bb
new file mode 100644
index 0000000..4b73aa3
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/sox/sox_14.4.0.bb
@@ -0,0 +1,38 @@
+DESCRIPTION="SoX is the Swiss Army knife of sound processing tools. \
+It converts audio files among various standard audio file formats \
+and can apply different effects and filters to the audio data."
+HOMEPAGE = "http://sox.sourceforge.net"
+SECTION = "audio"
+
+DEPENDS = "libpng ffmpeg libsndfile1 libvorbis"
+
+PR = "r2"
+
+PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', 'pulseaudio', '', d)} \
+                   ${@bb.utils.contains('DISTRO_FEATURES', 'alsa', 'alsa', '', d)} \
+                   magic \
+"
+PACKAGECONFIG[pulseaudio] = "--with-pulseaudio=dyn,--with-pulseaudio=no,pulseaudio,"
+PACKAGECONFIG[alsa] = "--with-alsa=dyn,--with-alsa=no,alsa-lib,"
+PACKAGECONFIG[wavpack] = "--with-wavpack=dyn,--with-wavpack=no,wavpack,"
+PACKAGECONFIG[flac] = "--with-flac=dyn,--with-flac=no,flac,"
+PACKAGECONFIG[amrwb] = "--with-amrwb=dyn,--with-amrwb=no,opencore-amr,"
+PACKAGECONFIG[amrnb] = "--with-amrnb=dyn,--with-amrnb=no,opencore-amr,"
+PACKAGECONFIG[magic] = "--with-magic,--without-magic,file,"
+PACKAGECONFIG[mad] = "--with-mad,--without-mad,libmad,"
+PACKAGECONFIG[id3tag] = "--with-id3tag,--without-id3tag,libid3tag,"
+PACKAGECONFIG[lame] = "--with-lame,--without-lame,lame,"
+PACKAGECONFIG[ao] = "--with-ao,--without-ao,libao,"
+
+LICENSE = "GPLv2 & LGPLv2.1"
+LIC_FILES_CHKSUM = "file://LICENSE.GPL;md5=751419260aa954499f7abaabaa882bbe \
+                    file://LICENSE.LGPL;md5=fbc093901857fcd118f065f900982c24"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/sox/sox-${PV}.tar.gz"
+SRC_URI[md5sum] = "b0c15cff7a4ba0ec17fdc74e6a1f9cf1"
+SRC_URI[sha256sum] = "3ee34b14dd267de378e8a117aae81ec4cae330772342e6a55bbf6520a0a88aa3"
+
+inherit autotools
+
+BBCLASSEXTEND = "native"
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/libdvdcss_1.3.0.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/libdvdcss_1.3.0.bb
new file mode 100644
index 0000000..79e64ae
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/libdvdcss_1.3.0.bb
@@ -0,0 +1,12 @@
+DESCRIPTION = "libdvdcss is a simple library designed for accessing DVDs like a block device without having to bother about the decryption."
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+SRC_URI = "http://download.videolan.org/pub/libdvdcss/${PV}/libdvdcss-${PV}.tar.bz2"
+
+inherit autotools
+
+EXTRA_OECONF = " --disable-doc "
+
+SRC_URI[md5sum] = "7f0fdb3ff91d638f5e45ed7536f7eb67"
+SRC_URI[sha256sum] = "7c414acd520c4e4dd7267952f72d738ff50321a7869af4d75c65aefad44f1395"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc.inc b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc.inc
new file mode 100644
index 0000000..8142e16
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc.inc
@@ -0,0 +1,106 @@
+DESCRIPTION = "Video player and streamer - davinci edition"
+HOMEPAGE = "http://www.videolan.org"
+SECTION = "multimedia"
+
+LICENSE = "GPL-2.0"
+LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263"
+
+DEPENDS = "libfribidi libtool libgcrypt libgcrypt-native \
+   dbus dbus-glib libxml2 gnutls \
+   tremor faad2 ffmpeg flac fluidsynth alsa-lib \
+   lua-native lua libidn \
+   avahi jpeg xz libmodplug mpeg2dec \
+   libmtp libopus orc libsamplerate0 libusb1 schroedinger taglib \
+   tiff"
+
+SRC_URI = "http://download.videolan.org/pub/videolan/${BPN}/${PV}/${BP}.tar.xz"
+
+inherit autotools gettext pkgconfig distro_features_check
+
+ARM_INSTRUCTION_SET = "arm"
+
+EXTRA_OECONF = "\
+    --enable-run-as-root \
+    --enable-xvideo \ 
+    --disable-screen --disable-caca \
+    --enable-httpd --enable-vlm \
+    --enable-freetype \
+    --enable-tremor \
+    --enable-v4l2 --disable-aa --disable-faad \
+    --enable-dbus \
+    --without-contrib \
+    --without-kde-solid \
+    --enable-realrtsp \
+    --disable-libtar \
+    ac_cv_path_MOC=${STAGING_BINDIR_NATIVE}/moc4 \
+    ac_cv_path_RCC=${STAGING_BINDIR_NATIVE}/rcc4 \
+    ac_cv_path_UIC=${STAGING_BINDIR_NATIVE}/uic4 \
+"
+
+PACKAGECONFIG ?= " live555 dc1394 dv1394 notify fontconfig freetype dvdread png ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11 sdl', '', d)}"
+PACKAGECONFIG[mad] = "--enable-mad,--disable-mad,libmad"
+PACKAGECONFIG[sdl] = "--enable-sdl,--disable-sdl,virtual/libsdl libsdl-image "
+PACKAGECONFIG[a52] = "--enable-a52,--disable-a52,liba52"
+PACKAGECONFIG[jack] = "--enable-jack,--disable-jack,jack"
+PACKAGECONFIG[live555] = "--enable-live555,--disable-live555,live555"
+PACKAGECONFIG[libass] = "--enable-libass,--disable-libass,libass"
+PACKAGECONFIG[mkv] = "--enable-mkv,--disable-mkv,libmatroska libebml"
+PACKAGECONFIG[postproc] = "--enable-postproc,--disable-postproc,libpostproc"
+PACKAGECONFIG[opencv] = "--enable-opencv,--disable-opencv,opencv"
+PACKAGECONFIG[libva] = "--enable-libva --enable-avcodec,--disable-libva --disable-avcodec,libva libav"
+PACKAGECONFIG[speex] = "--enable-speex,--disable-speex,speex"
+PACKAGECONFIG[gstreamer] = "--enable-gst-decode,--disable-gst-decode,gstreamer1.0 gstreamer1.0-plugins-base gst-plugins-bad"
+PACKAGECONFIG[vpx] = "--enable-vpx,--disable-vpx, libvpx"
+PACKAGECONFIG[qt4] = "--enable-qt,--disable-qt, qt4-x11-free"
+PACKAGECONFIG[freerdp] = "--enable-freerdp,--disable-freerdp, freerdp"
+PACKAGECONFIG[dvbpsi] = "--enable-dvbpsi,--disable-dvbpsi, libdvbpsi"
+PACKAGECONFIG[gnome-vfs] = "--enable-gnomevfs,--disable-gnomevfs, gnome-vfs"
+PACKAGECONFIG[samba] = "--enable-smbclient,--disable-smbclient, samba"
+PACKAGECONFIG[upnp] = "--enable-upnp,--disable-upnp,libupnp"
+PACKAGECONFIG[dvdnav] = "--enable-dvdnav,--disable-dvdnav,libdvdnav libdvdcss"
+PACKAGECONFIG[sftp] = "--enable-sftp,--disable-sftp,libssh2"
+PACKAGECONFIG[vorbis] = "--enable-vorbis,--disable-vorbis,libvorbis libogg"
+PACKAGECONFIG[ogg] = "--enable-ogg,--disable-ogg,libvorbis libogg"
+PACKAGECONFIG[dc1394] = "--enable-dc1394,--disable-dc1394,libdc1394"
+PACKAGECONFIG[dv1394] = "--enable-dv1394,--disable-dv1394,libraw1394 libavc1394"
+PACKAGECONFIG[svg] = "--enable-svg,--disable-svg,librsvg"
+PACKAGECONFIG[svgdec] = "--enable-svgdec,--disable-svgdec,librsvg cairo"
+PACKAGECONFIG[notify] = "--enable-notify,--disable-notify, libnotify gtk+"
+PACKAGECONFIG[fontconfig] = "--enable-fontconfig,--disable-fontconfig, fontconfig"
+PACKAGECONFIG[freetype] = "--enable-freetype,--disable-freetype, freetype"
+PACKAGECONFIG[dvdread] = "--enable-dvdread,--disable-dvdread, libdvdread libdvdcss"
+PACKAGECONFIG[vnc] = "--enable-vnc,--disable-vnc, libvncserver"
+PACKAGECONFIG[x11] = "--with-x --enable-xcb,--without-x --disable-xcb,  xcb-util-keysyms libxpm libxinerama"
+PACKAGECONFIG[png] = "--enable-png,--disable-png,libpng"
+
+do_configure_prepend() {
+    cp ${STAGING_DATADIR}/libtool/config.* ${S}/autotools/ || true
+}
+
+do_configure_append() {
+    sed -i -e s:'$(MOC) $(DEFS) $(CPPFLAGS)':'$(MOC) $(DEFS)'\ -I${B}/include\ -DSYS_LINUX:g ${B}/modules/gui/qt4/Makefile
+    sed -i -e s:'${top_builddir_slash}libtool':'${top_builddir_slash}'${TARGET_SYS}-libtool:g ${B}/doltlibtool
+}
+
+# This recipe packages vlc as a library as well, so qt4 dependencies
+# can be avoided when only the library is installed.
+PACKAGES =+ "libvlc"
+
+LEAD_SONAME_libvlc = "libvlc.so.5"
+FILES_libvlc = "${libdir}/lib*.so.*"
+
+FILES_${PN} += "\
+    ${bindir}/vlc \
+    ${datadir}/applications \
+    ${datadir}/vlc/ \
+    ${datadir}/icons \
+"
+
+FILES_${PN}-dbg += "\
+    ${libdir}/vlc/*/.debug \
+    ${libdir}/vlc/plugins/*/.debug \
+"
+
+FILES_${PN}-staticdev += "\
+    ${libdir}/vlc/plugins/*/*.a \
+"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0001-enable-subdir-objects.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0001-enable-subdir-objects.patch
new file mode 100644
index 0000000..9f0e708
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0001-enable-subdir-objects.patch
@@ -0,0 +1,13 @@
+Index: vlc-2.1.2/configure.ac
+===================================================================
+--- vlc-2.1.2.orig/configure.ac
++++ vlc-2.1.2/configure.ac
+@@ -24,7 +24,7 @@ AC_CANONICAL_BUILD
+ AC_CANONICAL_HOST
+ AC_PRESERVE_HELP_ORDER
+ 
+-AM_INIT_AUTOMAKE(tar-ustar color-tests foreign)
++AM_INIT_AUTOMAKE(tar-ustar color-tests foreign subdir-objects)
+ AC_CONFIG_HEADERS([config.h])
+ 
+ # Disable with "./configure --disable-silent-rules" or "make V=1"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0002-glibc-does-not-provide-strlcpy.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0002-glibc-does-not-provide-strlcpy.patch
new file mode 100644
index 0000000..6d2a46f
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0002-glibc-does-not-provide-strlcpy.patch
@@ -0,0 +1,17 @@
+Index: vlc-2.1.2/src/input/subtitles.c
+===================================================================
+--- vlc-2.1.2.orig/src/input/subtitles.c
++++ vlc-2.1.2/src/input/subtitles.c
+@@ -44,6 +44,12 @@
+ #include "input_internal.h"
+ 
+ /**
++ * Drepper's alternative 
++ * http://en.wikibooks.org/wiki/C_Programming/C_Reference/nonstandard/strlcpy
++ */
++#define strlcpy(dst, src, n) *((char* ) mempcpy(dst, src, n)) = '\0'
++
++/**
+  * We are not going to autodetect more subtitle files than this.
+  */
+ #define MAX_SUBTITLE_FILES 128
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0003-use-am-path-libgcrypt.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0003-use-am-path-libgcrypt.patch
new file mode 100644
index 0000000..8e881d0
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0003-use-am-path-libgcrypt.patch
@@ -0,0 +1,46 @@
+* The upstream tests for libgcrypt are awkward and not working.
+  - Requires libgcrypt-config, which seems broken?
+* AM_PATH_LIBGCRYPT exists for a reason, why not use it? KISS.
+* Upstream abandoned AM_PATH_LIBGCRYPT in the past...newer automake ok?
+
+Upstream status: Pending
+
+Index: vlc-2.2.1/configure.ac
+===================================================================
+--- vlc-2.2.1.orig/configure.ac
++++ vlc-2.2.1/configure.ac
+@@ -4017,25 +4017,19 @@ PKG_ENABLE_MODULES_VLC([LIBXML2], [xml],
+ dnl
+ dnl libgcrypt
+ dnl
++GCRYPT_LIBVER=1
++GCRYPT_REQ=1.1.94
+ AC_ARG_ENABLE(libgcrypt,
+   [  --disable-libgcrypt     gcrypt support (default enabled)])
+ AS_IF([test "${enable_libgcrypt}" != "no"], [
+-  AC_CHECK_DECL([GCRYCTL_SET_THREAD_CBS], [
+-    libgcrypt-config --version >/dev/null || \
+-        AC_MSG_ERROR([gcrypt.h present but libgcrypt-config could not be found])
+-    AC_CHECK_LIB(gcrypt, gcry_control, [
+-      have_libgcrypt="yes"
+-      GCRYPT_CFLAGS="`libgcrypt-config --cflags`"
+-      GCRYPT_LIBS="`libgcrypt-config --libs`"
+-    ], [
+-      AC_MSG_ERROR([libgcrypt not found. Install libgcrypt or pass --disable-libgcrypt.])
+-    ], [`libgcrypt-config --libs`])
+-  ], [
+-    AC_MSG_ERROR([libgcrypt version 1.1.94 or higher not found. Install libgcrypt or pass --disable-libgcrypt.])
+-  ], [#include <gcrypt.h>]
+-  )
++      AM_PATH_LIBGCRYPT($GCRYPT_LIBVER:$GCRYPT_REQ,
++      [
++          GCRYPT_CFLAGS="$LIBGCRYPT_CFLAGS"
++          GCRYPT_LIBS="$LIBGCRYPT_LIBS"
++      ],[
++          AC_MSG_ERROR([libgcrypt version 1.1.94 or higher not found. Install libgcrypt or use --disable-libgcrypt. Have a nice day.])
++      ])
+ ])
+-
+ AC_SUBST(GCRYPT_CFLAGS)
+ AC_SUBST(GCRYPT_LIBS)
+ AM_CONDITIONAL([HAVE_GCRYPT], [test "${have_libgcrypt}" = "yes"])
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0004-modules-gui-qt4-out-of-tree-build.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0004-modules-gui-qt4-out-of-tree-build.patch
new file mode 100644
index 0000000..53df1c6
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0004-modules-gui-qt4-out-of-tree-build.patch
@@ -0,0 +1,19 @@
+* modules/gui/qt4/Makefile.am not B!=S friendly
+* Simple solution to missing directories in ${B}
+
+Upstream status: Pending
+
+Signed-off-by: Tim Orling <TicoTimo@gmail.com>
+
+Index: vlc-2.2.1/modules/gui/qt4/Makefile.am
+===================================================================
+--- vlc-2.2.1.orig/modules/gui/qt4/Makefile.am
++++ vlc-2.2.1/modules/gui/qt4/Makefile.am
+@@ -127,6 +127,7 @@ moc_verbose_0 = @echo "  MOC   " $@;
+ moc_verbose__0 = $(moc_verbose_0)
+ 
+ .hpp.moc.cpp:
++	[ -d $(dir $@) ] || mkdir -p $(dir $@)
+ 	$(moc_verbose)$(MOC) $(MOC_CPPFLAGS) -o $@ $<
+ 
+ # These MOC files depend on the configure settings:
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0005-libpostproc-header-check.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0005-libpostproc-header-check.patch
new file mode 100644
index 0000000..2d84ffd
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0005-libpostproc-header-check.patch
@@ -0,0 +1,17 @@
+* Also look for postprocess.h under libpostproc/
+
+Upstream-status: Pending
+
+Index: vlc-2.1.4/configure.ac
+===================================================================
+--- vlc-2.1.4.orig/configure.ac
++++ vlc-2.1.4/configure.ac
+@@ -2444,7 +2444,7 @@ then
+       VLC_SAVE_FLAGS
+       CPPFLAGS="${CPPFLAGS} ${POSTPROC_CFLAGS}"
+       CFLAGS="${CFLAGS} ${POSTPROC_CFLAGS}"
+-      AC_CHECK_HEADERS(postproc/postprocess.h)
++      AC_CHECK_HEADERS(postproc/postprocess.h,[],[AC_CHECK_HEADERS(libpostproc/postprocess.h)])
+       VLC_ADD_PLUGIN([postproc])
+       VLC_ADD_LIBS([postproc],[$POSTPROC_LIBS $AVUTIL_LIBS])
+       VLC_ADD_CFLAGS([postproc],[$POSTPROC_CFLAGS $AVUTIL_CFLAGS])
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0006-make-opencv-configurable.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0006-make-opencv-configurable.patch
new file mode 100644
index 0000000..950c09b
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0006-make-opencv-configurable.patch
@@ -0,0 +1,29 @@
+Recent opencv API changes break upstream filter and example.
+Make opencv explicitly configurable.
+
+Upstream-Status: Inappropriate [configuration]
+
+Signed-off-by: Tim Orling <TicoTimo@gmail.com>
+
+Index: vlc-2.1.4/configure.ac
+===================================================================
+--- vlc-2.1.4.orig/configure.ac
++++ vlc-2.1.4/configure.ac
+@@ -1693,7 +1693,16 @@ PKG_ENABLE_MODULES_VLC([BLURAY], [libblu
+ dnl
+ dnl  OpenCV wrapper and example filters
+ dnl
+-PKG_ENABLE_MODULES_VLC([OPENCV], [opencv_example opencv_wrapper], [opencv > 2.0], (OpenCV (computer vision) filter), [auto])
++AC_ARG_ENABLE(opencv,
++  [AS_HELP_STRING([--disable-opencv],
++    [disable OpenCV computer vision filter and example (default auto)])])
++if test "${enable_opencv}" != "no"
++then
++    PKG_ENABLE_MODULES_VLC([OPENCV], 
++                           [opencv_example opencv_wrapper], 
++                           [opencv > 2.0], 
++                           (OpenCV (computer vision) filter), [auto])
++fi
+ 
+ 
+ dnl
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0007-use-vorbisidec.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0007-use-vorbisidec.patch
new file mode 100644
index 0000000..d05cf02
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0007-use-vorbisidec.patch
@@ -0,0 +1,19 @@
+* tremor provides libvorbisidec, use it instead of libvorbisdec
+
+Upstream-status: Pending
+
+Signed-off-by: Tim Orling <TicoTimo@gmail.com>
+
+Index: vlc-2.2.1/modules/codec/Makefile.am
+===================================================================
+--- vlc-2.2.1.orig/modules/codec/Makefile.am
++++ vlc-2.2.1/modules/codec/Makefile.am
+@@ -234,7 +234,7 @@ codec_LTLIBRARIES += $(LTLIBtheora)
+ libtremor_plugin_la_SOURCES = codec/vorbis.c
+ libtremor_plugin_la_CPPFLAGS = $(AM_CPPFLAGS) -DMODULE_NAME_IS_tremor
+ libtremor_plugin_la_LDFLAGS = $(AM_LDFLAGS) -rpath '$(codecdir)'
+-libtremor_plugin_la_LIBADD = -lvorbisdec -logg
++libtremor_plugin_la_LIBADD = -lvorbisidec -logg
+ EXTRA_LTLIBRARIES += libtremor_plugin.la
+ codec_LTLIBRARIES += $(LTLIBtremor)
+ 
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0008-fix-luaL-checkint.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0008-fix-luaL-checkint.patch
new file mode 100644
index 0000000..145e1ab
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0008-fix-luaL-checkint.patch
@@ -0,0 +1,279 @@
+* luaL_checkint and luaL_optint were deprecated in lua 5.3
+* replacement functions are luaL_checkinteger and luaL_optinteger
+
+Upstream-status: Pending
+
+Signed-off-by: Tim Orling <TicoTimo@gmail.com>
+
+Index: vlc-2.2.1/modules/lua/demux.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/demux.c
++++ vlc-2.2.1/modules/lua/demux.c
+@@ -52,7 +52,7 @@ struct demux_sys_t
+ static int vlclua_demux_peek( lua_State *L )
+ {
+     demux_t *p_demux = (demux_t *)vlclua_get_this( L );
+-    int n = luaL_checkint( L, 1 );
++    int n = luaL_checkinteger( L, 1 );
+     const uint8_t *p_peek;
+ 
+     int i_peek = stream_Peek( p_demux->s, &p_peek, n );
+@@ -67,7 +67,7 @@ static int vlclua_demux_read( lua_State
+ {
+     demux_t *p_demux = (demux_t *)vlclua_get_this( L );
+     const uint8_t *p_read;
+-    int n = luaL_checkint( L, 1 );
++    int n = luaL_checkinteger( L, 1 );
+     int i_read = stream_Peek( p_demux->s, &p_read, n );
+ 
+     if( i_read > 0 )
+Index: vlc-2.2.1/modules/lua/libs/configuration.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/configuration.c
++++ vlc-2.2.1/modules/lua/libs/configuration.c
+@@ -84,7 +84,7 @@ static int vlclua_config_set( lua_State
+             break;
+ 
+         case VLC_VAR_INTEGER:
+-            config_PutInt( p_this, psz_name, luaL_checkint( L, 2 ) );
++            config_PutInt( p_this, psz_name, luaL_checkinteger( L, 2 ) );
+             break;
+ 
+         case VLC_VAR_BOOL:
+Index: vlc-2.2.1/modules/lua/libs/net.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/net.c
++++ vlc-2.2.1/modules/lua/libs/net.c
+@@ -202,7 +202,7 @@ static int vlclua_net_listen_tcp( lua_St
+ {
+     vlc_object_t *p_this = vlclua_get_this( L );
+     const char *psz_host = luaL_checkstring( L, 1 );
+-    int i_port = luaL_checkint( L, 2 );
++    int i_port = luaL_checkinteger( L, 2 );
+     int *pi_fd = net_ListenTCP( p_this, psz_host, i_port );
+     if( pi_fd == NULL )
+         return luaL_error( L, "Cannot listen on %s:%d", psz_host, i_port );
+@@ -274,7 +274,7 @@ static int vlclua_net_connect_tcp( lua_S
+ {
+     vlc_object_t *p_this = vlclua_get_this( L );
+     const char *psz_host = luaL_checkstring( L, 1 );
+-    int i_port = luaL_checkint( L, 2 );
++    int i_port = luaL_checkinteger( L, 2 );
+     int i_fd = net_Connect( p_this, psz_host, i_port, SOCK_STREAM, IPPROTO_TCP );
+     lua_pushinteger( L, vlclua_fd_map_safe( L, i_fd ) );
+     return 1;
+@@ -282,26 +282,26 @@ static int vlclua_net_connect_tcp( lua_S
+ 
+ static int vlclua_net_close( lua_State *L )
+ {
+-    int i_fd = luaL_checkint( L, 1 );
++    int i_fd = luaL_checkinteger( L, 1 );
+     vlclua_fd_unmap_safe( L, i_fd );
+     return 0;
+ }
+ 
+ static int vlclua_net_send( lua_State *L )
+ {
+-    int fd = vlclua_fd_get( L, luaL_checkint( L, 1 ) );
++    int fd = vlclua_fd_get( L, luaL_checkinteger( L, 1 ) );
+     size_t i_len;
+     const char *psz_buffer = luaL_checklstring( L, 2, &i_len );
+ 
+-    i_len = luaL_optint( L, 3, i_len );
++    i_len = luaL_optinteger( L, 3, i_len );
+     lua_pushinteger( L, (fd != -1) ? send( fd, psz_buffer, i_len, 0 ) : -1 );
+     return 1;
+ }
+ 
+ static int vlclua_net_recv( lua_State *L )
+ {
+-    int fd = vlclua_fd_get( L, luaL_checkint( L, 1 ) );
+-    size_t i_len = luaL_optint( L, 2, 1 );
++    int fd = vlclua_fd_get( L, luaL_checkinteger( L, 1 ) );
++    size_t i_len = luaL_optinteger( L, 2, 1 );
+     char psz_buffer[i_len];
+ 
+     ssize_t i_ret = (fd != -1) ? recv( fd, psz_buffer, i_len, 0 ) : -1;
+@@ -382,19 +382,19 @@ static int vlclua_fd_open( lua_State *L
+ #ifndef _WIN32
+ static int vlclua_fd_write( lua_State *L )
+ {
+-    int fd = vlclua_fd_get( L, luaL_checkint( L, 1 ) );
++    int fd = vlclua_fd_get( L, luaL_checkinteger( L, 1 ) );
+     size_t i_len;
+     const char *psz_buffer = luaL_checklstring( L, 2, &i_len );
+ 
+-    i_len = luaL_optint( L, 3, i_len );
++    i_len = luaL_optinteger( L, 3, i_len );
+     lua_pushinteger( L, (fd != -1) ? write( fd, psz_buffer, i_len ) : -1 );
+     return 1;
+ }
+ 
+ static int vlclua_fd_read( lua_State *L )
+ {
+-    int fd = vlclua_fd_get( L, luaL_checkint( L, 1 ) );
+-    size_t i_len = luaL_optint( L, 2, 1 );
++    int fd = vlclua_fd_get( L, luaL_checkinteger( L, 1 ) );
++    size_t i_len = luaL_optinteger( L, 2, 1 );
+     char psz_buffer[i_len];
+ 
+     ssize_t i_ret = (fd != -1) ? read( fd, psz_buffer, i_len ) : -1;
+Index: vlc-2.2.1/modules/lua/libs/osd.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/osd.c
++++ vlc-2.2.1/modules/lua/libs/osd.c
+@@ -67,7 +67,7 @@ static int vlclua_osd_icon( lua_State *L
+ {
+     const char *psz_icon = luaL_checkstring( L, 1 );
+     int i_icon = vlc_osd_icon_from_string( psz_icon );
+-    int i_chan = luaL_optint( L, 2, SPU_DEFAULT_CHANNEL );
++    int i_chan = luaL_optinteger( L, 2, SPU_DEFAULT_CHANNEL );
+     if( !i_icon )
+         return luaL_error( L, "\"%s\" is not a valid osd icon.", psz_icon );
+ 
+@@ -114,9 +114,9 @@ static int vlc_osd_position_from_string(
+ static int vlclua_osd_message( lua_State *L )
+ {
+     const char *psz_message = luaL_checkstring( L, 1 );
+-    int i_chan = luaL_optint( L, 2, SPU_DEFAULT_CHANNEL );
++    int i_chan = luaL_optinteger( L, 2, SPU_DEFAULT_CHANNEL );
+     const char *psz_position = luaL_optstring( L, 3, "top-right" );
+-    mtime_t duration = luaL_optint( L, 4, 1000000 );
++    mtime_t duration = luaL_optinteger( L, 4, 1000000 );
+ 
+     input_thread_t *p_input = vlclua_get_input_internal( L );
+     if( p_input )
+@@ -154,10 +154,10 @@ static int vlc_osd_slider_type_from_stri
+ 
+ static int vlclua_osd_slider( lua_State *L )
+ {
+-    int i_position = luaL_checkint( L, 1 );
++    int i_position = luaL_checkinteger( L, 1 );
+     const char *psz_type = luaL_checkstring( L, 2 );
+     int i_type = vlc_osd_slider_type_from_string( psz_type );
+-    int i_chan = luaL_optint( L, 3, SPU_DEFAULT_CHANNEL );
++    int i_chan = luaL_optinteger( L, 3, SPU_DEFAULT_CHANNEL );
+     if( !i_type )
+         return luaL_error( L, "\"%s\" is not a valid slider type.",
+                            psz_type );
+@@ -198,7 +198,7 @@ static int vlclua_spu_channel_register(
+ 
+ static int vlclua_spu_channel_clear( lua_State *L )
+ {
+-    int i_chan = luaL_checkint( L, 1 );
++    int i_chan = luaL_checkinteger( L, 1 );
+     input_thread_t *p_input = vlclua_get_input_internal( L );
+     if( !p_input )
+         return luaL_error( L, "Unable to find input." );
+Index: vlc-2.2.1/modules/lua/libs/playlist.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/playlist.c
++++ vlc-2.2.1/modules/lua/libs/playlist.c
+@@ -69,7 +69,7 @@ static int vlclua_playlist_next( lua_Sta
+ 
+ static int vlclua_playlist_skip( lua_State * L )
+ {
+-    int i_skip = luaL_checkint( L, 1 );
++    int i_skip = luaL_checkinteger( L, 1 );
+     playlist_t *p_playlist = vlclua_get_playlist_internal( L );
+     playlist_Skip( p_playlist, i_skip );
+     return 0;
+@@ -127,7 +127,7 @@ static int vlclua_playlist_random( lua_S
+ 
+ static int vlclua_playlist_gotoitem( lua_State * L )
+ {
+-    int i_id = luaL_checkint( L, 1 );
++    int i_id = luaL_checkinteger( L, 1 );
+     playlist_t *p_playlist = vlclua_get_playlist_internal( L );
+     PL_LOCK;
+     int i_ret = playlist_Control( p_playlist, PLAYLIST_VIEWPLAY,
+@@ -139,7 +139,7 @@ static int vlclua_playlist_gotoitem( lua
+ 
+ static int vlclua_playlist_delete( lua_State * L )
+ {
+-    int i_id = luaL_checkint( L, 1 );
++    int i_id = luaL_checkinteger( L, 1 );
+     playlist_t *p_playlist = vlclua_get_playlist_internal( L );
+     PL_LOCK;
+     playlist_item_t *p_item = playlist_ItemGetById( p_playlist, i_id );
+@@ -155,8 +155,8 @@ static int vlclua_playlist_delete( lua_S
+ 
+ static int vlclua_playlist_move( lua_State * L )
+ {
+-    int i_item = luaL_checkint( L, 1 );
+-    int i_target = luaL_checkint( L, 2 );
++    int i_item = luaL_checkinteger( L, 1 );
++    int i_target = luaL_checkinteger( L, 2 );
+     playlist_t *p_playlist = vlclua_get_playlist_internal( L );
+     PL_LOCK;
+     playlist_item_t *p_item = playlist_ItemGetById( p_playlist, i_item );
+Index: vlc-2.2.1/modules/lua/libs/stream.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/stream.c
++++ vlc-2.2.1/modules/lua/libs/stream.c
+@@ -101,7 +101,7 @@ static int vlclua_stream_read( lua_State
+ {
+     int i_read;
+     stream_t **pp_stream = (stream_t **)luaL_checkudata( L, 1, "stream" );
+-    int n = luaL_checkint( L, 2 );
++    int n = luaL_checkinteger( L, 2 );
+     uint8_t *p_read = malloc( n );
+     if( !p_read ) return vlclua_error( L );
+ 
+Index: vlc-2.2.1/modules/lua/libs/variables.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/variables.c
++++ vlc-2.2.1/modules/lua/libs/variables.c
+@@ -103,7 +103,7 @@ static int vlclua_tovalue( lua_State *L,
+             val->b_bool = luaL_checkboolean( L, -1 );
+             break;
+         case VLC_VAR_INTEGER:
+-            val->i_int = luaL_checkint( L, -1 );
++            val->i_int = luaL_checkinteger( L, -1 );
+             break;
+         case VLC_VAR_STRING:
+             val->psz_string = (char*)luaL_checkstring( L, -1 ); /* XXX: Beware, this only stays valid as long as (L,-1) stays in the stack */
+Index: vlc-2.2.1/modules/lua/libs/volume.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/volume.c
++++ vlc-2.2.1/modules/lua/libs/volume.c
+@@ -48,7 +48,7 @@
+ static int vlclua_volume_set( lua_State *L )
+ {
+     playlist_t *p_this = vlclua_get_playlist_internal( L );
+-    int i_volume = luaL_checkint( L, 1 );
++    int i_volume = luaL_checkinteger( L, 1 );
+     if( i_volume < 0 )
+         i_volume = 0;
+     int i_ret = playlist_VolumeSet( p_this, i_volume/(float)AOUT_VOLUME_DEFAULT );
+@@ -68,7 +68,7 @@ static int vlclua_volume_up( lua_State *
+     playlist_t *p_this = vlclua_get_playlist_internal( L );
+     float volume;
+ 
+-    playlist_VolumeUp( p_this, luaL_optint( L, 1, 1 ), &volume );
++    playlist_VolumeUp( p_this, luaL_optinteger( L, 1, 1 ), &volume );
+     lua_pushnumber( L, lroundf(volume * AOUT_VOLUME_DEFAULT) );
+     return 1;
+ }
+@@ -78,7 +78,7 @@ static int vlclua_volume_down( lua_State
+     playlist_t *p_this = vlclua_get_playlist_internal( L );
+     float volume;
+ 
+-    playlist_VolumeDown( p_this, luaL_optint( L, 1, 1 ), &volume );
++    playlist_VolumeDown( p_this, luaL_optinteger( L, 1, 1 ), &volume );
+     lua_pushnumber( L, lroundf(volume * AOUT_VOLUME_DEFAULT) );
+     return 1;
+ }
+Index: vlc-2.2.1/modules/lua/libs/win.c
+===================================================================
+--- vlc-2.2.1.orig/modules/lua/libs/win.c
++++ vlc-2.2.1/modules/lua/libs/win.c
+@@ -123,7 +123,7 @@ static int vlclua_console_init( lua_Stat
+ 
+ static int vlclua_console_wait( lua_State *L )
+ {
+-    int i_timeout = luaL_optint( L, 1, 0 );
++    int i_timeout = luaL_optinteger( L, 1, 0 );
+     DWORD status = WaitForSingleObject( GetConsole( L ), i_timeout );
+     lua_pushboolean( L, status == WAIT_OBJECT_0 );
+     return 1;
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0009-Avcodec-swscale-use-AV_PIX_FMT-consistently.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0009-Avcodec-swscale-use-AV_PIX_FMT-consistently.patch
new file mode 100644
index 0000000..cb3ba71
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0009-Avcodec-swscale-use-AV_PIX_FMT-consistently.patch
@@ -0,0 +1,293 @@
+From 427732a379893491eac27aeadff0e0b3e252d158 Mon Sep 17 00:00:00 2001
+From: Jean-Baptiste Kempf <jb@videolan.org>
+Date: Mon, 31 Aug 2015 08:19:00 +0200
+Subject: [PATCH] Avcodec/swscale: use AV_PIX_FMT consistently
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+(cherry picked from commit faa7bd357b1f9e07a6ffbc451a188773fad7a275)
+Signed-off-by: Rafaël Carré <funman@videolan.org>
+
+Conflicts:
+	modules/codec/avcodec/chroma.c
+	modules/codec/avcodec/video.c
+---
+ modules/codec/avcodec/chroma.c | 104 ++++++++++++++++++++---------------------
+ modules/codec/avcodec/video.c  |  10 ++--
+ modules/video_chroma/swscale.c |  28 +++++------
+ 3 files changed, 71 insertions(+), 71 deletions(-)
+
+diff --git a/modules/codec/avcodec/chroma.c b/modules/codec/avcodec/chroma.c
+index 393364b..c31f93d 100644
+--- a/modules/codec/avcodec/chroma.c
++++ b/modules/codec/avcodec/chroma.c
+@@ -62,77 +62,77 @@ static const struct
+ } chroma_table[] =
+ {
+     /* Planar YUV formats */
+-    {VLC_CODEC_I444, PIX_FMT_YUV444P, 0, 0, 0 },
+-    {VLC_CODEC_J444, PIX_FMT_YUVJ444P, 0, 0, 0 },
+-
+-    {VLC_CODEC_I440, PIX_FMT_YUV440P, 0, 0, 0 },
+-    {VLC_CODEC_J440, PIX_FMT_YUVJ440P, 0, 0, 0 },
+-
+-    {VLC_CODEC_I422, PIX_FMT_YUV422P, 0, 0, 0 },
+-    {VLC_CODEC_J422, PIX_FMT_YUVJ422P, 0, 0, 0 },
+-
+-    {VLC_CODEC_I420, PIX_FMT_YUV420P, 0, 0, 0 },
+-    {VLC_CODEC_YV12, PIX_FMT_YUV420P, 0, 0, 0 },
+-    {VLC_FOURCC('I','Y','U','V'), PIX_FMT_YUV420P, 0, 0, 0 },
+-    {VLC_CODEC_J420, PIX_FMT_YUVJ420P, 0, 0, 0 },
+-    {VLC_CODEC_I411, PIX_FMT_YUV411P, 0, 0, 0 },
+-    {VLC_CODEC_I410, PIX_FMT_YUV410P, 0, 0, 0 },
+-    {VLC_FOURCC('Y','V','U','9'), PIX_FMT_YUV410P, 0, 0, 0 },
+-
+-    {VLC_FOURCC('N','V','1','2'), PIX_FMT_NV12, 0, 0, 0 },
+-    {VLC_FOURCC('N','V','2','1'), PIX_FMT_NV21, 0, 0, 0 },
+-
+-    {VLC_CODEC_I420_9L, PIX_FMT_YUV420P9LE, 0, 0, 0 },
+-    {VLC_CODEC_I420_9B, PIX_FMT_YUV420P9BE, 0, 0, 0 },
+-    {VLC_CODEC_I420_10L, PIX_FMT_YUV420P10LE, 0, 0, 0 },
+-    {VLC_CODEC_I420_10B, PIX_FMT_YUV420P10BE, 0, 0, 0 },
++    {VLC_CODEC_I444, AV_PIX_FMT_YUV444P, 0, 0, 0 },
++    {VLC_CODEC_J444, AV_PIX_FMT_YUVJ444P, 0, 0, 0 },
++
++    {VLC_CODEC_I440, AV_PIX_FMT_YUV440P, 0, 0, 0 },
++    {VLC_CODEC_J440, AV_PIX_FMT_YUVJ440P, 0, 0, 0 },
++
++    {VLC_CODEC_I422, AV_PIX_FMT_YUV422P, 0, 0, 0 },
++    {VLC_CODEC_J422, AV_PIX_FMT_YUVJ422P, 0, 0, 0 },
++
++    {VLC_CODEC_I420, AV_PIX_FMT_YUV420P, 0, 0, 0 },
++    {VLC_CODEC_YV12, AV_PIX_FMT_YUV420P, 0, 0, 0 },
++    {VLC_FOURCC('I','Y','U','V'), AV_PIX_FMT_YUV420P, 0, 0, 0 },
++    {VLC_CODEC_J420, AV_PIX_FMT_YUVJ420P, 0, 0, 0 },
++    {VLC_CODEC_I411, AV_PIX_FMT_YUV411P, 0, 0, 0 },
++    {VLC_CODEC_I410, AV_PIX_FMT_YUV410P, 0, 0, 0 },
++    {VLC_FOURCC('Y','V','U','9'), AV_PIX_FMT_YUV410P, 0, 0, 0 },
++
++    {VLC_FOURCC('N','V','1','2'), AV_PIX_FMT_NV12, 0, 0, 0 },
++    {VLC_FOURCC('N','V','2','1'), AV_PIX_FMT_NV21, 0, 0, 0 },
++
++    {VLC_CODEC_I420_9L, AV_PIX_FMT_YUV420P9LE, 0, 0, 0 },
++    {VLC_CODEC_I420_9B, AV_PIX_FMT_YUV420P9BE, 0, 0, 0 },
++    {VLC_CODEC_I420_10L, AV_PIX_FMT_YUV420P10LE, 0, 0, 0 },
++    {VLC_CODEC_I420_10B, AV_PIX_FMT_YUV420P10BE, 0, 0, 0 },
+ #if LIBAVUTIL_VERSION_INT >= AV_VERSION_INT(51,13,0)
+-    {VLC_CODEC_I422_9L, PIX_FMT_YUV422P9LE, 0, 0, 0 },
+-    {VLC_CODEC_I422_9B, PIX_FMT_YUV422P9BE, 0, 0, 0 },
++    {VLC_CODEC_I422_9L, AV_PIX_FMT_YUV422P9LE, 0, 0, 0 },
++    {VLC_CODEC_I422_9B, AV_PIX_FMT_YUV422P9BE, 0, 0, 0 },
+ #endif
+-    {VLC_CODEC_I422_10L, PIX_FMT_YUV422P10LE, 0, 0, 0 },
+-    {VLC_CODEC_I422_10B, PIX_FMT_YUV422P10BE, 0, 0, 0 },
++    {VLC_CODEC_I422_10L, AV_PIX_FMT_YUV422P10LE, 0, 0, 0 },
++    {VLC_CODEC_I422_10B, AV_PIX_FMT_YUV422P10BE, 0, 0, 0 },
+ 
+-    {VLC_CODEC_YUV420A, PIX_FMT_YUVA420P, 0, 0, 0 },
++    {VLC_CODEC_YUV420A, AV_PIX_FMT_YUVA420P, 0, 0, 0 },
+ #if LIBAVUTIL_VERSION_CHECK( 51, 45, 0, 74, 100 )
+     {VLC_CODEC_YUV422A, AV_PIX_FMT_YUVA422P, 0, 0, 0 },
+ #endif
+ 
+-    {VLC_CODEC_I444_9L, PIX_FMT_YUV444P9LE, 0, 0, 0 },
+-    {VLC_CODEC_I444_9B, PIX_FMT_YUV444P9BE, 0, 0, 0 },
+-    {VLC_CODEC_I444_10L, PIX_FMT_YUV444P10LE, 0, 0, 0 },
+-    {VLC_CODEC_I444_10B, PIX_FMT_YUV444P10BE, 0, 0, 0 },
+-    {VLC_CODEC_I444_16L, PIX_FMT_YUV444P16LE, 0, 0, 0 },
+-    {VLC_CODEC_I444_16B, PIX_FMT_YUV444P16BE, 0, 0, 0 },
++    {VLC_CODEC_I444_9L, AV_PIX_FMT_YUV444P9LE, 0, 0, 0 },
++    {VLC_CODEC_I444_9B, AV_PIX_FMT_YUV444P9BE, 0, 0, 0 },
++    {VLC_CODEC_I444_10L, AV_PIX_FMT_YUV444P10LE, 0, 0, 0 },
++    {VLC_CODEC_I444_10B, AV_PIX_FMT_YUV444P10BE, 0, 0, 0 },
++    {VLC_CODEC_I444_16L, AV_PIX_FMT_YUV444P16LE, 0, 0, 0 },
++    {VLC_CODEC_I444_16B, AV_PIX_FMT_YUV444P16BE, 0, 0, 0 },
+ 
+     /* Packed YUV formats */
+-    {VLC_CODEC_YUYV, PIX_FMT_YUYV422, 0, 0, 0 },
+-    {VLC_FOURCC('Y','U','Y','V'), PIX_FMT_YUYV422, 0, 0, 0 },
+-    {VLC_CODEC_UYVY, PIX_FMT_UYVY422, 0, 0, 0 },
+-    {VLC_FOURCC('Y','4','1','1'), PIX_FMT_UYYVYY411, 0, 0, 0 },
++    {VLC_CODEC_YUYV, AV_PIX_FMT_YUYV422, 0, 0, 0 },
++    {VLC_FOURCC('Y','U','Y','V'), AV_PIX_FMT_YUYV422, 0, 0, 0 },
++    {VLC_CODEC_UYVY, AV_PIX_FMT_UYVY422, 0, 0, 0 },
++    {VLC_FOURCC('Y','4','1','1'), AV_PIX_FMT_UYYVYY411, 0, 0, 0 },
+ 
+     /* Packed RGB formats */
+-    VLC_RGB( VLC_FOURCC('R','G','B','4'), PIX_FMT_RGB4, PIX_FMT_BGR4, 0x10, 0x06, 0x01 )
+-    VLC_RGB( VLC_FOURCC('R','G','B','8'), PIX_FMT_RGB8, PIX_FMT_BGR8, 0xC0, 0x38, 0x07 )
++    VLC_RGB( VLC_FOURCC('R','G','B','4'), AV_PIX_FMT_RGB4, AV_PIX_FMT_BGR4, 0x10, 0x06, 0x01 )
++    VLC_RGB( VLC_FOURCC('R','G','B','8'), AV_PIX_FMT_RGB8, AV_PIX_FMT_BGR8, 0xC0, 0x38, 0x07 )
+ 
+-    VLC_RGB( VLC_CODEC_RGB15, PIX_FMT_RGB555, PIX_FMT_BGR555, 0x7c00, 0x03e0, 0x001f )
+-    VLC_RGB( VLC_CODEC_RGB16, PIX_FMT_RGB565, PIX_FMT_BGR565, 0xf800, 0x07e0, 0x001f )
+-    VLC_RGB( VLC_CODEC_RGB24, PIX_FMT_BGR24, PIX_FMT_RGB24, 0xff0000, 0x00ff00, 0x0000ff )
++    VLC_RGB( VLC_CODEC_RGB15, AV_PIX_FMT_RGB555, AV_PIX_FMT_BGR555, 0x7c00, 0x03e0, 0x001f )
++    VLC_RGB( VLC_CODEC_RGB16, AV_PIX_FMT_RGB565, AV_PIX_FMT_BGR565, 0xf800, 0x07e0, 0x001f )
++    VLC_RGB( VLC_CODEC_RGB24, AV_PIX_FMT_BGR24, AV_PIX_FMT_RGB24, 0xff0000, 0x00ff00, 0x0000ff )
+ 
+-    VLC_RGB( VLC_CODEC_RGB32, PIX_FMT_RGB32, PIX_FMT_BGR32, 0x00ff0000, 0x0000ff00, 0x000000ff )
+-    VLC_RGB( VLC_CODEC_RGB32, PIX_FMT_RGB32_1, PIX_FMT_BGR32_1, 0xff000000, 0x00ff0000, 0x0000ff00 )
++    VLC_RGB( VLC_CODEC_RGB32, AV_PIX_FMT_RGB32, AV_PIX_FMT_BGR32, 0x00ff0000, 0x0000ff00, 0x000000ff )
++    VLC_RGB( VLC_CODEC_RGB32, AV_PIX_FMT_RGB32_1, AV_PIX_FMT_BGR32_1, 0xff000000, 0x00ff0000, 0x0000ff00 )
+ 
+ #ifdef AV_PIX_FMT_0BGR32
+     VLC_RGB( VLC_CODEC_RGB32, AV_PIX_FMT_0BGR32, AV_PIX_FMT_0RGB32, 0x000000ff, 0x0000ff00, 0x00ff0000 )
+ #endif
+ 
+-    {VLC_CODEC_RGBA, PIX_FMT_RGBA, 0, 0, 0 },
+-    {VLC_CODEC_ARGB, PIX_FMT_ARGB, 0, 0, 0 },
+-    {VLC_CODEC_BGRA, PIX_FMT_BGRA, 0, 0, 0 },
+-    {VLC_CODEC_GREY, PIX_FMT_GRAY8, 0, 0, 0},
++    {VLC_CODEC_RGBA, AV_PIX_FMT_RGBA, 0, 0, 0 },
++    {VLC_CODEC_ARGB, AV_PIX_FMT_ARGB, 0, 0, 0 },
++    {VLC_CODEC_BGRA, AV_PIX_FMT_BGRA, 0, 0, 0 },
++    {VLC_CODEC_GREY, AV_PIX_FMT_GRAY8, 0, 0, 0},
+ 
+      /* Paletized RGB */
+-    {VLC_CODEC_RGBP, PIX_FMT_PAL8, 0, 0, 0},
++    {VLC_CODEC_RGBP, AV_PIX_FMT_PAL8, 0, 0, 0},
+ 
+ #if LIBAVUTIL_VERSION_CHECK(51, 42, 0, 74,100)
+     {VLC_CODEC_GBR_PLANAR, AV_PIX_FMT_GBRP, 0, 0, 0 },
+@@ -201,5 +201,5 @@ int FindFfmpegChroma( vlc_fourcc_t fourcc )
+     for( int i = 0; chroma_table[i].i_chroma != 0; i++ )
+         if( chroma_table[i].i_chroma == fourcc )
+             return chroma_table[i].i_chroma_id;
+-    return PIX_FMT_NONE;
++    return AV_PIX_FMT_NONE;
+ }
+diff --git a/modules/codec/avcodec/video.c b/modules/codec/avcodec/video.c
+index c115db9..ae600e8 100644
+--- a/modules/codec/avcodec/video.c
++++ b/modules/codec/avcodec/video.c
+@@ -1004,7 +1004,7 @@ static picture_t *lavc_dr_GetFrame(struct AVCodecContext *ctx,
+     if (GetVlcChroma(&dec->fmt_out.video, ctx->pix_fmt) != VLC_SUCCESS)
+         return NULL;
+     dec->fmt_out.i_codec = dec->fmt_out.video.i_chroma;
+-    if (ctx->pix_fmt == PIX_FMT_PAL8)
++    if (ctx->pix_fmt == AV_PIX_FMT_PAL8)
+         return NULL;
+ 
+     int width = frame->width;
+@@ -1180,7 +1180,7 @@ static picture_t *ffmpeg_dr_GetFrameBuf(struct AVCodecContext *p_context)
+     if (GetVlcChroma(&p_dec->fmt_out.video, p_context->pix_fmt) != VLC_SUCCESS)
+         goto no_dr;
+ 
+-    if (p_context->pix_fmt == PIX_FMT_PAL8)
++    if (p_context->pix_fmt == AV_PIX_FMT_PAL8)
+         goto no_dr;
+ 
+     p_dec->fmt_out.i_codec = p_dec->fmt_out.video.i_chroma;
+@@ -1215,7 +1215,7 @@ static picture_t *ffmpeg_dr_GetFrameBuf(struct AVCodecContext *p_context)
+             goto no_dr;
+     }
+ 
+-    if( p_context->pix_fmt == PIX_FMT_YUV422P )
++    if( p_context->pix_fmt == AV_PIX_FMT_YUV422P )
+     {
+         if( 2 * p_pic->p[1].i_pitch != p_pic->p[0].i_pitch ||
+             2 * p_pic->p[2].i_pitch != p_pic->p[0].i_pitch )
+@@ -1325,7 +1325,7 @@ static enum PixelFormat ffmpeg_GetFormat( AVCodecContext *p_context,
+ 
+     /* Enumerate available formats */
+     bool can_hwaccel = false;
+-    for( size_t i = 0; pi_fmt[i] != PIX_FMT_NONE; i++ )
++    for( size_t i = 0; pi_fmt[i] != AV_PIX_FMT_NONE; i++ )
+     {
+         const AVPixFmtDescriptor *dsc = av_pix_fmt_desc_get(pi_fmt[i]);
+         if (dsc == NULL)
+@@ -1352,7 +1352,7 @@ static enum PixelFormat ffmpeg_GetFormat( AVCodecContext *p_context,
+     if( p_va == NULL )
+         goto end;
+ 
+-    for( size_t i = 0; pi_fmt[i] != PIX_FMT_NONE; i++ )
++    for( size_t i = 0; pi_fmt[i] != AV_PIX_FMT_NONE; i++ )
+     {
+         if( p_va->pix_fmt != pi_fmt[i] )
+             continue;
+diff --git a/modules/video_chroma/swscale.c b/modules/video_chroma/swscale.c
+index 569e0f5..4e0ecf1 100644
+--- a/modules/video_chroma/swscale.c
++++ b/modules/video_chroma/swscale.c
+@@ -257,35 +257,35 @@ static void FixParameters( int *pi_fmt, bool *pb_has_a, bool *pb_swap_uv, vlc_fo
+     switch( fmt )
+     {
+     case VLC_CODEC_YUV422A:
+-        *pi_fmt = PIX_FMT_YUV422P;
++        *pi_fmt = AV_PIX_FMT_YUV422P;
+         *pb_has_a = true;
+         break;
+     case VLC_CODEC_YUV420A:
+-        *pi_fmt = PIX_FMT_YUV420P;
++        *pi_fmt = AV_PIX_FMT_YUV420P;
+         *pb_has_a = true;
+         break;
+     case VLC_CODEC_YUVA:
+-        *pi_fmt = PIX_FMT_YUV444P;
++        *pi_fmt = AV_PIX_FMT_YUV444P;
+         *pb_has_a = true;
+         break;
+     case VLC_CODEC_RGBA:
+-        *pi_fmt = PIX_FMT_BGR32;
++        *pi_fmt = AV_PIX_FMT_BGR32;
+         *pb_has_a = true;
+         break;
+     case VLC_CODEC_ARGB:
+-        *pi_fmt = PIX_FMT_BGR32_1;
++        *pi_fmt = AV_PIX_FMT_BGR32_1;
+         *pb_has_a = true;
+         break;
+     case VLC_CODEC_BGRA:
+-        *pi_fmt = PIX_FMT_RGB32;
++        *pi_fmt = AV_PIX_FMT_RGB32;
+         *pb_has_a = true;
+         break;
+     case VLC_CODEC_YV12:
+-        *pi_fmt = PIX_FMT_YUV420P;
++        *pi_fmt = AV_PIX_FMT_YUV420P;
+         *pb_swap_uv = true;
+         break;
+     case VLC_CODEC_YV9:
+-        *pi_fmt = PIX_FMT_YUV410P;
++        *pi_fmt = AV_PIX_FMT_YUV410P;
+         *pb_swap_uv = true;
+         break;
+     default:
+@@ -314,7 +314,7 @@ static int GetParameters( ScalerConfiguration *p_cfg,
+     {
+         if( p_fmti->i_chroma == VLC_CODEC_YUVP && ALLOW_YUVP )
+         {
+-            i_fmti = i_fmto = PIX_FMT_GRAY8;
++            i_fmti = i_fmto = AV_PIX_FMT_GRAY8;
+             i_sws_flags = SWS_POINT;
+         }
+     }
+@@ -327,9 +327,9 @@ static int GetParameters( ScalerConfiguration *p_cfg,
+      * Without SWS_ACCURATE_RND the quality is really bad for some conversions */
+     switch( i_fmto )
+     {
+-    case PIX_FMT_ARGB:
+-    case PIX_FMT_RGBA:
+-    case PIX_FMT_ABGR:
++    case AV_PIX_FMT_ARGB:
++    case AV_PIX_FMT_RGBA:
++    case AV_PIX_FMT_ABGR:
+         i_sws_flags |= SWS_ACCURATE_RND;
+         break;
+     }
+@@ -403,8 +403,8 @@ static int Init( filter_t *p_filter )
+     const unsigned i_fmto_visible_width = p_fmto->i_visible_width * p_sys->i_extend_factor;
+     for( int n = 0; n < (cfg.b_has_a ? 2 : 1); n++ )
+     {
+-        const int i_fmti = n == 0 ? cfg.i_fmti : PIX_FMT_GRAY8;
+-        const int i_fmto = n == 0 ? cfg.i_fmto : PIX_FMT_GRAY8;
++        const int i_fmti = n == 0 ? cfg.i_fmti : AV_PIX_FMT_GRAY8;
++        const int i_fmto = n == 0 ? cfg.i_fmto : AV_PIX_FMT_GRAY8;
+         struct SwsContext *ctx;
+ 
+         ctx = sws_getContext( i_fmti_visible_width, p_fmti->i_visible_height, i_fmti,
+-- 
+2.5.0
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0010-SWSCALE-fix-compilation-with-4.x.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0010-SWSCALE-fix-compilation-with-4.x.patch
new file mode 100644
index 0000000..56744e7
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc/0010-SWSCALE-fix-compilation-with-4.x.patch
@@ -0,0 +1,45 @@
+From 6fa8a4a9bb64ff34328aae46acd600f8502b2c05 Mon Sep 17 00:00:00 2001
+From: Jean-Baptiste Kempf <jb@videolan.org>
+Date: Mon, 31 Aug 2015 09:07:39 +0200
+Subject: [PATCH] SWSCALE: fix compilation with 4.x
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+(cherry picked from commit 2b23857c68622edda76b72b74aeb3d943ee277c9)
+Signed-off-by: Rafaël Carré <funman@videolan.org>
+---
+ modules/video_chroma/swscale.c | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/modules/video_chroma/swscale.c b/modules/video_chroma/swscale.c
+index 4e0ecf1..26d0d6f 100644
+--- a/modules/video_chroma/swscale.c
++++ b/modules/video_chroma/swscale.c
+@@ -36,6 +36,7 @@
+ #include <vlc_cpu.h>
+ 
+ #include <libswscale/swscale.h>
++#include <libswscale/version.h>
+ 
+ #ifdef __APPLE__
+ # include <TargetConditionals.h>
+@@ -235,6 +236,7 @@ static int GetSwsCpuMask(void)
+ {
+     int i_sws_cpu = 0;
+ 
++#if LIBSWSCALE_VERSION_MAJOR < 4
+ #if defined(__i386__) || defined(__x86_64__)
+     if( vlc_CPU_MMX() )
+         i_sws_cpu |= SWS_CPU_CAPS_MMX;
+@@ -248,6 +250,7 @@ static int GetSwsCpuMask(void)
+     if( vlc_CPU_ALTIVEC() )
+         i_sws_cpu |= SWS_CPU_CAPS_ALTIVEC;
+ #endif
++#endif
+ 
+     return i_sws_cpu;
+ }
+-- 
+2.5.0
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc_2.2.2.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc_2.2.2.bb
new file mode 100644
index 0000000..b5be04c
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vlc/vlc_2.2.2.bb
@@ -0,0 +1,19 @@
+require ${BPN}.inc
+
+# work around build failure
+EXTRA_OECONF += " --enable-libxml2=no"
+
+SRC_URI += "file://0001-enable-subdir-objects.patch \
+            file://0002-glibc-does-not-provide-strlcpy.patch \
+            file://0003-use-am-path-libgcrypt.patch \
+            file://0004-modules-gui-qt4-out-of-tree-build.patch \
+            file://0005-libpostproc-header-check.patch \
+            file://0006-make-opencv-configurable.patch \
+            file://0007-use-vorbisidec.patch \
+            file://0008-fix-luaL-checkint.patch \
+            file://0009-Avcodec-swscale-use-AV_PIX_FMT-consistently.patch \
+            file://0010-SWSCALE-fix-compilation-with-4.x.patch \
+"
+
+SRC_URI[md5sum] = "f98d60f0f59ef72b6e3407f2ff09bda6"
+SRC_URI[sha256sum] = "9ad23128be16f9b40ed772961272cb0748ed8e4aa1bc79c129e589feebea5fb5"
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools/0001-oggenc-Fix-large-alloca-on-bad-AIFF-input.patch b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools/0001-oggenc-Fix-large-alloca-on-bad-AIFF-input.patch
new file mode 100644
index 0000000..b623dbf
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools/0001-oggenc-Fix-large-alloca-on-bad-AIFF-input.patch
@@ -0,0 +1,49 @@
+Upstream-Status: Backport
+
+Backport patch to fix CVE-2015-6749 from:
+
+https://trac.xiph.org/ticket/2212
+
+Signed-off-by: Kai Kang <kai.kang@windriver.com>
+---
+From 04815d3e1bfae3a6cdfb2c25358a5a72b61299f7 Mon Sep 17 00:00:00 2001
+From: Mark Harris <mark.hsj@gmail.com>
+Date: Sun, 30 Aug 2015 05:54:46 -0700
+Subject: [PATCH] oggenc: Fix large alloca on bad AIFF input
+
+Fixes #2212
+---
+ oggenc/audio.c | 10 +++++-----
+ 1 file changed, 5 insertions(+), 5 deletions(-)
+
+diff --git a/oggenc/audio.c b/oggenc/audio.c
+index 477da8c..4921fb9 100644
+--- a/oggenc/audio.c
++++ b/oggenc/audio.c
+@@ -245,8 +245,8 @@ static int aiff_permute_matrix[6][6] =
+ int aiff_open(FILE *in, oe_enc_opt *opt, unsigned char *buf, int buflen)
+ {
+     int aifc; /* AIFC or AIFF? */
+-    unsigned int len;
+-    unsigned char *buffer;
++    unsigned int len, readlen;
++    unsigned char buffer[22];
+     unsigned char buf2[8];
+     aiff_fmt format;
+     aifffile *aiff = malloc(sizeof(aifffile));
+@@ -269,9 +269,9 @@ int aiff_open(FILE *in, oe_enc_opt *opt, unsigned char *buf, int buflen)
+         return 0; /* Weird common chunk */
+     }
+ 
+-    buffer = alloca(len);
+-
+-    if(fread(buffer,1,len,in) < len)
++    readlen = len < sizeof(buffer) ? len : sizeof(buffer);
++    if(fread(buffer,1,readlen,in) < readlen ||
++       (len > readlen && !seek_forward(in, len-readlen)))
+     {
+         fprintf(stderr, _("Warning: Unexpected EOF in reading AIFF header\n"));
+         return 0;
+-- 
+2.5.0
+
diff --git a/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools_1.4.0.bb b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools_1.4.0.bb
new file mode 100644
index 0000000..2683555
--- /dev/null
+++ b/import-layers/meta-openembedded/meta-multimedia/recipes-multimedia/vorbis-tools/vorbis-tools_1.4.0.bb
@@ -0,0 +1,24 @@
+SUMMARY = "Vorbis Tools"
+DESCRIPTION = "Ogg Vorbis is a high-quality lossy audio codec \
+that is free of intellectual property restrictions. vorbis-tools \
+include some command line applications to use the libraries."
+HOMEPAGE = "http://www.vorbis.com/"
+BUGTRACKER = "https://trac.xiph.org"
+SECTION = "multimedia"
+LICENSE = "GPLv2"
+LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f"
+
+DEPENDS = "libogg libvorbis curl libao"
+
+SRC_URI = "http://downloads.xiph.org/releases/vorbis/${BP}.tar.gz \
+           file://0001-oggenc-Fix-large-alloca-on-bad-AIFF-input.patch \
+          "
+
+SRC_URI[md5sum] = "567e0fb8d321b2cd7124f8208b8b90e6"
+SRC_URI[sha256sum] = "a389395baa43f8e5a796c99daf62397e435a7e73531c9f44d9084055a05d22bc"
+
+inherit autotools pkgconfig gettext
+
+PACKAGECONFIG ??= "flac"
+PACKAGECONFIG[flac] = ",--without-flac,flac,libflac"
+PACKAGECONFIG[speex] = ",--without-speex,speex,speex"
