diff options
-rw-r--r-- | gnuradio-core/src/lib/io/gr_file_meta_sink.cc | 32 | ||||
-rw-r--r-- | gnuradio-core/src/python/gnuradio/parse_file_metadata.py | 12 | ||||
-rw-r--r-- | gr-utils/src/python/gr_read_file_metadata | 5 |
3 files changed, 14 insertions, 35 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 ebfeb4e4a5..ff35a01fcc 100644 --- a/gnuradio-core/src/lib/io/gr_file_meta_sink.cc +++ b/gnuradio-core/src/lib/io/gr_file_meta_sink.cc @@ -151,15 +151,13 @@ gr_file_meta_sink::update_last_header() { // Update the last header info with the number of samples this // block represents. + size_t hdrlen = METADATA_HEADER_SIZE+d_extra_size; size_t seg_size = d_itemsize*d_total_seg_size; - uint64_t loc = get_last_header_loc(); pmt_t s = pmt_from_uint64(seg_size); - //std::cerr << "Found Tag at: " << itr->offset*d_itemsize << std::endl; - //std::cerr << " last header starts at: " << loc << std::endl; - //std::cerr << " segment size is: " << seg_size << std::endl; if(update_header(mp("size"), s)) { - fseek(d_fp, loc, SEEK_SET); + fseek(d_fp, -seg_size-hdrlen, SEEK_CUR); write_header(d_header, d_extra); + fseek(d_fp, seg_size, SEEK_CUR); } } @@ -168,38 +166,19 @@ gr_file_meta_sink::write_and_update() { // New header, so set current size of chunk to 0 and start of chunk // based on current index + header size. - uint64_t loc = get_last_header_loc(); + //uint64_t loc = get_last_header_loc(); pmt_t s = pmt_from_uint64(0); - size_t seg_size = d_itemsize*d_total_seg_size; if(update_header(mp("size"), s)) { // If we have multiple tags on the same offset, this makes // sure we just overwrite the same header each time instead // of creating a new header per tag. - uint64_t seg_start = loc; - if(seg_size != 0) - seg_start += METADATA_HEADER_SIZE + d_extra_size + seg_size + 1; - s = pmt_from_uint64(seg_start + METADATA_HEADER_SIZE + d_extra_size); + s = pmt_from_uint64(METADATA_HEADER_SIZE + d_extra_size); if(update_header(mp("strt"), s)) { - //std::cerr << "Adding new header" << std::endl; - //std::cerr << " new header start at: " << seg_start-METADATA_HEADER_SIZE << std::endl; - //std::cerr << " new seg start at: " << seg_start << std::endl; - fseek(d_fp, seg_start, SEEK_SET); write_header(d_header, d_extra); - d_total_seg_size = 0; } } } -uint64_t -gr_file_meta_sink::get_last_header_loc() -{ - uint64_t loc = 0; - pmt_t v = pmt_dict_ref(d_header, mp("strt"), PMT_NIL); - if(!pmt_eq(v, PMT_NIL)) - loc = pmt_to_uint64(v) - (METADATA_HEADER_SIZE+d_extra_size); - return loc; -} - gr_file_meta_sink::~gr_file_meta_sink() { update_last_header(); @@ -254,6 +233,7 @@ gr_file_meta_sink::work(int noutput_items, if(d_total_seg_size == d_max_seg_size) { update_last_header(); write_and_update(); + d_total_seg_size = 0; } } diff --git a/gnuradio-core/src/python/gnuradio/parse_file_metadata.py b/gnuradio-core/src/python/gnuradio/parse_file_metadata.py index 31ba5f7f02..053f096c1e 100644 --- a/gnuradio-core/src/python/gnuradio/parse_file_metadata.py +++ b/gnuradio-core/src/python/gnuradio/parse_file_metadata.py @@ -50,7 +50,7 @@ ftype_to_size = {gr.GR_FILE_BYTE: gr.sizeof_char, gr.GR_FILE_FLOAT: gr.sizeof_float, gr.GR_FILE_DOUBLE: gr.sizeof_double} -def parse_header(p, hdr_start, VERBOSE=False): +def parse_header(p, VERBOSE=False): dump = gr.PMT_NIL info = dict() @@ -122,13 +122,13 @@ def parse_header(p, hdr_start, VERBOSE=False): if(gr.pmt_dict_has_key(p, gr.pmt_string_to_symbol("strt"))): r = gr.pmt_dict_ref(p, gr.pmt_string_to_symbol("strt"), dump) seg_start = gr.pmt_to_uint64(r) - info["strt"] = seg_start - info["extra_len"] = seg_start - hdr_start - HEADER_LENGTH + info["hdr_len"] = seg_start + info["extra_len"] = seg_start - HEADER_LENGTH info["has_extra"] = info["extra_len"] > 0 if(VERBOSE): - print "Segment Start: {0} bytes".format(seg_start) - print "Extra Length: {0}".format((info["extra_len"])) - print "Extra Header? {0}".format(info["has_extra"]) + print "Header Length: {0} bytes".format(info["hdr_len"]) + print "Extra Length: {0}".format((info["extra_len"])) + print "Extra Header? {0}".format(info["has_extra"]) else: sys.stderr.write("Could not find key 'strt': invalid or corrupt data file.\n") sys.exit(1) diff --git a/gr-utils/src/python/gr_read_file_metadata b/gr-utils/src/python/gr_read_file_metadata index 850c29ee7b..ba530ca540 100644 --- a/gr-utils/src/python/gr_read_file_metadata +++ b/gr-utils/src/python/gr_read_file_metadata @@ -44,10 +44,9 @@ def main(filename): except RuntimeError: sys.stderr.write("Could not deserialize header: invalid or corrupt data file.\n") sys.exit(1) - #gr.pmt_print(header) print "HEADER {0}".format(nheaders) - info = parse_file_metadata.parse_header(header, hdr_start, True) + info = parse_file_metadata.parse_header(header, True) if(info["extra_len"] > 0): extra_str = handle.read(info["extra_len"]) @@ -64,7 +63,7 @@ def main(filename): extra_info = parse_file_metadata.parse_extra_dict(extra, info, True) nheaders += 1 - nread += info['nbytes'] + parse_file_metadata.HEADER_LENGTH + info["extra_len"] + 1 + nread += info['nbytes'] + parse_file_metadata.HEADER_LENGTH + info["extra_len"] handle.seek(nread, 0) print "\n\n" |