summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gnuradio-core/src/lib/io/gr_file_meta_sink.cc32
-rw-r--r--gnuradio-core/src/python/gnuradio/parse_file_metadata.py12
-rw-r--r--gr-utils/src/python/gr_read_file_metadata5
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"