summaryrefslogtreecommitdiff
path: root/gnuradio-core/src/lib
diff options
context:
space:
mode:
authorTom Rondeau <trondeau@vt.edu>2012-12-14 13:57:29 -0500
committerTom Rondeau <trondeau@vt.edu>2012-12-14 13:57:29 -0500
commit3910c6da3c62232e6593e5fcfe53f5ece933a294 (patch)
treed3cc80bae32ced851c83f8393d5fea3b57020464 /gnuradio-core/src/lib
parent75b01cc4f55c38dfe5bb329c23df591e43cf4c66 (diff)
core: adding itemsize key to metadata header to allow for vectorized items.
This also simplifies some code in the source since we're told exactly what the items size is and don't have to infer. Also adds an example using vector items.
Diffstat (limited to 'gnuradio-core/src/lib')
-rw-r--r--gnuradio-core/src/lib/io/gr_file_meta_sink.cc9
-rw-r--r--gnuradio-core/src/lib/io/gr_file_meta_sink.h2
-rw-r--r--gnuradio-core/src/lib/io/gr_file_meta_sink.i2
-rw-r--r--gnuradio-core/src/lib/io/gr_file_meta_source.cc33
4 files changed, 13 insertions, 33 deletions
diff --git a/gnuradio-core/src/lib/io/gr_file_meta_sink.cc b/gnuradio-core/src/lib/io/gr_file_meta_sink.cc
index b016dd1d39..ab0acbdb44 100644
--- a/gnuradio-core/src/lib/io/gr_file_meta_sink.cc
+++ b/gnuradio-core/src/lib/io/gr_file_meta_sink.cc
@@ -116,10 +116,11 @@ gr_file_meta_sink::gr_file_meta_sink(size_t itemsize, const std::string &filenam
d_header = pmt_dict_add(d_header, mp("version"), mp(METADATA_VERSION));
d_header = pmt_dict_add(d_header, mp("rx_rate"), mp(samp_rate));
d_header = pmt_dict_add(d_header, mp("rx_time"), timestamp);
+ d_header = pmt_dict_add(d_header, mp("size"), pmt_from_long(d_itemsize));
d_header = pmt_dict_add(d_header, mp("type"), pmt_from_long(type));
d_header = pmt_dict_add(d_header, mp("cplx"), complex ? PMT_T : PMT_F);
d_header = pmt_dict_add(d_header, mp("strt"), pmt_from_uint64(METADATA_HEADER_SIZE+d_extra_size));
- d_header = pmt_dict_add(d_header, mp("size"), pmt_from_uint64(0));
+ d_header = pmt_dict_add(d_header, mp("bytes"), pmt_from_uint64(0));
do_update();
@@ -305,7 +306,7 @@ gr_file_meta_sink::update_last_header_inline()
size_t hdrlen = pmt_to_uint64(pmt_dict_ref(d_header, mp("strt"), PMT_NIL));
size_t seg_size = d_itemsize*d_total_seg_size;
pmt_t s = pmt_from_uint64(seg_size);
- update_header(mp("size"), s);
+ update_header(mp("bytes"), s);
update_header(mp("strt"), pmt_from_uint64(METADATA_HEADER_SIZE+d_extra_size));
fseek(d_fp, -seg_size-hdrlen, SEEK_CUR);
write_header(d_fp, d_header, d_extra);
@@ -320,7 +321,7 @@ gr_file_meta_sink::update_last_header_detached()
size_t hdrlen = pmt_to_uint64(pmt_dict_ref(d_header, mp("strt"), PMT_NIL));
size_t seg_size = d_itemsize*d_total_seg_size;
pmt_t s = pmt_from_uint64(seg_size);
- update_header(mp("size"), s);
+ update_header(mp("bytes"), s);
update_header(mp("strt"), pmt_from_uint64(METADATA_HEADER_SIZE+d_extra_size));
fseek(d_hdr_fp, -hdrlen, SEEK_CUR);
write_header(d_hdr_fp, d_header, d_extra);
@@ -333,7 +334,7 @@ gr_file_meta_sink::write_and_update()
// based on current index + header size.
//uint64_t loc = get_last_header_loc();
pmt_t s = pmt_from_uint64(0);
- update_header(mp("size"), s);
+ update_header(mp("bytes"), s);
// If we have multiple tags on the same offset, this makes
// sure we just overwrite the same header each time instead
diff --git a/gnuradio-core/src/lib/io/gr_file_meta_sink.h b/gnuradio-core/src/lib/io/gr_file_meta_sink.h
index c0219ac251..9b67cc4c8a 100644
--- a/gnuradio-core/src/lib/io/gr_file_meta_sink.h
+++ b/gnuradio-core/src/lib/io/gr_file_meta_sink.h
@@ -31,7 +31,7 @@
using namespace pmt;
const char METADATA_VERSION = 0;
-const size_t METADATA_HEADER_SIZE = 134;
+const size_t METADATA_HEADER_SIZE = 149;
enum gr_file_types {
GR_FILE_BYTE=0,
diff --git a/gnuradio-core/src/lib/io/gr_file_meta_sink.i b/gnuradio-core/src/lib/io/gr_file_meta_sink.i
index 743e897304..6fa34913be 100644
--- a/gnuradio-core/src/lib/io/gr_file_meta_sink.i
+++ b/gnuradio-core/src/lib/io/gr_file_meta_sink.i
@@ -23,7 +23,7 @@
GR_SWIG_BLOCK_MAGIC(gr,file_meta_sink)
const char METADATA_VERSION = 0;
-const size_t METADATA_HEADER_SIZE = 134;
+const size_t METADATA_HEADER_SIZE = 149;
enum gr_file_types {
GR_FILE_BYTE=0,
diff --git a/gnuradio-core/src/lib/io/gr_file_meta_source.cc b/gnuradio-core/src/lib/io/gr_file_meta_source.cc
index 669c5d4779..d940e5edcd 100644
--- a/gnuradio-core/src/lib/io/gr_file_meta_source.cc
+++ b/gnuradio-core/src/lib/io/gr_file_meta_source.cc
@@ -228,38 +228,17 @@ gr_file_meta_source::parse_header(pmt_t hdr, uint64_t offset,
throw std::runtime_error("file_meta_source: Could not extract time stamp.\n");
}
- // GET DATA TYPE
- if(pmt_dict_has_key(hdr, pmt_string_to_symbol("type"))) {
- int t = pmt_to_long(pmt_dict_ref(hdr, pmt_string_to_symbol("type"), PMT_NIL));
- switch(t) {
- case(GR_FILE_CHAR): d_itemsize = sizeof(char); break;
- case(GR_FILE_SHORT): d_itemsize = sizeof(short); break;
- case(GR_FILE_INT): d_itemsize = sizeof(int); break;
- case(GR_FILE_LONG): d_itemsize = sizeof(long int); break;
- case(GR_FILE_LONG_LONG): d_itemsize = sizeof(long long int); break;
- case(GR_FILE_FLOAT): d_itemsize = sizeof(float); break;
- case(GR_FILE_DOUBLE): d_itemsize = sizeof(double); break;
- default:
- throw std::runtime_error("file_meta_source: Could not determine data type size.\n");
- }
- }
- else {
- throw std::runtime_error("file_meta_source: Could not extract data type.\n");
- }
-
- // GET COMPLEX INDICATOR
- if(pmt_dict_has_key(hdr, pmt_string_to_symbol("cplx"))) {
- bool cplx = pmt_to_bool(pmt_dict_ref(hdr, pmt_string_to_symbol("cplx"), PMT_NIL));
- if(cplx)
- d_itemsize *= 2;
+ // GET ITEM SIZE OF DATA
+ if(pmt_dict_has_key(hdr, pmt_string_to_symbol("size"))) {
+ d_itemsize = pmt_to_long(pmt_dict_ref(hdr, pmt_string_to_symbol("size"), PMT_NIL));
}
else {
- throw std::runtime_error("file_meta_source: Could not extract complex indicator.\n");
+ throw std::runtime_error("file_meta_source: Could not extract item size.\n");
}
// GET SEGMENT SIZE
- if(pmt_dict_has_key(hdr, pmt_string_to_symbol("size"))) {
- d_seg_size = pmt_to_uint64(pmt_dict_ref(hdr, pmt_string_to_symbol("size"), PMT_NIL));
+ if(pmt_dict_has_key(hdr, pmt_string_to_symbol("bytes"))) {
+ d_seg_size = pmt_to_uint64(pmt_dict_ref(hdr, pmt_string_to_symbol("bytes"), PMT_NIL));
// Convert from bytes to items
d_seg_size /= d_itemsize;