more memory API porting
authorWim Taymans <wim.taymans@collabora.co.uk>
Tue, 24 Jan 2012 13:38:58 +0000 (14:38 +0100)
committerWim Taymans <wim.taymans@collabora.co.uk>
Wed, 25 Jan 2012 11:30:29 +0000 (12:30 +0100)
26 files changed:
ext/annodex/gstcmmldec.c
ext/annodex/gstcmmlenc.c
ext/flac/gstflacdec.c
ext/flac/gstflacenc.c
ext/flac/gstflactag.c
ext/jpeg/gstjpegenc.c
ext/jpeg/gstjpegenc.h
ext/pulse/pulsesink.c
ext/soup/gstsouphttpclientsink.c
ext/soup/gstsouphttpsrc.c
ext/speex/gstspeexdec.c
ext/speex/gstspeexenc.c
gst/rtp/gstrtpvorbisdepay.c
gst/rtp/gstrtpvorbispay.c
gst/rtpmanager/rtpsession.c
gst/rtsp/gstrtspsrc.c
gst/spectrum/gstspectrum.c
gst/udp/gstdynudpsink.c
gst/udp/gstmultiudpsink.c
gst/videocrop/gstvideocrop.c
gst/wavenc/gstwavenc.c
gst/wavparse/gstwavparse.c
sys/v4l2/gstv4l2bufferpool.c
sys/v4l2/gstv4l2object.c
sys/ximage/gstximagesrc.c
tests/check/elements/parser.c

