1 /* 2 * gstxcambuffermeta.cpp - gst xcam buffer meta data 3 * 4 * Copyright (c) 2014-2015 Intel Corporation 5 * 6 * Licensed under the Apache License, Version 2.0 (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 * 18 * Author: Wind Yuan <feng.yuan (at) intel.com> 19 */ 20 21 #include "gstxcambuffermeta.h" 22 23 using namespace XCam; 24 25 GType 26 gst_xcam_buffer_meta_api_get_type (void) 27 { 28 static GType xcam_buf_type = 0; 29 static const gchar *xcam_buf_tags [] = 30 { GST_XCAM_META_TAG_XCAM, GST_XCAM_META_TAG_BUF, NULL }; 31 32 if (g_once_init_enter (&xcam_buf_type)) { 33 GType _type = gst_meta_api_type_register ("GstXCamBuffer", xcam_buf_tags); 34 g_once_init_leave (&xcam_buf_type, _type); 35 } 36 37 return xcam_buf_type; 38 } 39 40 static gboolean 41 gst_xcam_buffer_meta_init (GstMeta *base, gpointer params, GstBuffer *buffer) 42 { 43 XCAM_UNUSED (params); 44 XCAM_UNUSED (buffer); 45 GstXCamBufferMeta *meta = (GstXCamBufferMeta *)base; 46 47 XCAM_CONSTRUCTOR (meta->buffer, SmartPtr<VideoBuffer>); 48 return TRUE; 49 } 50 51 52 static void 53 gst_xcam_buffer_meta_free (GstMeta *base, GstBuffer *buffer) 54 { 55 XCAM_UNUSED (buffer); 56 GstXCamBufferMeta *meta = (GstXCamBufferMeta *)base; 57 58 meta->buffer->unmap (); 59 XCAM_DESTRUCTOR (meta->buffer, SmartPtr<VideoBuffer>); 60 } 61 62 static const GstMetaInfo * 63 gst_xcam_buffer_meta_get_info (void) 64 { 65 static const GstMetaInfo *meta_info = NULL; 66 67 if (g_once_init_enter (&meta_info)) { 68 const GstMetaInfo *_meta = 69 gst_meta_register (GST_XCAM_BUFFER_META_API_TYPE, 70 "GstXCamBufferMeta", 71 sizeof (GstXCamBufferMeta), 72 gst_xcam_buffer_meta_init, 73 gst_xcam_buffer_meta_free, 74 NULL); 75 g_once_init_leave (&meta_info, _meta); 76 } 77 return meta_info; 78 } 79 80 GstXCamBufferMeta * 81 gst_buffer_add_xcam_buffer_meta ( 82 GstBuffer *buffer, 83 const SmartPtr<VideoBuffer> &data) 84 { 85 XCAM_ASSERT (data.ptr ()); 86 87 GstXCamBufferMeta *meta = (GstXCamBufferMeta*) gst_buffer_add_meta ( 88 buffer, gst_xcam_buffer_meta_get_info(), NULL); 89 90 g_return_val_if_fail (meta, NULL); 91 92 meta->buffer = data; 93 94 return meta; 95 } 96 97 98