# FreePassport-C Media Player

FreePassport-C Media Player is a low-dependency SDL2 + FFmpeg application inspired by the interactive program guides used on older Cisco and Scientific Atlanta Explorer cable boxes. It turns a local media library into a fullscreen-first virtual cable system with live-seeking channels, a retro guide, and broadcast-style on-screen overlays.

## Features

- Live-TV epoch clock based on `time(NULL)`
- 200 ms black-screen channel tuning delay
- Fullscreen and guide modes
- 5-row Passport-style guide with a 90-minute timeline
- Background decoder thread with a bounded frame queue
- Automatic channel discovery from `./media`
- Randomized per-channel schedules on each launch
- Fullscreen channel banner, theme picker, and about panel

## Layout

- `src/` - application, UI, channel scan, and playback code
- `media/` - channel video files
- `guide-ui.jpg` - visual reference used for proportions and palette

## Controls

- `Up` / `Down` - surf channels
- `Tab` - toggle guide
- `Enter` - tune selected channel from the guide
- `Left` / `Right` - browse guide time
- `0-9` - direct channel number entry
- `i` - show current channel info
- `a` - toggle about panel
- `b` - toggle theme picker
- `f` - toggle fullscreen
- `Esc` - exit guide or quit the app

## Build

Install development packages for SDL2, SDL2_ttf, SDL2_image, and FFmpeg headers before building.

Typical Debian or Ubuntu packages:

```bash
sudo apt install build-essential libsdl2-dev libsdl2-ttf-dev libsdl2-image-dev libavformat-dev libavcodec-dev libswscale-dev libswresample-dev libavutil-dev
```

Then build and run:

```bash
make
./passport-c-media-player
```

## AppImage Build

To create a portable AppImage with the included packaging script:

```bash
make appimage
```

The AppImages for `0.1` are built on Debian 13 using `linuxdeploy` and the repository's included scripts. The build automatically detects your architecture and produces the appropriate AppImage:

- **x86_64**: `FreePassport-C-Media-Player-0.1-x86_64.AppImage`
- **ARM64/aarch64**: `FreePassport-C-Media-Player-0.1-aarch64.AppImage`

Users can run it directly:

```bash
./FreePassport-C-Media-Player-0.1-x86_64.AppImage
# or on ARM devices:
./FreePassport-C-Media-Player-0.1-aarch64.AppImage
```

For a fully portable setup, create a `media/` directory in the same folder as the AppImage and add your channel videos there. The AppImage will automatically detect and load channels from this directory.

## Media

The player scans `./media` for channel directories. Each subdirectory is treated as one channel, and the supported video files inside it are shuffled into a randomized schedule for that channel on each launch.

Optional metadata can be provided with `description.txt` inside each channel directory:

```txt
name=Reading
number=56
description=Books, documentaries, and reading-focused programming.
```

Example layout:

```txt
media/
  reading/
    description.txt
    01-intro.mp4
    02-feature.mp4
  computers/
    description.txt
    01-chronicles.mp4
    02-demo.mp4
```

## Fonts

The UI tries `BigBlueTermPlus Nerd Font` first, then falls back to common Linux monospace fonts.