index 050224a..4a04be0 100644 (file)
@@ -358,10 +358,13 @@ gst_cmml_dec_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
 {
   GstCmmlDec *dec = GST_CMML_DEC (parent);
   GstCmmlPacketType packet;
+  GstMapInfo map;
   guint8 *data;
   gsize size;
 
-  data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+  gst_buffer_map (buffer, &map, GST_MAP_READ);
+  data = map.data;
+  size = map.size;
 
   if (size == 0) {
     /* the EOS page could be empty */
@@ -400,7 +403,7 @@ gst_cmml_dec_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
   }
 
 done:
-  gst_buffer_unmap (buffer, data, size);
+  gst_buffer_unmap (buffer, &map);
   gst_buffer_unref (buffer);
 
   return dec->flow_return;
index 5767558..3a466cd 100644 (file)
@@ -598,23 +598,23 @@ gst_cmml_enc_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
 {
   GError *err = NULL;
   GstCmmlEnc *enc = GST_CMML_ENC (parent);
-  gchar *data;
-  gsize size;
+  GstMapInfo map;
 
   /* the CMML handlers registered with enc->parser will override this when
    * encoding/pushing the buffers downstream
    */
   enc->flow_return = GST_FLOW_OK;
 
-  data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+  gst_buffer_map (buffer, &map, GST_MAP_READ);
 
-  if (!gst_cmml_parser_parse_chunk (enc->parser, data, size, &err)) {
+  if (!gst_cmml_parser_parse_chunk (enc->parser, (gchar *) map.data, map.size,
+          &err)) {
     GST_ELEMENT_ERROR (enc, STREAM, ENCODE, (NULL), ("%s", err->message));
     g_error_free (err);
     enc->flow_return = GST_FLOW_ERROR;
   }
 
-  gst_buffer_unmap (buffer, data, size);
+  gst_buffer_unmap (buffer, &map);
   gst_buffer_unref (buffer);
   return enc->flow_return;
 }
index c71a7ec..3cba558 100644 (file)
@@ -536,8 +536,7 @@ gst_flac_dec_write (GstFlacDec * flacdec, const FLAC__Frame * frame,
   guint channels = frame->header.channels;
   guint samples = frame->header.blocksize;
   guint j, i;
-  gpointer data;
-  gsize size;
+  GstMapInfo map;
   gboolean caps_changed;
 
   GST_LOG_OBJECT (flacdec, "samples in frame header: %d", samples);
@@ -618,9 +617,9 @@ gst_flac_dec_write (GstFlacDec * flacdec, const FLAC__Frame * frame,
   GST_LOG_OBJECT (flacdec, "alloc_buffer_and_set_caps");
   outbuf = gst_buffer_new_allocate (NULL, samples * channels * (width / 8), 0);
 
-  data = gst_buffer_map (outbuf, &size, NULL, GST_MAP_WRITE);
+  gst_buffer_map (outbuf, &map, GST_MAP_WRITE);
   if (width == 8) {
-    gint8 *outbuffer = (gint8 *) data;
+    gint8 *outbuffer = (gint8 *) map.data;
     gint *reorder_map = flacdec->channel_reorder_map;
 
     if (width != depth) {
@@ -637,7 +636,7 @@ gst_flac_dec_write (GstFlacDec * flacdec, const FLAC__Frame * frame,
       }
     }
   } else if (width == 16) {
-    gint16 *outbuffer = (gint16 *) data;
+    gint16 *outbuffer = (gint16 *) map.data;
     gint *reorder_map = flacdec->channel_reorder_map;
 
     if (width != depth) {
@@ -655,7 +654,7 @@ gst_flac_dec_write (GstFlacDec * flacdec, const FLAC__Frame * frame,
       }
     }
   } else if (width == 32) {
-    gint32 *outbuffer = (gint32 *) data;
+    gint32 *outbuffer = (gint32 *) map.data;
     gint *reorder_map = flacdec->channel_reorder_map;
 
     if (width != depth) {
@@ -675,7 +674,7 @@ gst_flac_dec_write (GstFlacDec * flacdec, const FLAC__Frame * frame,
   } else {
     g_assert_not_reached ();
   }
-  gst_buffer_unmap (outbuf, data, size);
+  gst_buffer_unmap (outbuf, &map);
 
   GST_DEBUG_OBJECT (flacdec, "pushing %d samples", samples);
 
@@ -743,17 +742,17 @@ gst_flac_dec_handle_frame (GstAudioDecoder * audio_dec, GstBuffer * buf)
   if (G_UNLIKELY (!dec->got_headers)) {
     gboolean got_audio_frame;
     gint64 unused;
-    guint8 *data;
-    gsize size;
+    GstMapInfo map;
 
     /* check if this is a flac audio frame (rather than a header or junk) */
-    data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
-    got_audio_frame = gst_flac_dec_scan_got_frame (dec, data, size, &unused);
-    gst_buffer_unmap (buf, data, size);
+    gst_buffer_map (buf, &map, GST_MAP_READ);
+    got_audio_frame =
+        gst_flac_dec_scan_got_frame (dec, map.data, map.size, &unused);
+    gst_buffer_unmap (buf, &map);
 
     if (!got_audio_frame) {
       GST_INFO_OBJECT (dec, "dropping in-stream header, %" G_GSIZE_FORMAT " "
-          "bytes", size);
+          "bytes", map.size);
       gst_audio_decoder_finish_frame (audio_dec, NULL, 1);
       return GST_FLOW_OK;
     }
index ad876c2..e08284d 100644 (file)
@@ -516,8 +516,7 @@ gst_flac_enc_set_metadata (GstFlacEnc * flacenc, guint64 total_samples)
     GstTagImageType image_type = GST_TAG_IMAGE_TYPE_NONE;
 #endif
     gint i;
-    guint8 *data;
-    gsize size;
+    GstMapInfo map;
 
     for (i = 0; i < n_images + n_preview_images; i++) {
       if (i < n_images) {
@@ -545,10 +544,10 @@ gst_flac_enc_set_metadata (GstFlacEnc * flacenc, guint64 total_samples)
         image_type = image_type + 2;
 #endif
 
-      data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+      gst_buffer_map (buffer, &map, GST_MAP_READ);
       FLAC__metadata_object_picture_set_data (flacenc->meta[entries],
-          data, size, TRUE);
-      gst_buffer_unmap (buffer, data, size);
+          map.data, map.size, TRUE);
+      gst_buffer_unmap (buffer, &map);
 
 #if 0
       /* FIXME: There's no way to set the picture type in libFLAC */
@@ -915,6 +914,7 @@ gst_flac_enc_process_stream_headers (GstFlacEnc * enc)
 
   for (l = enc->headers; l != NULL; l = l->next) {
     GstBuffer *buf;
+    GstMapInfo map;
     guint8 *data;
     gsize size;
 
@@ -925,7 +925,9 @@ gst_flac_enc_process_stream_headers (GstFlacEnc * enc)
     buf = GST_BUFFER_CAST (l->data);
     GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_IN_CAPS);
 
-    data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
+    gst_buffer_map (buf, &map, GST_MAP_READ);
+    data = map.data;
+    size = map.size;
 
     /* find initial 4-byte marker which we need to skip later on */
     if (size == 4 && memcmp (data, "fLaC", 4) == 0) {
@@ -936,7 +938,7 @@ gst_flac_enc_process_stream_headers (GstFlacEnc * enc)
       vorbiscomment = buf;
     }
 
-    gst_buffer_unmap (buf, data, size);
+    gst_buffer_unmap (buf, &map);
   }
 
   if (marker == NULL || streaminfo == NULL || vorbiscomment == NULL) {
@@ -951,8 +953,9 @@ gst_flac_enc_process_stream_headers (GstFlacEnc * enc)
   {
     GstBuffer *buf;
     guint16 num;
+    GstMapInfo map;
     guint8 *bdata;
-    gsize bsize, slen;
+    gsize slen;
 
     /* minus one for the marker that is merged with streaminfo here */
     num = g_list_length (enc->headers) - 1;
@@ -960,7 +963,8 @@ gst_flac_enc_process_stream_headers (GstFlacEnc * enc)
     slen = gst_buffer_get_size (streaminfo);
     buf = gst_buffer_new_and_alloc (13 + slen);
 
-    bdata = gst_buffer_map (buf, &bsize, NULL, GST_MAP_WRITE);
+    gst_buffer_map (buf, &map, GST_MAP_WRITE);
+    bdata = map.data;
     bdata[0] = 0x7f;
     memcpy (bdata + 1, "FLAC", 4);
     bdata[5] = 0x01;            /* mapping version major */
@@ -969,7 +973,7 @@ gst_flac_enc_process_stream_headers (GstFlacEnc * enc)
     bdata[8] = (num & 0x00FF) >> 0;
     memcpy (bdata + 9, "fLaC", 4);
     gst_buffer_extract (streaminfo, 0, bdata + 13, slen);
-    gst_buffer_unmap (buf, bdata, bsize);
+    gst_buffer_unmap (buf, &map);
 
     notgst_value_array_append_buffer (&array, buf);
     gst_buffer_unref (buf);
@@ -1169,12 +1173,11 @@ gst_flac_enc_handle_frame (GstAudioEncoder * enc, GstBuffer * buffer)
 {
   GstFlacEnc *flacenc;
   FLAC__int32 *data;
-  gsize bsize;
   gint samples, width, channels;
   gulong i;
   gint j;
   FLAC__bool res;
-  gpointer bdata;
+  GstMapInfo map;
   GstAudioInfo *info =
       gst_audio_encoder_get_audio_info (GST_AUDIO_ENCODER (enc));
   gint *reorder_map;
@@ -1202,28 +1205,28 @@ gst_flac_enc_handle_frame (GstAudioEncoder * enc, GstBuffer * buffer)
     return flacenc->last_flow;
   }
 
-  bdata = gst_buffer_map (buffer, &bsize, NULL, GST_MAP_READ);
-  samples = bsize / (width >> 3);
+  gst_buffer_map (buffer, &map, GST_MAP_READ);
+  samples = map.size / (width >> 3);
 
   data = g_malloc (samples * sizeof (FLAC__int32));
 
   samples /= channels;
   if (width == 8) {
-    gint8 *indata = (gint8 *) bdata;
+    gint8 *indata = (gint8 *) map.data;
 
     for (i = 0; i < samples; i++)
       for (j = 0; j < channels; j++)
         data[i * channels + reorder_map[j]] =
             (FLAC__int32) indata[i * channels + j];
   } else if (width == 16) {
-    gint16 *indata = (gint16 *) bdata;
+    gint16 *indata = (gint16 *) map.data;
 
     for (i = 0; i < samples; i++)
       for (j = 0; j < channels; j++)
         data[i * channels + reorder_map[j]] =
             (FLAC__int32) indata[i * channels + j];
   } else if (width == 24) {
-    guint8 *indata = (guint8 *) bdata;
+    guint8 *indata = (guint8 *) map.data;
     guint32 val;
 
     for (i = 0; i < samples; i++)
@@ -1234,7 +1237,7 @@ gst_flac_enc_handle_frame (GstAudioEncoder * enc, GstBuffer * buffer)
         data[i * channels + reorder_map[j]] = (FLAC__int32) val;
       }
   } else if (width == 32) {
-    gint32 *indata = (gint32 *) bdata;
+    gint32 *indata = (gint32 *) map.data;
 
     for (i = 0; i < samples; i++)
       for (j = 0; j < channels; j++)
@@ -1243,7 +1246,7 @@ gst_flac_enc_handle_frame (GstAudioEncoder * enc, GstBuffer * buffer)
   } else {
     g_assert_not_reached ();
   }
-  gst_buffer_unmap (buffer, bdata, bsize);
+  gst_buffer_unmap (buffer, &map);
 
   res = FLAC__stream_encoder_process_interleaved (flacenc->encoder,
       (const FLAC__int32 *) data, samples / channels);
index 4a1428e..5c15bfd 100644 (file)
@@ -191,7 +191,7 @@ gst_flac_tag_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
 {
   GstFlacTag *tag;
   GstFlowReturn ret;
-  guint8 *data;
+  GstMapInfo map;
   gsize size;
 
   ret = GST_FLOW_OK;
@@ -284,9 +284,9 @@ gst_flac_tag_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
     /* clear the is-last flag, as the last metadata block will
      * be the vorbis comment block which we will build ourselves.
      */
-    data = gst_buffer_map (metadata_buffer, &size, NULL, GST_MAP_READWRITE);
-    data[0] &= (~0x80);
-    gst_buffer_unmap (metadata_buffer, data, size);
+    gst_buffer_map (metadata_buffer, &map, GST_MAP_READWRITE);
+    map.data[0] &= (~0x80);
+    gst_buffer_unmap (metadata_buffer, &map);
 
     if (tag->state == GST_FLAC_TAG_STATE_WRITING_METADATA_BLOCK) {
       GST_DEBUG_OBJECT (tag, "pushing metadata block buffer");
@@ -362,11 +362,11 @@ gst_flac_tag_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
       if (buffer == NULL)
         goto no_buffer;
 
-      data = gst_buffer_map (buffer, &size, NULL, GST_MAP_WRITE);
-      memset (data, 0, size);
-      data[0] = 0x81;           /* 0x80 = Last metadata block, 
+      gst_buffer_map (buffer, &map, GST_MAP_WRITE);
+      memset (map.data, 0, map.size);
+      map.data[0] = 0x81;       /* 0x80 = Last metadata block, 
                                  * 0x01 = padding block */
-      gst_buffer_unmap (buffer, data, size);
+      gst_buffer_unmap (buffer, &map);
     } else {
       guchar header[4];
       guint8 fbit[1];
@@ -399,14 +399,14 @@ gst_flac_tag_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
     /* The 4 byte metadata block header isn't accounted for in the total
      * size of the metadata block
      */
-    data = gst_buffer_map (buffer, &size, NULL, GST_MAP_WRITE);
-    data[1] = (((size - 4) & 0xFF0000) >> 16);
-    data[2] = (((size - 4) & 0x00FF00) >> 8);
-    data[3] = ((size - 4) & 0x0000FF);
-    gst_buffer_unmap (buffer, data, size);
+    gst_buffer_map (buffer, &map, GST_MAP_WRITE);
+    map.data[1] = (((map.size - 4) & 0xFF0000) >> 16);
+    map.data[2] = (((map.size - 4) & 0x00FF00) >> 8);
+    map.data[3] = ((map.size - 4) & 0x0000FF);
+    gst_buffer_unmap (buffer, &map);
 
     GST_DEBUG_OBJECT (tag, "pushing %" G_GSIZE_FORMAT " byte vorbiscomment "
-        "buffer", size);
+        "buffer", map.size);
 
     ret = gst_pad_push (tag->srcpad, buffer);
     if (ret != GST_FLOW_OK) {
index 3057802..bb0767f 100644 (file)
@@ -159,10 +159,11 @@ static void
 ensure_memory (GstJpegEnc * jpegenc)
 {
   GstMemory *new_memory;
+  GstMapInfo map;
   gsize old_size, desired_size, new_size;
   guint8 *new_data;
 
-  old_size = jpegenc->output_size;
+  old_size = jpegenc->output_map.size;
   if (old_size == 0)
     desired_size = jpegenc->bufsize;
   else
@@ -171,19 +172,20 @@ ensure_memory (GstJpegEnc * jpegenc)
   /* Our output memory wasn't big enough.
    * Make a new memory that's twice the size, */
   new_memory = gst_allocator_alloc (NULL, desired_size, 3);
-  new_data = gst_memory_map (new_memory, &new_size, NULL, GST_MAP_READWRITE);
+  gst_memory_map (new_memory, &map, GST_MAP_READWRITE);
+  new_data = map.data;
+  new_size = map.size;
 
   /* copy previous data if any */
   if (jpegenc->output_mem) {
-    memcpy (new_data, jpegenc->output_data, old_size);
-    gst_memory_unmap (jpegenc->output_mem);
+    memcpy (new_data, jpegenc->output_map.data, old_size);
+    gst_memory_unmap (jpegenc->output_mem, &jpegenc->output_map);
     gst_memory_unref (jpegenc->output_mem);
   }
 
   /* drop it into place, */
   jpegenc->output_mem = new_memory;
-  jpegenc->output_data = new_data;
-  jpegenc->output_size = new_size;
+  jpegenc->output_map = map;
 
   /* and last, update libjpeg on where to work. */
   jpegenc->jdest.next_output_byte = new_data + old_size;
@@ -215,12 +217,12 @@ gst_jpegenc_term_destination (j_compress_ptr cinfo)
   GstJpegEnc *jpegenc = (GstJpegEnc *) (cinfo->client_data);
   GST_DEBUG_OBJECT (jpegenc, "gst_jpegenc_chain: term_source");
 
-  gst_memory_unmap (jpegenc->output_mem);
+  gst_memory_unmap (jpegenc->output_mem, &jpegenc->output_map);
   /* Trim the buffer size. we will push it in the chain function */
   gst_memory_resize (jpegenc->output_mem, 0,
-      jpegenc->output_size - jpegenc->jdest.free_in_buffer);
-  jpegenc->output_data = NULL;
-  jpegenc->output_size = 0;
+      jpegenc->output_map.size - jpegenc->jdest.free_in_buffer);
+  jpegenc->output_map.data = NULL;
+  jpegenc->output_map.size = 0;
 }
 
 static void
@@ -566,12 +568,10 @@ gst_jpegenc_chain (GstPad * pad, GstObject * parent, GstBuffer * buf)
   }
 
   jpegenc->output_mem = gst_allocator_alloc (NULL, jpegenc->bufsize, 3);
-  jpegenc->output_data =
-      gst_memory_map (jpegenc->output_mem, &jpegenc->output_size, NULL,
-      GST_MAP_READWRITE);
+  gst_memory_map (jpegenc->output_mem, &jpegenc->output_map, GST_MAP_READWRITE);
 
-  jpegenc->jdest.next_output_byte = jpegenc->output_data;
-  jpegenc->jdest.free_in_buffer = jpegenc->output_size;
+  jpegenc->jdest.next_output_byte = jpegenc->output_map.data;
+  jpegenc->jdest.free_in_buffer = jpegenc->output_map.size;
 
   /* prepare for raw input */
 #if JPEG_LIB_VERSION >= 70
index f677887..f684ff8 100644 (file)
@@ -86,8 +86,7 @@ struct _GstJpegEnc
   GstFlowReturn last_ret;
 
   GstMemory *output_mem;
-  gpointer output_data;
-  gsize output_size;
+  GstMapInfo output_map;
 };
 
 struct _GstJpegEncClass
index 8699ccf..4d1d5c8 100644 (file)
@@ -1737,8 +1737,7 @@ gst_pulsesink_payload (GstAudioBaseSink * sink, GstBuffer * buf)
       /* FIXME: alloc memory from PA if possible */
       gint framesize = gst_audio_iec61937_frame_size (&sink->ringbuffer->spec);
       GstBuffer *out;
-      guint8 *indata, *outdata;
-      gsize insize, outsize;
+      GstMapInfo inmap, outmap;
       gboolean res;
 
       if (framesize <= 0)
@@ -1746,14 +1745,14 @@ gst_pulsesink_payload (GstAudioBaseSink * sink, GstBuffer * buf)
 
       out = gst_buffer_new_and_alloc (framesize);
 
-      indata = gst_buffer_map (buf, &insize, NULL, GST_MAP_READ);
-      outdata = gst_buffer_map (out, &outsize, NULL, GST_MAP_WRITE);
+      gst_buffer_map (buf, &inmap, GST_MAP_READ);
+      gst_buffer_map (out, &outmap, GST_MAP_WRITE);
 
-      res = gst_audio_iec61937_payload (indata, insize,
-          outdata, outsize, &sink->ringbuffer->spec);
+      res = gst_audio_iec61937_payload (inmap.data, inmap.size,
+          outmap.data, outmap.size, &sink->ringbuffer->spec);
 
-      gst_buffer_unmap (buf, indata, insize);
-      gst_buffer_unmap (out, outdata, outsize);
+      gst_buffer_unmap (buf, &inmap);
+      gst_buffer_unmap (out, &outmap);
 
       if (!res) {
         gst_buffer_unref (out);
index 712cee5..c1ef3f4 100644 (file)
@@ -623,30 +623,28 @@ send_message_locked (GstSoupHttpClientSink * souphttpsink)
   if (souphttpsink->offset == 0) {
     for (g = souphttpsink->streamheader_buffers; g; g = g_list_next (g)) {
       GstBuffer *buffer = g->data;
-      gpointer data;
-      gsize size;
+      GstMapInfo map;
 
       /* FIXME, lifetime of the buffer? */
-      data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+      gst_buffer_map (buffer, &map, GST_MAP_READ);
       soup_message_body_append (souphttpsink->message->request_body,
-          SOUP_MEMORY_STATIC, data, size);
-      n += size;
-      gst_buffer_unmap (buffer, data, size);
+          SOUP_MEMORY_STATIC, map.data, map.size);
+      n += map.size;
+      gst_buffer_unmap (buffer, &map);
     }
   }
 
   for (g = souphttpsink->queued_buffers; g; g = g_list_next (g)) {
     GstBuffer *buffer = g->data;
     if (!GST_BUFFER_FLAG_IS_SET (buffer, GST_BUFFER_FLAG_IN_CAPS)) {
-      gpointer data;
-      gsize size;
+      GstMapInfo map;
 
       /* FIXME, lifetime of the buffer? */
-      data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+      gst_buffer_map (buffer, &map, GST_MAP_READ);
       soup_message_body_append (souphttpsink->message->request_body,
-          SOUP_MEMORY_STATIC, data, size);
-      n += size;
-      gst_buffer_unmap (buffer, data, size);
+          SOUP_MEMORY_STATIC, map.data, map.size);
+      n += map.size;
+      gst_buffer_unmap (buffer, &map);
     }
   }
 
index 42723ee..55f52fe 100644 (file)
@@ -876,7 +876,7 @@ gst_soup_http_src_finished_cb (SoupMessage * msg, GstSoupHTTPSrc * src)
 typedef struct
 {
   GstBuffer *buffer;
-  gpointer data;
+  GstMapInfo map;
 } SoupGstChunk;
 
 static void
@@ -884,7 +884,7 @@ gst_soup_http_src_chunk_free (gpointer user_data)
 {
   SoupGstChunk *chunk = (SoupGstChunk *) user_data;
 
-  gst_buffer_unmap (chunk->buffer, chunk->data, -1);
+  gst_buffer_unmap (chunk->buffer, &chunk->map);
   gst_buffer_unref (chunk->buffer);
   g_slice_free (SoupGstChunk, chunk);
 }
@@ -919,9 +919,9 @@ gst_soup_http_src_chunk_allocator (SoupMessage * msg, gsize max_len,
 
   chunk = g_slice_new0 (SoupGstChunk);
   chunk->buffer = gstbuf;
-  chunk->data = gst_buffer_map (gstbuf, &length, NULL, GST_MAP_READWRITE);
+  gst_buffer_map (gstbuf, &chunk->map, GST_MAP_READWRITE);
 
-  soupbuf = soup_buffer_new_with_owner (chunk->data, length,
+  soupbuf = soup_buffer_new_with_owner (chunk->map.data, chunk->map.size,
       chunk, gst_soup_http_src_chunk_free);
 
   return soupbuf;
index 4ba4d28..6ec7d5b 100644 (file)
@@ -190,13 +190,12 @@ static GstFlowReturn
 gst_speex_dec_parse_header (GstSpeexDec * dec, GstBuffer * buf)
 {
   GstCaps *caps;
-  char *data;
-  gsize size;
+  GstMapInfo map;
 
   /* get the header */
-  data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
-  dec->header = speex_packet_to_header (data, size);
-  gst_buffer_unmap (buf, data, size);
+  gst_buffer_map (buf, &map, GST_MAP_READ);
+  dec->header = speex_packet_to_header ((gchar *) map.data, map.size);
+  gst_buffer_unmap (buf, &map);
 
   if (!dec->header)
     goto no_header;
@@ -368,23 +367,22 @@ gst_speex_dec_parse_data (GstSpeexDec * dec, GstBuffer * buf)
   GstFlowReturn res = GST_FLOW_OK;
   gint i, fpp;
   SpeexBits *bits;
-  gsize size;
-  char *data;
+  GstMapInfo map;
 
   if (!dec->frame_duration)
     goto not_negotiated;
 
   if (G_LIKELY (gst_buffer_get_size (buf))) {
     /* send data to the bitstream */
-    data = gst_buffer_map (buf, &size, NULL, GST_MAP_READ);
-    speex_bits_read_from (&dec->bits, data, size);
-    gst_buffer_unmap (buf, data, size);
+    gst_buffer_map (buf, &map, GST_MAP_READ);
+    speex_bits_read_from (&dec->bits, (gchar *) map.data, map.size);
+    gst_buffer_unmap (buf, &map);
 
     fpp = dec->header->frames_per_packet;
     bits = &dec->bits;
 
     GST_DEBUG_OBJECT (dec, "received buffer of size %" G_GSIZE_FORMAT
-        ", fpp %d, %d bits", size, fpp, speex_bits_remaining (bits));
+        ", fpp %d, %d bits", map.size, fpp, speex_bits_remaining (bits));
   } else {
     /* FIXME ? actually consider how much concealment is needed */
     /* concealment data, pass NULL as the bits parameters */
@@ -396,7 +394,6 @@ gst_speex_dec_parse_data (GstSpeexDec * dec, GstBuffer * buf)
   /* now decode each frame, catering for unknown number of them (e.g. rtp) */
   for (i = 0; i < fpp; i++) {
     GstBuffer *outbuf;
-    gint16 *out_data;
     gint ret;
 
     GST_LOG_OBJECT (dec, "decoding frame %d/%d, %d bits remaining", i, fpp,
@@ -418,9 +415,8 @@ gst_speex_dec_parse_data (GstSpeexDec * dec, GstBuffer * buf)
         gst_buffer_new_allocate (NULL,
         dec->frame_size * dec->header->nb_channels * 2, 0);
 
-    out_data = gst_buffer_map (outbuf, &size, NULL, GST_MAP_WRITE);
-    ret = speex_decode_int (dec->state, bits, out_data);
-    gst_buffer_unmap (outbuf, out_data, size);
+    gst_buffer_map (outbuf, &map, GST_MAP_WRITE);
+    ret = speex_decode_int (dec->state, bits, (spx_int16_t *) map.data);
 
     if (ret == -1) {
       /* uh? end of stream */
@@ -445,7 +441,10 @@ gst_speex_dec_parse_data (GstSpeexDec * dec, GstBuffer * buf)
       gst_buffer_unref (outbuf);
     }
     if (dec->header->nb_channels == 2)
-      speex_decode_stereo_int (out_data, dec->frame_size, dec->stereo);
+      speex_decode_stereo_int ((spx_int16_t *) map.data, dec->frame_size,
+          dec->stereo);
+
+    gst_buffer_unmap (outbuf, &map);
 
     res = gst_audio_decoder_finish_frame (GST_AUDIO_DECODER (dec), outbuf, 1);
 
@@ -469,8 +468,8 @@ not_negotiated:
 static gboolean
 memcmp_buffers (GstBuffer * buf1, GstBuffer * buf2)
 {
+  GstMapInfo map;
   gsize size1, size2;
-  gpointer data1;
   gboolean res;
 
   size1 = gst_buffer_get_size (buf1);
@@ -479,9 +478,9 @@ memcmp_buffers (GstBuffer * buf1, GstBuffer * buf2)
   if (size1 != size2)
     return FALSE;
 
-  data1 = gst_buffer_map (buf1, NULL, NULL, GST_MAP_READ);
-  res = gst_buffer_memcmp (buf2, 0, data1, size1) == 0;
-  gst_buffer_unmap (buf1, data1, size1);
+  gst_buffer_map (buf1, &map, GST_MAP_READ);
+  res = gst_buffer_memcmp (buf2, 0, map.data, map.size) == 0;
+  gst_buffer_unmap (buf1, &map);
 
   return res;
 }
index 3bf2bbc..ebcc686 100644 (file)
@@ -539,13 +539,16 @@ gst_speex_enc_encode (GstSpeexEnc * enc, GstBuffer * buf)
   gint frame_size = enc->frame_size;
   gint bytes = frame_size * 2 * enc->channels, samples;
   gint outsize, written, dtx_ret = 0;
-  guint8 *data, *data0 = NULL, *bdata, *outdata;
+  GstMapInfo map;
+  guint8 *data, *data0 = NULL, *bdata;
   gsize bsize, size;
   GstBuffer *outbuf;
   GstFlowReturn ret = GST_FLOW_OK;
 
   if (G_LIKELY (buf)) {
-    bdata = gst_buffer_map (buf, &bsize, NULL, GST_MAP_READ);
+    gst_buffer_map (buf, &map, GST_MAP_READ);
+    bdata = map.data;
+    bsize = map.size;
 
     if (G_UNLIKELY (bsize % bytes)) {
       GST_DEBUG_OBJECT (enc, "draining; adding silence samples");
@@ -553,7 +556,7 @@ gst_speex_enc_encode (GstSpeexEnc * enc, GstBuffer * buf)
       size = ((bsize / bytes) + 1) * bytes;
       data0 = data = g_malloc0 (size);
       memcpy (data, bdata, bsize);
-      gst_buffer_unmap (buf, bdata, bsize);
+      gst_buffer_unmap (buf, &map);
       bdata = NULL;
     } else {
       data = bdata;
@@ -585,7 +588,7 @@ gst_speex_enc_encode (GstSpeexEnc * enc, GstBuffer * buf)
   outsize = speex_bits_nbytes (&enc->bits);
 
   if (bdata)
-    gst_buffer_unmap (buf, bdata, bsize);
+    gst_buffer_unmap (buf, &map);
 
 #if 0
   ret = gst_pad_alloc_buffer_and_set_caps (GST_AUDIO_ENCODER_SRC_PAD (enc),
@@ -596,9 +599,9 @@ gst_speex_enc_encode (GstSpeexEnc * enc, GstBuffer * buf)
     goto done;
 #endif
   outbuf = gst_buffer_new_allocate (NULL, outsize, 0);
-  outdata = gst_buffer_map (outbuf, NULL, NULL, GST_MAP_WRITE);
+  gst_buffer_map (outbuf, &map, GST_MAP_WRITE);
 
-  written = speex_bits_write (&enc->bits, (gchar *) outdata, outsize);
+  written = speex_bits_write (&enc->bits, (gchar *) map.data, outsize);
 
   if (G_UNLIKELY (written < outsize)) {
     GST_ERROR_OBJECT (enc, "short write: %d < %d bytes", written, outsize);
@@ -606,7 +609,8 @@ gst_speex_enc_encode (GstSpeexEnc * enc, GstBuffer * buf)
     GST_ERROR_OBJECT (enc, "overrun: %d > %d bytes", written, outsize);
     written = outsize;
   }
-  gst_buffer_unmap (outbuf, outdata, written);
+  gst_buffer_unmap (outbuf, &map);
+  gst_buffer_resize (outbuf, 0, written);
 
   if (!dtx_ret)
     GST_BUFFER_FLAG_SET (outbuf, GST_BUFFER_FLAG_GAP);
index ccd4b3e..d2017ac 100644 (file)
@@ -152,12 +152,15 @@ gst_rtp_vorbis_depay_parse_configuration (GstRtpVorbisDepay * rtpvorbisdepay,
 {
   GstBuffer *buf;
   guint32 num_headers;
-  guint8 *data, *bdata;
+  GstMapInfo map;
+  guint8 *data;
   gsize size;
   guint offset;
   gint i, j;
 
-  bdata = data = gst_buffer_map (confbuf, &size, NULL, GST_MAP_READ);
+  gst_buffer_map (confbuf, &map, GST_MAP_READ);
+  data = map.data;
+  size = map.size;
 
   GST_DEBUG_OBJECT (rtpvorbisdepay, "config size %" G_GSIZE_FORMAT, size);
 
@@ -295,7 +298,7 @@ gst_rtp_vorbis_depay_parse_configuration (GstRtpVorbisDepay * rtpvorbisdepay,
     rtpvorbisdepay->configs = g_list_append (rtpvorbisdepay->configs, conf);
   }
 
-  gst_buffer_unmap (confbuf, bdata, -1);
+  gst_buffer_unmap (confbuf, &map);
   gst_buffer_unref (confbuf);
 
   return TRUE;
@@ -304,7 +307,7 @@ gst_rtp_vorbis_depay_parse_configuration (GstRtpVorbisDepay * rtpvorbisdepay,
 too_small:
   {
     GST_DEBUG_OBJECT (rtpvorbisdepay, "configuration too small");
-    gst_buffer_unmap (confbuf, bdata, -1);
+    gst_buffer_unmap (confbuf, &map);
     gst_buffer_unref (confbuf);
     return FALSE;
   }
@@ -316,23 +319,23 @@ gst_rtp_vorbis_depay_parse_inband_configuration (GstRtpVorbisDepay *
     guint length)
 {
   GstBuffer *confbuf;
-  guint8 *conf;
+  GstMapInfo map;
 
   if (G_UNLIKELY (size < 4))
     return FALSE;
 
   /* transform inline to out-of-band and parse that one */
   confbuf = gst_buffer_new_and_alloc (size + 9);
-  conf = gst_buffer_map (confbuf, NULL, NULL, -1);
+  gst_buffer_map (confbuf, &map, GST_MAP_WRITE);
   /* 1 header */
-  GST_WRITE_UINT32_BE (conf, 1);
+  GST_WRITE_UINT32_BE (map.data, 1);
   /* write Ident */
-  GST_WRITE_UINT24_BE (conf + 4, ident);
+  GST_WRITE_UINT24_BE (map.data + 4, ident);
   /* write sort-of-length */
-  GST_WRITE_UINT16_BE (conf + 7, length);
+  GST_WRITE_UINT16_BE (map.data + 7, length);
   /* copy remainder */
-  memcpy (conf + 9, configuration, size);
-  gst_buffer_unmap (confbuf, conf, -1);
+  memcpy (map.data + 9, configuration, size);
+  gst_buffer_unmap (confbuf, &map);
 
   return gst_rtp_vorbis_depay_parse_configuration (rtpvorbisdepay, confbuf);
 }
@@ -595,12 +598,8 @@ gst_rtp_vorbis_depay_process (GstRTPBaseDepayload * depayload, GstBuffer * buf)
               (payload - to_free) + length, payload - to_free, length));
       to_free = NULL;
     } else {
-      guint8 *data;
-
       outbuf = gst_buffer_new_and_alloc (length);
-      data = gst_buffer_map (outbuf, NULL, NULL, GST_MAP_WRITE);
-      memcpy (data, payload, length);
-      gst_buffer_unmap (outbuf, data, -1);
+      gst_buffer_fill (outbuf, 0, payload, length);
     }
 
     payload += length;
index 75b961e..c9c9028 100644 (file)
@@ -291,10 +291,10 @@ gst_rtp_vorbis_pay_finish_headers (GstRTPBasePayload * basepayload)
   ident = fnv1_hash_32_new ();
   for (walk = rtpvorbispay->headers; walk; walk = g_list_next (walk)) {
     GstBuffer *buf = GST_BUFFER_CAST (walk->data);
-    guint bsize, osize;
-    guint8 *data;
+    GstMapInfo map;
+    guint bsize;
 
-    bsize = osize = gst_buffer_get_size (buf);
+    bsize = gst_buffer_get_size (buf);
     length += bsize;
     n_headers++;
 
@@ -307,9 +307,9 @@ gst_rtp_vorbis_pay_finish_headers (GstRTPBasePayload * basepayload)
       } while (bsize);
     }
     /* update hash */
-    data = gst_buffer_map (buf, NULL, NULL, GST_MAP_READ);
-    ident = fnv1_hash_32_update (ident, data, osize);
-    gst_buffer_unmap (buf, data, -1);
+    gst_buffer_map (buf, &map, GST_MAP_READ);
+    ident = fnv1_hash_32_update (ident, map.data, map.size);
+    gst_buffer_unmap (buf, &map);
   }
 
   /* packet length is header size + packet length */
@@ -475,6 +475,7 @@ gst_rtp_vorbis_pay_handle_buffer (GstRTPBasePayload * basepayload,
   GstRtpVorbisPay *rtpvorbispay;
   GstFlowReturn ret;
   guint newsize;
+  GstMapInfo map;
   gsize size;
   guint8 *data;
   guint packet_len;
@@ -488,7 +489,9 @@ gst_rtp_vorbis_pay_handle_buffer (GstRTPBasePayload * basepayload,
 
   rtpvorbispay = GST_RTP_VORBIS_PAY (basepayload);
 
-  data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+  gst_buffer_map (buffer, &map, GST_MAP_READ);
+  data = map.data;
+  size = map.size;
   duration = GST_BUFFER_DURATION (buffer);
   timestamp = GST_BUFFER_TIMESTAMP (buffer);
 
@@ -523,7 +526,7 @@ gst_rtp_vorbis_pay_handle_buffer (GstRTPBasePayload * basepayload,
     if (VDT != 0) {
       GST_DEBUG_OBJECT (rtpvorbispay, "collecting header");
       /* append header to the list of headers */
-      gst_buffer_unmap (buffer, data, -1);
+      gst_buffer_unmap (buffer, &map);
       rtpvorbispay->headers = g_list_append (rtpvorbispay->headers, buffer);
       ret = GST_FLOW_OK;
       goto done;
@@ -623,7 +626,7 @@ gst_rtp_vorbis_pay_handle_buffer (GstRTPBasePayload * basepayload,
   if (rtp.buffer)
     gst_rtp_buffer_unmap (&rtp);
 
-  gst_buffer_unmap (buffer, data, -1);
+  gst_buffer_unmap (buffer, &map);
   gst_buffer_unref (buffer);
 
 done:
@@ -635,13 +638,13 @@ wrong_size:
     GST_ELEMENT_WARNING (rtpvorbispay, STREAM, DECODE,
         ("Invalid packet size (1 < %" G_GSIZE_FORMAT " <= 0xffff)", size),
         (NULL));
-    gst_buffer_unmap (buffer, data, -1);
+    gst_buffer_unmap (buffer, &map);
     gst_buffer_unref (buffer);
     return GST_FLOW_OK;
   }
 parse_id_failed:
   {
-    gst_buffer_unmap (buffer, data, -1);
+    gst_buffer_unmap (buffer, &map);
     gst_buffer_unref (buffer);
     return GST_FLOW_ERROR;
   }
@@ -649,7 +652,7 @@ unknown_header:
   {
     GST_ELEMENT_WARNING (rtpvorbispay, STREAM, DECODE,
         (NULL), ("Ignoring unknown header received"));
-    gst_buffer_unmap (buffer, data, -1);
+    gst_buffer_unmap (buffer, &map);
     gst_buffer_unref (buffer);
     return GST_FLOW_OK;
   }
@@ -657,7 +660,7 @@ header_error:
   {
     GST_ELEMENT_WARNING (rtpvorbispay, STREAM, DECODE,
         (NULL), ("Error initializing header config"));
-    gst_buffer_unmap (buffer, data, -1);
+    gst_buffer_unmap (buffer, &map);
     gst_buffer_unref (buffer);
     return GST_FLOW_OK;
   }
index 4846d92..994601b 100644 (file)
@@ -2233,7 +2233,8 @@ rtp_session_process_feedback (RTPSession * sess, GstRTCPPacket * packet,
 
     if (fci_length > 0) {
       fci_buffer = gst_buffer_copy_region (packet->rtcp->buffer,
-          GST_BUFFER_COPY_MEMORY, fci_data - packet->rtcp->data, fci_length);
+          GST_BUFFER_COPY_MEMORY, fci_data - packet->rtcp->map.data,
+          fci_length);
       GST_BUFFER_TIMESTAMP (fci_buffer) = arrival->running_time;
     }
 
index 4f29a06..9a4df40 100644 (file)
@@ -2095,9 +2095,9 @@ gst_rtspsrc_sink_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
   GstRTSPSrc *src;
   GstRTSPStream *stream;
   GstFlowReturn res = GST_FLOW_OK;
+  GstMapInfo map;
   guint8 *data;
   guint size;
-  gsize bsize;
   GstRTSPResult ret;
   GstRTSPMessage message = { 0 };
   GstRTSPConnection *conn;
@@ -2105,8 +2105,9 @@ gst_rtspsrc_sink_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
   stream = (GstRTSPStream *) gst_pad_get_element_private (pad);
   src = stream->parent;
 
-  data = gst_buffer_map (buffer, &bsize, NULL, GST_MAP_READ);
-  size = bsize;
+  gst_buffer_map (buffer, &map, GST_MAP_READ);
+  size = map.size;
+  data = map.data;
 
   gst_rtsp_message_init_data (&message, stream->channel[1]);
 
@@ -2127,7 +2128,7 @@ gst_rtspsrc_sink_chain (GstPad * pad, GstObject * parent, GstBuffer * buffer)
   gst_rtsp_message_steal_body (&message, &data, &size);
   gst_rtsp_message_unset (&message);
 
-  gst_buffer_unmap (buffer, data, size);
+  gst_buffer_unmap (buffer, &map);
   gst_buffer_unref (buffer);
 
   return res;
index aa281e7..fa6b29d 100644 (file)
@@ -857,14 +857,17 @@ gst_spectrum_transform_ip (GstBaseTransform * trans, GstBuffer * buffer)
   guint nfft = 2 * bands - 2;
   guint input_pos;
   gfloat *input;
-  const guint8 *data, *mdata;
+  GstMapInfo map;
+  const guint8 *data;
   gsize size;
   guint fft_todo, msg_todo, block_size;
   gboolean have_full_interval;
   GstSpectrumChannel *cd;
   GstSpectrumInputData input_data;
 
-  data = mdata = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+  gst_buffer_map (buffer, &map, GST_MAP_READ);
+  data = map.data;
+  size = map.size;
 
   GST_LOG_OBJECT (spectrum, "input size: %" G_GSIZE_FORMAT " bytes", size);
 
@@ -993,7 +996,7 @@ gst_spectrum_transform_ip (GstBaseTransform * trans, GstBuffer * buffer)
 
   spectrum->input_pos = input_pos;
 
-  gst_buffer_unmap (buffer, (guint8 *) mdata, -1);
+  gst_buffer_unmap (buffer, &map);
 
   g_assert (size == 0);
 
index 255f2f5..9f4d688 100644 (file)
@@ -167,8 +167,7 @@ gst_dynudpsink_render (GstBaseSink * bsink, GstBuffer * buffer)
 {
   GstDynUDPSink *sink;
   gssize ret;
-  gsize size;
-  guint8 *data;
+  GstMapInfo map;
   GstNetAddressMeta *meta;
   GSocketAddress *addr;
   GError *err = NULL;
@@ -190,9 +189,9 @@ gst_dynudpsink_render (GstBaseSink * bsink, GstBuffer * buffer)
   if (sink->family != family && family != G_SOCKET_FAMILY_IPV4)
     goto invalid_family;
 
-  data = gst_buffer_map (buffer, &size, NULL, GST_MAP_READ);
+  gst_buffer_map (buffer, &map, GST_MAP_READ);
 
-  GST_DEBUG ("about to send %" G_GSIZE_FORMAT " bytes", size);
+  GST_DEBUG ("about to send %" G_GSIZE_FORMAT " bytes", map.size);
 
 #ifndef GST_DISABLE_GST_DEBUG
   {
@@ -201,16 +200,17 @@ gst_dynudpsink_render (GstBaseSink * bsink, GstBuffer * buffer)
     host =
         g_inet_address_to_string (g_inet_socket_address_get_address
         (G_INET_SOCKET_ADDRESS (addr)));
-    GST_DEBUG ("sending %" G_GSIZE_FORMAT " bytes to client %s port %d", size,
-        host, g_inet_socket_address_get_port (G_INET_SOCKET_ADDRESS (addr)));
+    GST_DEBUG ("sending %" G_GSIZE_FORMAT " bytes to client %s port %d",
+        map.size, host,
+        g_inet_socket_address_get_port (G_INET_SOCKET_ADDRESS (addr)));
     g_free (host);
   }
 #endif
 
   ret =
-      g_socket_send_to (sink->used_socket, addr, (gchar *) data, size,
+      g_socket_send_to (sink->used_socket, addr, (gchar *) map.data, map.size,
       sink->cancellable, &err);
-  gst_buffer_unmap (buffer, data, size);
+  gst_buffer_unmap (buffer, &map);
 
   if (ret < 0)
     goto send_error;
index 8eef113..f75e74d 100644 (file)
@@ -440,9 +440,9 @@ gst_multiudpsink_render (GstBaseSink * bsink, GstBuffer * buffer)
   GstMultiUDPSink *sink;
   GList *clients;
   GOutputVector *vec;
+  GstMapInfo *map;
   guint n_mem, i;
-  gpointer bdata;
-  gsize bsize, size;
+  gsize size;
   GstMemory *mem;
   gint num, no_clients;
   GError *err = NULL;
@@ -454,21 +454,22 @@ gst_multiudpsink_render (GstBaseSink * bsink, GstBuffer * buffer)
     goto no_data;
 
   vec = g_new (GOutputVector, n_mem);
+  map = g_new (GstMapInfo, n_mem);
 
   size = 0;
   for (i = 0; i < n_mem; i++) {
     mem = gst_buffer_peek_memory (buffer, i, GST_MAP_READ);
-    bdata = gst_memory_map (mem, &bsize, NULL, GST_MAP_READ);
+    gst_memory_map (mem, &map[i], GST_MAP_READ);
 
-    if (bsize > UDP_MAX_SIZE) {
+    if (map[i].size > UDP_MAX_SIZE) {
       GST_WARNING ("Attempting to send a UDP packet larger than maximum "
-          "size (%" G_GSIZE_FORMAT " > %d)", bsize, UDP_MAX_SIZE);
+          "size (%" G_GSIZE_FORMAT " > %d)", map[i].size, UDP_MAX_SIZE);
     }
 
-    vec[i].buffer = bdata;
-    vec[i].size = bsize;
+    vec[i].buffer = map[i].data;
+    vec[i].size = map[i].size;
 
-    size += bsize;
+    size += map[i].size;
   }
 
   sink->bytes_to_serve += size;
@@ -509,11 +510,11 @@ gst_multiudpsink_render (GstBaseSink * bsink, GstBuffer * buffer)
   g_mutex_unlock (&sink->client_lock);
 
   /* unmap all memory again */
-  for (i = 0; i < n_mem; i++) {
-    mem = gst_buffer_peek_memory (buffer, i, GST_MAP_READ);
-    gst_memory_unmap (mem);
-  }
+  for (i = 0; i < n_mem; i++)
+    gst_memory_unmap (map[i].memory, &map[i]);
+
   g_free (vec);
+  g_free (map);
 
   GST_LOG_OBJECT (sink, "sent %d bytes to %d (of %d) clients", size, num,
       no_clients);
index 1c199e0..0e87501 100644 (file)
@@ -308,18 +308,17 @@ static void
 gst_video_crop_transform_packed_complex (GstVideoCrop * vcrop,
     GstBuffer * inbuf, GstBuffer * outbuf)
 {
+  GstMapInfo in_map, out_map;
   guint8 *in_data, *out_data;
-  gpointer in_bufdata, out_bufdata;
-  gsize insize, outsize;
   guint i, dx;
   gint in_stride;
   gint out_stride;
 
-  in_bufdata = gst_buffer_map (inbuf, &insize, NULL, GST_MAP_READ);
-  out_bufdata = gst_buffer_map (outbuf, &outsize, NULL, GST_MAP_WRITE);
+  gst_buffer_map (inbuf, &in_map, GST_MAP_READ);
+  gst_buffer_map (outbuf, &out_map, GST_MAP_WRITE);
 
-  in_data = in_bufdata;
-  out_data = out_bufdata;
+  in_data = in_map.data;
+  out_data = out_map.data;
 
   in_stride = GST_VIDEO_INFO_PLANE_STRIDE (&vcrop->in.info, 0);
   out_stride = GST_VIDEO_INFO_PLANE_STRIDE (&vcrop->out.info, 0);
@@ -358,25 +357,24 @@ gst_video_crop_transform_packed_complex (GstVideoCrop * vcrop,
       out_data += out_stride;
     }
   }
-  gst_buffer_unmap (inbuf, in_bufdata, insize);
-  gst_buffer_unmap (outbuf, out_bufdata, outsize);
+  gst_buffer_unmap (inbuf, &in_map);
+  gst_buffer_unmap (outbuf, &out_map);
 }
 
 static void
 gst_video_crop_transform_packed_simple (GstVideoCrop * vcrop,
     GstBuffer * inbuf, GstBuffer * outbuf)
 {
+  GstMapInfo in_map, out_map;
   guint8 *in_data, *out_data;
-  gpointer in_bufdata, out_bufdata;
-  gsize insize, outsize;
   guint i, dx;
   gint in_stride, out_stride;
 
-  in_bufdata = gst_buffer_map (inbuf, &insize, NULL, GST_MAP_READ);
-  out_bufdata = gst_buffer_map (outbuf, &outsize, NULL, GST_MAP_WRITE);
+  gst_buffer_map (inbuf, &in_map, GST_MAP_READ);
+  gst_buffer_map (outbuf, &out_map, GST_MAP_WRITE);
 
-  in_data = in_bufdata;
-  out_data = out_bufdata;
+  in_data = in_map.data;
+  out_data = out_map.data;
 
   in_stride = GST_VIDEO_INFO_PLANE_STRIDE (&vcrop->in.info, 0);
   out_stride = GST_VIDEO_INFO_PLANE_STRIDE (&vcrop->out.info, 0);
@@ -393,26 +391,25 @@ gst_video_crop_transform_packed_simple (GstVideoCrop * vcrop,
     in_data += in_stride;
     out_data += out_stride;
   }
-  gst_buffer_unmap (inbuf, in_bufdata, insize);
-  gst_buffer_unmap (outbuf, out_bufdata, outsize);
+  gst_buffer_unmap (inbuf, &in_map);
+  gst_buffer_unmap (outbuf, &out_map);
 }
 
 static void
 gst_video_crop_transform_planar (GstVideoCrop * vcrop, GstBuffer * inbuf,
     GstBuffer * outbuf)
 {
+  GstMapInfo in_map, out_map;
   guint8 *y_out, *u_out, *v_out;
   guint8 *y_in, *u_in, *v_in;
   guint i, dx;
-  gpointer in_bufdata, out_bufdata;
-  gsize insize, outsize;
 
-  in_bufdata = gst_buffer_map (inbuf, &insize, NULL, GST_MAP_READ);
-  out_bufdata = gst_buffer_map (outbuf, &outsize, NULL, GST_MAP_WRITE);
+  gst_buffer_map (inbuf, &in_map, GST_MAP_READ);
+  gst_buffer_map (outbuf, &out_map, GST_MAP_WRITE);
 
   /* Y plane */
-  y_in = in_bufdata;
-  y_out = out_bufdata;
+  y_in = in_map.data;
+  y_out = out_map.data;
 
   y_in +=
       (vcrop->crop_top * GST_VIDEO_INFO_PLANE_STRIDE (&vcrop->in.info,
@@ -427,9 +424,9 @@ gst_video_crop_transform_planar (GstVideoCrop * vcrop, GstBuffer * inbuf,
 
   /* U + V planes */
   u_in =
-      (guint8 *) in_bufdata + GST_VIDEO_INFO_PLANE_OFFSET (&vcrop->in.info, 1);
+      (guint8 *) in_map.data + GST_VIDEO_INFO_PLANE_OFFSET (&vcrop->in.info, 1);
   u_out =
-      (guint8 *) out_bufdata + GST_VIDEO_INFO_PLANE_OFFSET (&vcrop->out.info,
+      (guint8 *) out_map.data + GST_VIDEO_INFO_PLANE_OFFSET (&vcrop->out.info,
       1);
 
   u_in +=
@@ -437,9 +434,9 @@ gst_video_crop_transform_planar (GstVideoCrop * vcrop, GstBuffer * inbuf,
   u_in += vcrop->crop_left / 2;
 
   v_in =
-      (guint8 *) in_bufdata + GST_VIDEO_INFO_PLANE_OFFSET (&vcrop->in.info, 2);
+      (guint8 *) in_map.data + GST_VIDEO_INFO_PLANE_OFFSET (&vcrop->in.info, 2);
   v_out =
-      (guint8 *) out_bufdata + GST_VIDEO_INFO_PLANE_OFFSET (&vcrop->out.info,
+      (guint8 *) out_map.data + GST_VIDEO_INFO_PLANE_OFFSET (&vcrop->out.info,
       2);
 
   v_in +=
@@ -458,8 +455,8 @@ gst_video_crop_transform_planar (GstVideoCrop * vcrop, GstBuffer * inbuf,
     v_out += GST_VIDEO_INFO_PLANE_STRIDE (&vcrop->out.info, 2);
   }
 
-  gst_buffer_unmap (inbuf, in_bufdata, insize);
-  gst_buffer_unmap (outbuf, out_bufdata, outsize);
+  gst_buffer_unmap (inbuf, &in_map);
+  gst_buffer_unmap (outbuf, &out_map);
 }
 
 static GstFlowReturn
index c7cae6f..56c7eb9 100644 (file)
@@ -169,10 +169,12 @@ gst_wavenc_create_header_buf (GstWavEnc * wavenc, guint audio_data_size)
 {
   struct wave_header wave;
   GstBuffer *buf;
+  GstMapInfo map;
   guint8 *header;
 
   buf = gst_buffer_new_and_alloc (WAV_HEADER_LEN);
-  header = gst_buffer_map (buf, NULL, NULL, GST_MAP_WRITE);
+  gst_buffer_map (buf, &map, GST_MAP_WRITE);
+  header = map.data;
   memset (header, 0, WAV_HEADER_LEN);
 
   wave.common.wChannels = wavenc->channels;
@@ -209,7 +211,7 @@ gst_wavenc_create_header_buf (GstWavEnc * wavenc, guint audio_data_size)
   memcpy (header + 36, (char *) wave.data.id, 4);
   GST_WRITE_UINT32_LE (header + 40, wave.data.len);
 
-  gst_buffer_unmap (buf, header, -1);
+  gst_buffer_unmap (buf, &map);
 
   return buf;
 }
index 9045ecd..3930dab 100644 (file)
@@ -1283,16 +1283,16 @@ gst_wavparse_stream_headers (GstWavParse * wav)
       if (!gst_wavparse_peek_chunk_info (wav, &tag, &size))
         goto exit;
     } else {
-      guint8 *data;
+      GstMapInfo map;
 
       if ((res =
               gst_pad_pull_range (wav->sinkpad, wav->offset, 8,
                   &buf)) != GST_FLOW_OK)
         goto header_read_error;
-      data = gst_buffer_map (buf, NULL, NULL, -1);
-      tag = GST_READ_UINT32_LE (data);
-      size = GST_READ_UINT32_LE (data + 4);
-      gst_buffer_unmap (buf, data, -1);
+      gst_buffer_map (buf, &map, GST_MAP_READ);
+      tag = GST_READ_UINT32_LE (map.data);
+      size = GST_READ_UINT32_LE (map.data + 4);
+      gst_buffer_unmap (buf, &map);
     }
 
     GST_INFO_OBJECT (wav,
@@ -1409,15 +1409,16 @@ gst_wavparse_stream_headers (GstWavParse * wav)
           tempo = acid->tempo;
           gst_adapter_unmap (wav->adapter);
         } else {
+          GstMapInfo map;
           gst_buffer_unref (buf);
           if ((res =
                   gst_pad_pull_range (wav->sinkpad, wav->offset + 8,
                       size, &buf)) != GST_FLOW_OK)
             goto header_read_error;
-          acid = (const gst_riff_acid *) gst_buffer_map (buf, NULL, NULL,
-              GST_MAP_READ);
+          gst_buffer_map (buf, &map, GST_MAP_READ);
+          acid = (const gst_riff_acid *) map.data;
           tempo = acid->tempo;
-          gst_buffer_unmap (buf, (guint8 *) acid, -1);
+          gst_buffer_unmap (buf, &map);
         }
         /* send data as tags */
         if (!wav->tags)
index d25d7ae..f052aad 100644 (file)
@@ -892,20 +892,20 @@ gst_v4l2_do_read (GstV4l2BufferPool * pool, GstBuffer * buf)
   GstFlowReturn res;
   GstV4l2Object *obj = pool->obj;
   gint amount;
-  gpointer data;
+  GstMapInfo map;
   gint toread;
 
   toread = obj->sizeimage;
 
   GST_LOG_OBJECT (pool, "reading %d bytes into buffer %p", toread, buf);
 
-  data = gst_buffer_map (buf, NULL, NULL, GST_MAP_WRITE);
+  gst_buffer_map (buf, &map, GST_MAP_WRITE);
 
   do {
     if ((res = gst_v4l2_object_poll (obj)) != GST_FLOW_OK)
       goto poll_error;
 
-    amount = v4l2_read (obj->video_fd, data, toread);
+    amount = v4l2_read (obj->video_fd, map.data, toread);
 
     if (amount == toread) {
       break;
@@ -921,7 +921,8 @@ gst_v4l2_do_read (GstV4l2BufferPool * pool, GstBuffer * buf)
   } while (TRUE);
 
   GST_LOG_OBJECT (pool, "read %d bytes", amount);
-  gst_buffer_unmap (buf, data, amount);
+  gst_buffer_unmap (buf, &map);
+  gst_buffer_resize (buf, 0, amount);
 
   return GST_FLOW_OK;
 
@@ -941,7 +942,8 @@ read_error:
   }
 cleanup:
   {
-    gst_buffer_unmap (buf, data, 0);
+    gst_buffer_unmap (buf, &map);
+    gst_buffer_resize (buf, 0, 0);
     return res;
   }
 }
index 1f52bb6..82600ad 100644 (file)
@@ -2579,9 +2579,6 @@ gboolean
 gst_v4l2_object_copy (GstV4l2Object * v4l2object, GstBuffer * dest,
     GstBuffer * src)
 {
-  guint8 *data;
-  gsize size;
-
   if (v4l2object->info.finfo) {
     GstVideoFrame src_frame, dest_frame;
 
@@ -2602,10 +2599,12 @@ gst_v4l2_object_copy (GstV4l2Object * v4l2object, GstBuffer * dest,
     gst_video_frame_unmap (&src_frame);
     gst_video_frame_unmap (&dest_frame);
   } else {
+    GstMapInfo map;
+
     GST_DEBUG_OBJECT (v4l2object->element, "copy raw bytes");
-    data = gst_buffer_map (src, &size, NULL, GST_MAP_READ);
-    gst_buffer_fill (dest, 0, data, size);
-    gst_buffer_unmap (src, data, size);
+    gst_buffer_map (src, &map, GST_MAP_READ);
+    gst_buffer_fill (dest, 0, map.data, map.size);
+    gst_buffer_unmap (src, &map);
   }
   GST_CAT_LOG_OBJECT (GST_CAT_PERFORMANCE, v4l2object->element,
       "slow copy into buffer %p", dest);
index 6ed75ce..774314f 100644 (file)
@@ -437,12 +437,11 @@ composite_pixel (GstXContext * xcontext, guchar * dest, guchar * src)
 static void
 copy_buffer (GstBuffer * dest, GstBuffer * src)
 {
-  guint8 *data;
-  gsize size;
+  GstMapInfo map;
 
-  data = gst_buffer_map (src, &size, NULL, GST_MAP_READ);
-  gst_buffer_fill (dest, 0, data, size);
-  gst_buffer_unmap (src, data, size);
+  gst_buffer_map (src, &map, GST_MAP_READ);
+  gst_buffer_fill (dest, 0, map.data, map.size);
+  gst_buffer_unmap (src, &map);
 }
 #endif
 
index 7b47c03..c369278 100644 (file)
@@ -69,15 +69,14 @@ buffer_new (const unsigned char *buffer_data, guint size)
     gst_buffer_fill (buffer, 0, buffer_data, size);
   } else {
     guint i;
-    guint8 *data;
-    gsize wantsize = size;
+    GstMapInfo map;
 
-    data = gst_buffer_map (buffer, &wantsize, NULL, GST_MAP_WRITE);
+    gst_buffer_map (buffer, &map, GST_MAP_WRITE);
     /* Create a recognizable pattern (loop 0x00 -> 0xff) in the data block */
-    for (i = 0; i < wantsize; i++) {
-      data[i] = i % 0x100;
+    for (i = 0; i < map.size; i++) {
+      map.data[i] = i % 0x100;
     }
-    gst_buffer_unmap (buffer, data, wantsize);
+    gst_buffer_unmap (buffer, &map);
   }
 
   /* gst_buffer_set_caps (buffer, GST_PAD_CAPS (srcpad)); */