/*.new_segment_callback =*/ nullptr,
/*.new_segment_callback_user_data =*/ nullptr,
+ /*.progress_callback =*/ nullptr,
+ /*.progress_callback_user_data =*/ nullptr,
+
/*.encoder_begin_callback =*/ nullptr,
/*.encoder_begin_callback_user_data =*/ nullptr,
fprintf(stderr, "%s: progress = %3d%%\n", __func__, progress_prev);
}
}
+ if (params.progress_callback) {
+ params.progress_callback(
+ ctx, ctx->state, progress_prev, params.progress_callback_user_data);
+ }
// of only 1 second left, then stop
if (seek + 100 >= seek_end) {
params_cur.new_segment_callback = nullptr;
params_cur.new_segment_callback_user_data = nullptr;
+ params_cur.progress_callback = nullptr;
+ params_cur.progress_callback_user_data = nullptr;
+
workers[i] = std::thread(whisper_full_with_state, ctx, states[i], std::move(params_cur), samples + start_samples, n_samples_cur);
}
// Use the whisper_full_...() functions to obtain the text segments
typedef void (*whisper_new_segment_callback)(struct whisper_context * ctx, struct whisper_state * state, int n_new, void * user_data);
+ // Progress callback
+ typedef void (*whisper_progress_callback)(struct whisper_context * ctx, struct whisper_state * state, int progress, void * user_data);
+
// Encoder begin callback
// If not NULL, called before the encoder starts
// If it returns false, the computation is aborted
whisper_new_segment_callback new_segment_callback;
void * new_segment_callback_user_data;
+ // called on each progress update
+ whisper_progress_callback progress_callback;
+ void * progress_callback_user_data;
+
// called each time before the encoder starts
whisper_encoder_begin_callback encoder_begin_callback;
void * encoder_begin_callback_user_data;