|
- package gpudemod
-
- type batchSlot struct {
- job ExtractJob
- out []complex64
- rate int
- active bool
- }
-
- type BatchRunner struct {
- eng *Engine
- slots []batchSlot
- }
-
- func NewBatchRunner(maxSamples int, sampleRate int) (*BatchRunner, error) {
- eng, err := New(maxSamples, sampleRate)
- if err != nil {
- return nil, err
- }
- return &BatchRunner{eng: eng}, nil
- }
-
- func (r *BatchRunner) Close() {
- if r == nil || r.eng == nil {
- return
- }
- r.eng.Close()
- r.eng = nil
- r.slots = nil
- }
-
- func (r *BatchRunner) prepare(jobs []ExtractJob) {
- if cap(r.slots) < len(jobs) {
- r.slots = make([]batchSlot, len(jobs))
- } else {
- r.slots = r.slots[:len(jobs)]
- }
- for i, job := range jobs {
- r.slots[i] = batchSlot{job: job, active: true}
- }
- }
-
- func (r *BatchRunner) ShiftFilterDecimateBatch(iq []complex64, jobs []ExtractJob) ([][]complex64, []int, error) {
- if r == nil || r.eng == nil {
- return nil, nil, ErrUnavailable
- }
- r.prepare(jobs)
- return r.shiftFilterDecimateBatchImpl(iq)
- }
|