-
Notifications
You must be signed in to change notification settings - Fork 240
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
#1351 Restores semi-accurate timestamps of sample buffers to ensure P…
…25 & DMR decoded messages have accurate timestamps and MBE recording voice frames have accurate timestamps. (#1357) Co-authored-by: Dennis Sheirer <dsheirer@github.com>
- Loading branch information
Showing
79 changed files
with
607 additions
and
733 deletions.
There are no files selected for viewing
70 changes: 70 additions & 0 deletions
70
src/main/java/io/github/dsheirer/buffer/AbstractNativeBuffer.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
/* | ||
* ***************************************************************************** | ||
* Copyright (C) 2014-2022 Dennis Sheirer | ||
* | ||
* This program is free software: you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation, either version 3 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see <http://www.gnu.org/licenses/> | ||
* **************************************************************************** | ||
*/ | ||
|
||
package io.github.dsheirer.buffer; | ||
|
||
/** | ||
* Base native buffer class. | ||
*/ | ||
public abstract class AbstractNativeBuffer implements INativeBuffer | ||
{ | ||
private long mTimestamp; | ||
private float mSamplesPerMillisecond; | ||
|
||
/** | ||
* Constructs an instance | ||
* @param timestamp for the start of this buffer | ||
* @param samplesPerMillisecond to calculate the time offset of sub-buffers extracted from this native buffer. | ||
*/ | ||
public AbstractNativeBuffer(long timestamp, float samplesPerMillisecond) | ||
{ | ||
mTimestamp = timestamp; | ||
mSamplesPerMillisecond = samplesPerMillisecond; | ||
} | ||
|
||
/** | ||
* Timestamp for the start of this buffer | ||
* @return timestamp in milliseconds | ||
*/ | ||
@Override | ||
public long getTimestamp() | ||
{ | ||
return mTimestamp; | ||
} | ||
|
||
/** | ||
* Quantity of samples representing one millisecond of sample data, used for calculating fragment timestamp offsets. | ||
* @return samples per millisecond count. | ||
*/ | ||
public float getSamplesPerMillisecond() | ||
{ | ||
return mSamplesPerMillisecond; | ||
} | ||
|
||
/** | ||
* Calculates the timestamp for a samples buffer fragment based on where it is extracted from relative to the | ||
* native buffer starting timestamp. | ||
* @param samplesPointer for the start of the fragment. Note: this value will be divided by 2 to account for I/Q sample pairs. | ||
* @return timestamp adjusted to the fragment or sub-buffer start sample. | ||
*/ | ||
protected long getFragmentTimestamp(int samplesPointer) | ||
{ | ||
return getTimestamp() + (long)(samplesPointer / 2 / getSamplesPerMillisecond()); | ||
} | ||
} |
44 changes: 44 additions & 0 deletions
44
src/main/java/io/github/dsheirer/buffer/AbstractNativeBufferFactory.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,44 @@ | ||
/* | ||
* ***************************************************************************** | ||
* Copyright (C) 2014-2022 Dennis Sheirer | ||
* | ||
* This program is free software: you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License as published by | ||
* the Free Software Foundation, either version 3 of the License, or | ||
* (at your option) any later version. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
* You should have received a copy of the GNU General Public License | ||
* along with this program. If not, see <http://www.gnu.org/licenses/> | ||
* **************************************************************************** | ||
*/ | ||
|
||
package io.github.dsheirer.buffer; | ||
|
||
/** | ||
* Base class for native buffer factories. | ||
*/ | ||
public abstract class AbstractNativeBufferFactory implements INativeBufferFactory | ||
{ | ||
private float mSamplesPerMillisecond = 0.0f; | ||
|
||
@Override | ||
public void setSamplesPerMillisecond(float samplesPerMillisecond) | ||
{ | ||
mSamplesPerMillisecond = samplesPerMillisecond; | ||
} | ||
|
||
/** | ||
* Quantity of I/Q sample pairs per milli-second at the current sample rate to use in calculating an accurate | ||
* timestamp for sub-buffer that are generated from the native buffer. | ||
* @return samples per millisecond. | ||
*/ | ||
public float getSamplesPerMillisecond() | ||
{ | ||
return mSamplesPerMillisecond; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.