gst/dvdlpcmdec/gstdvdlpcmdec.c: Make sure we only write to writable buffers
authorJan Schmidt <thaytan@mad.scientist.com>
Sun, 20 Feb 2005 15:26:04 +0000 (15:26 +0000)
committerJan Schmidt <thaytan@mad.scientist.com>
Sun, 20 Feb 2005 15:26:04 +0000 (15:26 +0000)
Original commit message from CVS:
* gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_chain):
Make sure we only write to writable buffers

ChangeLog
gst/dvdlpcmdec/gstdvdlpcmdec.c

index 3847878db69e5918ed89314800b173e8e6b5ce5b..8b06631a37b30bc7ceb99bcf419eca541e5fded4 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2005-02-21  Jan Schmidt <thaytan@mad.scientist.com>
+       * gst/dvdlpcmdec/gstdvdlpcmdec.c: (gst_dvdlpcmdec_chain):
+          Make sure we only write to writable buffers
+
 2005-02-20  Tim-Philipp Müller  <tim at centricular dot net>
 
        * gst-libs/gst/riff/riff-media.c:
index 2062d14d49bcf4edb6d061a1671232edc8890eb2..19b022518d13d3812529d1109b5cf0261463eb8d 100644 (file)
@@ -229,7 +229,6 @@ gst_dvdlpcmdec_chain (GstPad * pad, GstData * _data)
 {
   GstBuffer *buf = GST_BUFFER (_data);
   GstDvdLpcmDec *dvdlpcmdec;
-  guchar *data;
   gint64 size;
 
   g_return_if_fail (pad != NULL);
@@ -238,7 +237,6 @@ gst_dvdlpcmdec_chain (GstPad * pad, GstData * _data)
 
   dvdlpcmdec = GST_DVDLPCMDEC (gst_pad_get_parent (pad));
 
-  data = GST_BUFFER_DATA (buf);
   size = GST_BUFFER_SIZE (buf);
 
   GST_LOG_OBJECT (dvdlpcmdec, "got buffer %p of size %" G_GINT64_FORMAT, buf,
@@ -290,7 +288,7 @@ gst_dvdlpcmdec_chain (GstPad * pad, GstData * _data)
       }
       gst_buffer_stamp (outbuf, buf);
 
-      src = data;
+      src = GST_BUFFER_DATA (buf);;
       dest = GST_BUFFER_DATA (outbuf);
 
       /* Copy 20-bit LPCM format to 24-bit buffers, with 0x00 in the lowest 
@@ -324,7 +322,11 @@ gst_dvdlpcmdec_chain (GstPad * pad, GstData * _data)
        * and last byte are already correct */
       gint64 count = size / 12;
       gint64 i;
-      guchar *src = data;
+      guchar *src;
+
+      /* Ensure our output buffer is writable */
+      buf = gst_buffer_copy_on_write (buf);
+      src = GST_BUFFER_DATA (buf);
 
       for (i = 0; i < count; i++) {
         guchar temp[9];