| 11715 | } |
| 11716 | |
| 11717 | static void sam3_store_obj_ptr( |
| 11718 | sam3_tracker& tracker, const sam3_model& model, |
| 11719 | int inst_id, const float* pd, int frame_idx) { |
| 11720 | const int D = model.hparams.neck_dim; |
| 11721 | if (!tracker.ctx) { |
| 11722 | struct ggml_init_params tp = {ggml_tensor_overhead() * 4096, nullptr, true}; |
| 11723 | tracker.ctx = ggml_init(tp); |
| 11724 | } |
| 11725 | auto* pt = ggml_new_tensor_2d(tracker.ctx, GGML_TYPE_F32, D, 1); |
| 11726 | auto* pb = ggml_backend_alloc_buffer(model.backend, D * sizeof(float)); |
| 11727 | struct ggml_tallocr ta = ggml_tallocr_new(pb); |
| 11728 | ggml_tallocr_alloc(&ta, pt); |
| 11729 | tracker.owned_buffers.push_back(pb); |
| 11730 | ggml_backend_tensor_set(pt, pd, 0, D * sizeof(float)); |
| 11731 | auto& bk = tracker.ptr_banks[inst_id]; |
| 11732 | bk.push_back({frame_idx, pt}); |
| 11733 | while ((int)bk.size() > model.hparams.max_obj_ptrs) bk.erase(bk.begin()); |
| 11734 | } |
| 11735 | |
| 11736 | sam3_tracker_ptr sam3_create_tracker(const sam3_model& model, |
| 11737 | const sam3_video_params& params) { |
no outgoing calls
no test coverage detected