1 /* Copyright (C) <2010> Douglas Bagnall <douglas@halo.gen.nz>
3 * This library is free software; you can redistribute it and/or
4 * modify it under the terms of the GNU Library General Public
5 * License as published by the Free Software Foundation; either
6 * version 2 of the License, or (at your option) any later version.
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 * Library General Public License for more details.
13 * You should have received a copy of the GNU Library General Public
14 * License along with this library; if not, write to the
15 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
16 * Boston, MA 02111-1307, USA.
20 #include "gstsparrow.h"
28 static const char *JPEG_BLOB_NAME
= "/home/douglas/sparrow/content/jpeg.blob";
29 static const char *JPEG_INDEX_NAME
= "/home/douglas/sparrow/content/jpeg.index";
31 INVISIBLE sparrow_shared_t
*
33 static sparrow_shared_t shared
;
38 load_images(gpointer p
){
39 GST_DEBUG("load_images with pointer %p", p
);
40 GstSparrow
*sparrow
= (GstSparrow
*)p
;
41 int fd
= open(JPEG_BLOB_NAME
, O_RDONLY
);
42 off_t length
= lseek(fd
, 0, SEEK_END
);
43 lseek(fd
, 0, SEEK_SET
);
44 GST_DEBUG("about to mmap");
45 void *mem
= mmap(NULL
, length
, PROT_READ
, MAP_PRIVATE
| MAP_POPULATE
, fd
, 0);
46 GST_DEBUG("mmap returned %p", mem
);
47 madvise(mem
, length
, POSIX_MADV_WILLNEED
);
48 GST_DEBUG("done madvise. sparrow->shared is %p", sparrow
->shared
);
49 sparrow
->shared
->jpeg_blob
= mem
;
50 sparrow
->shared
->blob_size
= length
;
56 unload_images(gpointer p
){
57 GstSparrow
*sparrow
= (GstSparrow
*)p
;
58 sparrow_shared_t
*shared
= sparrow
->shared
;
59 munmap(shared
->jpeg_blob
, shared
->blob_size
);
64 load_index(gpointer p
){
65 GstSparrow
*sparrow
= (GstSparrow
*)p
;
66 int fd
= open(JPEG_INDEX_NAME
, O_RDONLY
);
67 off_t length
= lseek(fd
, 0, SEEK_END
);
68 lseek(fd
, 0, SEEK_SET
);
69 void *mem
= mmap(NULL
, length
, PROT_READ
, MAP_PRIVATE
| MAP_POPULATE
, fd
, 0);
70 GST_DEBUG("mmap returned %p", mem
);
71 madvise(mem
, length
, POSIX_MADV_WILLNEED
);
72 sparrow
->shared
->index
= mem
;
73 sparrow
->shared
->image_count
= length
/ sizeof(sparrow_frame_t
);
74 GST_DEBUG("found %d frame info structures of size %d\n", sparrow
->shared
->image_count
,
75 sizeof(sparrow_frame_t
));
80 unload_index(gpointer p
){
81 GstSparrow
*sparrow
= (GstSparrow
*)p
;
82 munmap(sparrow
->shared
->index
,
83 sparrow
->shared
->image_count
* sizeof(sparrow_frame_t
));
89 maybe_load_images(GstSparrow
*sparrow
)
91 GST_DEBUG("maybe load images");
92 static GOnce image_once
= G_ONCE_INIT
;
93 g_once(&image_once
, load_images
, sparrow
);
97 maybe_unload_images(GstSparrow
*sparrow
){
98 GST_DEBUG("maybe unload images");
99 static GOnce once
= G_ONCE_INIT
;
100 g_once(&once
, unload_images
, sparrow
);
104 maybe_load_index(GstSparrow
*sparrow
)
106 GST_DEBUG("maybe load index");
107 static GOnce index_once
= G_ONCE_INIT
;
108 g_once(&index_once
, load_index
, sparrow
);
112 maybe_unload_index(GstSparrow
*sparrow
){
113 static GOnce once
= G_ONCE_INIT
;
114 g_once(&once
, unload_index
, sparrow
);