summaryrefslogtreecommitdiff
path: root/gnuradio-core/src/lib/io
diff options
context:
space:
mode:
Diffstat (limited to 'gnuradio-core/src/lib/io')
-rw-r--r--gnuradio-core/src/lib/io/gr_file_meta_sink.cc32
1 files changed, 6 insertions, 26 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 ebfeb4e4a..ff35a01fc 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;
}
}