import cv2
import signal
import sys

# Global variables
video_writer = None
capture = None

def signal_handler(sig, frame):
    """Handle Ctrl+C signal to cleanup and save video"""
    print("\nCtrl+C pressed - Saving video...")
    if video_writer is not None:
        video_writer.release()
    if capture is not None:
        capture.release()
    cv2.destroyAllWindows()
    print("Video saved as 'output.avi'")
    sys.exit(0)

# Set up signal handler for Ctrl+C
signal.signal(signal.SIGINT, signal_handler)

# Initialize video capture (0 is usually the default camera)
capture = cv2.VideoCapture(0)

# Get camera properties
frame_width = int(capture.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(capture.get(cv2.CAP_PROP_FRAME_HEIGHT))
fps = 20.0  # Frames per second

# Define the codec and create VideoWriter object
fourcc = cv2.VideoWriter_fourcc(*'XVID')
video_writer = cv2.VideoWriter('output.avi', fourcc, fps, (frame_width, frame_height))

print("Recording... Press Ctrl+C to save and exit")

while True:
    ret, frame = capture.read()
    
    if not ret:
        print("Failed to grab frame")
        break
    
    # Write the frame to the video file
    video_writer.write(frame)
    
    # Display the frame (optional)
    cv2.imshow('Recording - Press Ctrl+C to save', frame)
    
    # Also allow exiting by pressing 'q'
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# Cleanup if loop ends normally
if video_writer is not None:
    video_writer.release()
if capture is not None:
    capture.release()
cv2.destroyAllWindows()
