Skip to content

Commit 7a65340

Browse files
committed
[*] update normally
1 parent 7d7a97c commit 7a65340

File tree

7 files changed

+49
-36
lines changed

7 files changed

+49
-36
lines changed

lib/recorder/examples/recording_5s_demo.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ fn main() -> Result<(), Box<dyn std::error::Error>> {
3434
.with_enable_frame_channel_user(true)
3535
.with_enable_audio_channel_user(true)
3636
.with_enable_speaker_channel_user(true)
37-
// .with_enable_preview_mode(true)
37+
// .with_disable_save_file(true)
3838
.with_audio_device_name(Some(default_input.name))
3939
.with_enable_recording_speaker(true)
4040
.with_resolution(recorder::Resolution::Original((

lib/recorder/src/lib.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ pub struct StatsUser {
174174
#[derive(Debug, Clone)]
175175
pub struct FrameUser {
176176
pub stats: StatsUser,
177-
pub frame: Frame,
177+
pub frame: Option<Frame>,
178178
}
179179

180180
/// Configuration for combining video and audio tracks into a final MP4 file.

lib/recorder/src/record_audio.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -504,11 +504,11 @@ impl StreamingAudioRecorder {
504504
recorder: AudioRecorder,
505505
device_name: &str,
506506
file_path: P,
507-
enable_preview_mode: bool,
507+
disable_save_file: bool,
508508
) -> Result<Self, AudioError> {
509509
let config = recorder.get_config();
510510

511-
let file_writer = if enable_preview_mode {
511+
let file_writer = if disable_save_file {
512512
Arc::new(Mutex::new(None))
513513
} else {
514514
Arc::new(Mutex::new(Some(AudioFileWriter::new(

lib/recorder/src/record_speaker.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ pub struct SpeakerRecorder {
117117
/// Optional sender for audio level data (if monitoring enabled)
118118
level_sender: Option<Arc<Sender<f32>>>,
119119
/// Whether to run in preview mode (no file output)
120-
enable_preview_mode: bool,
120+
disable_save_file: bool,
121121

122122
// [0, infinity]
123123
amplification: Option<Arc<AtomicI32>>,
@@ -134,7 +134,7 @@ impl SpeakerRecorder {
134134
/// * `save_path` - Path where the WAV file will be saved
135135
/// * `stop_sig` - Atomic boolean signal to stop recording
136136
/// * `level_sender` - Optional sender for audio level monitoring
137-
/// * `enable_preview_mode` - If true, no file will be written
137+
/// * `disable_save_file` - If true, no file will be written
138138
///
139139
/// # Returns
140140
///
@@ -154,7 +154,7 @@ impl SpeakerRecorder {
154154
save_path: PathBuf,
155155
stop_sig: Arc<AtomicBool>,
156156
level_sender: Option<Arc<Sender<f32>>>,
157-
enable_preview_mode: bool,
157+
disable_save_file: bool,
158158
) -> Result<Self, SpeakerError> {
159159
pipewire::init();
160160

@@ -172,7 +172,7 @@ impl SpeakerRecorder {
172172
save_path,
173173
stop_sig,
174174
level_sender,
175-
enable_preview_mode,
175+
disable_save_file,
176176
amplification: None,
177177
})
178178
}
@@ -220,7 +220,7 @@ impl SpeakerRecorder {
220220
node_id
221221
);
222222

223-
let writer = if self.enable_preview_mode {
223+
let writer = if self.disable_save_file {
224224
Arc::new(Mutex::new(None))
225225
} else {
226226
let spec = hound::WavSpec {
@@ -255,7 +255,7 @@ impl SpeakerRecorder {
255255

256256
session.stop_recording()?;
257257

258-
if !self.enable_preview_mode {
258+
if !self.disable_save_file {
259259
log::info!(
260260
"Successfully save speaker file: {}",
261261
self.save_path.display()

lib/recorder/src/recorder.rs

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ impl RecordingSession {
341341
self.config.screen_logical_size.width as u32,
342342
self.config.screen_logical_size.height as u32,
343343
);
344-
let h264_writer = if self.config.enable_preview_mode {
344+
let h264_writer = if self.config.disable_save_file {
345345
None
346346
} else {
347347
Some(H264Writer::new(
@@ -363,6 +363,10 @@ impl RecordingSession {
363363
loop {
364364
match encoder_receiver.recv() {
365365
Ok((total_frame_index, img)) => {
366+
if self.config.disable_save_file {
367+
continue;
368+
}
369+
366370
let now = std::time::Instant::now();
367371
match video_encoder.encode_frame(img.into()) {
368372
Ok(EncodedFrame::Frame((_, encoded_frame))) => {
@@ -429,7 +433,7 @@ impl RecordingSession {
429433
audio_recorder,
430434
device_name,
431435
audio_file_path,
432-
self.config.enable_preview_mode,
436+
self.config.disable_save_file,
433437
)
434438
.map_err(|e: AudioError| RecorderError::AudioError(e.to_string()))?;
435439

@@ -453,9 +457,9 @@ impl RecordingSession {
453457
};
454458

455459
let amplification = self.config.speaker_amplification.clone();
456-
let enable_preview_mode = self.config.enable_preview_mode;
460+
let disable_save_file = self.config.disable_save_file;
457461
let handle = thread::spawn(move || {
458-
let recorder = SpeakerRecorder::new(save_path, stop_sig, sender, enable_preview_mode)
462+
let recorder = SpeakerRecorder::new(save_path, stop_sig, sender, disable_save_file)
459463
.map_err(|e| RecorderError::SpeakerError(e.to_string()))?;
460464

461465
let recorder = if amplification.is_some() {
@@ -485,7 +489,7 @@ impl RecordingSession {
485489
resolution: Resolution,
486490
total_frame_count: Arc<AtomicU64>,
487491
loss_frame_count: Arc<AtomicU64>,
488-
enable_previwe_model: bool,
492+
enable_preview_mode: bool,
489493
) -> Vec<JoinHandle<()>> {
490494
let mut thread_handles = vec![];
491495
let (collect_sender, collect_receiver) = bounded(ENCODER_WORKER_CHANNEL_SIZE);
@@ -503,7 +507,6 @@ impl RecordingSession {
503507
collect_receiver,
504508
encoder_sender,
505509
loss_frame_count.clone(),
506-
enable_previwe_model,
507510
));
508511

509512
thread_handles.push(Self::resize_forward_worker(
@@ -513,6 +516,7 @@ impl RecordingSession {
513516
start_time,
514517
total_frame_count,
515518
loss_frame_count,
519+
enable_preview_mode,
516520
));
517521

518522
thread_handles
@@ -574,7 +578,6 @@ impl RecordingSession {
574578
collect_receiver: Receiver<(usize, u64, ResizedImageBuffer)>,
575579
encoder_sender: Sender<EncoderChannelData>,
576580
loss_frame_count: Arc<AtomicU64>,
577-
enable_previwe_model: bool,
578581
) -> JoinHandle<()> {
579582
let loss_frame_count_clone = loss_frame_count.clone();
580583
let handle = thread::spawn(move || {
@@ -585,10 +588,6 @@ impl RecordingSession {
585588
loop {
586589
match collect_receiver.recv() {
587590
Ok((thread_index, total_frame_index, img)) => {
588-
if enable_previwe_model {
589-
continue;
590-
}
591-
592591
// log::debug!("+++ {total_frame_index} - {expect_total_frame_index}");
593592
if expect_total_frame_index == total_frame_index {
594593
disorder_frame_counts = 0;
@@ -671,6 +670,7 @@ impl RecordingSession {
671670
start_time: Instant,
672671
total_frame_count: Arc<AtomicU64>,
673672
loss_frame_count: Arc<AtomicU64>,
673+
enable_preview_mode: bool,
674674
) -> JoinHandle<()> {
675675
let mut fps_counter = SimpleFpsCounter::new();
676676

@@ -701,7 +701,12 @@ impl RecordingSession {
701701
total_frames: total_frame_count,
702702
loss_frames: loss_frame_count.load(Ordering::Relaxed),
703703
},
704-
frame: frame.clone(),
704+
705+
frame: if enable_preview_mode {
706+
Some(frame.clone())
707+
} else {
708+
None
709+
},
705710
};
706711
if let Err(e) = sender.try_send(frame_user) {
707712
log::warn!("try send frame to user frame channel failed: {e}");
@@ -752,7 +757,7 @@ impl RecordingSession {
752757
if let Err(e) = audio_recorder.stop() {
753758
log::warn!("Failed to stop audio recording: {}", e);
754759
} else {
755-
if !self.config.enable_preview_mode {
760+
if !self.config.disable_save_file {
756761
log::info!(
757762
"Successfully save audio recorder file: {}",
758763
self.config
@@ -810,7 +815,7 @@ impl RecordingSession {
810815
writer.finish()?;
811816
}
812817

813-
if !self.config.enable_preview_mode {
818+
if !self.config.disable_save_file {
814819
let tmp_output_file = self
815820
.config
816821
.output_path

lib/recorder/src/recorder_config.rs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -133,6 +133,8 @@ pub struct RecorderConfig {
133133
/// Enable preview mode (process frames without writing to file)
134134
pub enable_preview_mode: bool,
135135

136+
pub disable_save_file: bool,
137+
136138
#[setters(strip_option)]
137139
pub audio_amplification: Option<Arc<AtomicI32>>,
138140

@@ -190,6 +192,7 @@ impl RecorderConfig {
190192
enable_audio_channel_user: false,
191193
enable_speaker_channel_user: false,
192194
enable_preview_mode: false,
195+
disable_save_file: false,
193196
audio_amplification: None,
194197
speaker_amplification: None,
195198
}

wayshot/src/logic/recorder.rs

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -495,7 +495,8 @@ fn inner_start_recording(ui_weak: Weak<AppWindow>) -> Result<()> {
495495
screen_info.logical_size.clone(),
496496
RecorderConfig::make_filename(&all_config.recorder.save_dir),
497497
)
498-
.with_enable_frame_channel_user(all_config.recorder.enable_preview)
498+
.with_enable_frame_channel_user(true)
499+
.with_enable_preview_mode(all_config.recorder.enable_preview)
499500
.with_enable_recording_speaker(all_config.control.enable_desktop_speaker)
500501
.with_include_cursor(all_config.recorder.include_cursor)
501502
.with_remove_cache_files(all_config.recorder.remove_temporary_files)
@@ -532,19 +533,23 @@ fn inner_start_recording(ui_weak: Weak<AppWindow>) -> Result<()> {
532533
thread::spawn(move || {
533534
if let Some(rx) = frame_receiver_user {
534535
while let Ok(frame) = rx.recv() {
535-
log::debug!(
536-
"frame_receiver_user frame len: {} bytes",
537-
frame.frame.cb_data.data.pixel_data.len()
538-
);
536+
if let Some(ref frame) = frame.frame {
537+
log::debug!(
538+
"frame_receiver_user frame len: {} bytes",
539+
frame.cb_data.data.pixel_data.len()
540+
);
541+
}
539542

540543
_ = ui_weak_clone.upgrade_in_event_loop(move |ui| {
541-
let buffer = SharedPixelBuffer::<slint::Rgba8Pixel>::clone_from_slice(
542-
&frame.frame.cb_data.data.pixel_data,
543-
frame.frame.cb_data.data.width,
544-
frame.frame.cb_data.data.height,
545-
);
546-
let img = slint::Image::from_rgba8(buffer);
547-
global_store!(ui).set_preview_image(img);
544+
if let Some(ref frame) = frame.frame {
545+
let buffer = SharedPixelBuffer::<slint::Rgba8Pixel>::clone_from_slice(
546+
&frame.cb_data.data.pixel_data,
547+
frame.cb_data.data.width,
548+
frame.cb_data.data.height,
549+
);
550+
let img = slint::Image::from_rgba8(buffer);
551+
global_store!(ui).set_preview_image(img);
552+
}
548553

549554
let mut sinfo = global_store!(ui).get_stats_info();
550555
sinfo.fps = frame.stats.fps;

0 commit comments

Comments
 (0)