diff options
author | Tom Rondeau | 2012-12-14 13:57:29 -0500 |
---|---|---|
committer | Tom Rondeau | 2012-12-14 13:57:29 -0500 |
commit | 3910c6da3c62232e6593e5fcfe53f5ece933a294 (patch) | |
tree | d3cc80bae32ced851c83f8393d5fea3b57020464 /gnuradio-core/src/lib/io | |
parent | 75b01cc4f55c38dfe5bb329c23df591e43cf4c66 (diff) | |
download | gnuradio-3910c6da3c62232e6593e5fcfe53f5ece933a294.tar.gz gnuradio-3910c6da3c62232e6593e5fcfe53f5ece933a294.tar.bz2 gnuradio-3910c6da3c62232e6593e5fcfe53f5ece933a294.zip |
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/io')
-rw-r--r-- | gnuradio-core/src/lib/io/gr_file_meta_sink.cc | 9 | ||||
-rw-r--r-- | gnuradio-core/src/lib/io/gr_file_meta_sink.h | 2 | ||||
-rw-r--r-- | gnuradio-core/src/lib/io/gr_file_meta_sink.i | 2 | ||||
-rw-r--r-- | gnuradio-core/src/lib/io/gr_file_meta_source.cc | 33 |
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 b016dd1d3..ab0acbdb4 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 c0219ac25..9b67cc4c8 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 743e89730..6fa34913b 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 669c5d477..d940e5edc 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; |