SMV
- Extension: .smv
- Website: http://www.sigmatel.com
- Specification: V.1.0 by Jesse L. Zamora
- Samples: http://samples.mplayerhq.hu/smv/
Introduction
The Sigma Tel Motion Video Format (SMV) is a simple format used by many small media players that have the capability of playing video. This document describes the format of an SMV video file.
Format
An SMV file is composed of three sections, concatenated together:
- A .wav file for the audio stream, with a conventional WAV header.
- An SMV header, described below.
- An array of .jpeg files for the video stream, with headers, each prepended by a 24-bit (3 byte) little-endian value representing the size of the image and buffered at the end with nulls.
WAV File
The audio stream the SMV format uses is a regular IMA WAV audio file. Since the SMV format begins with a WAV file, audio players or converters usually detect it as if it was just a WAV file. Therefore, a demuxer implementation would have to seek to the SMV header in order to check if it's really an SMV.
SMV Header
The SMV header is composed of a magic ASCII string (SMV002000) followed by 24-bit (3 byte) little-endian values. Here is an example of an SMV header:
SMV002000 magic 128 width 128 height 16 header length (length of the SMV header) 1 unknown constant 8533 jpeg modulo 15 fps (frames per second) 1875 total number of frames in file 1 unknown constant 0 unknown constant 15 frames per jpeg 65793 extra padding (0x01010101) 65793 extra padding 65793 extra padding 65793 extra padding
JPEG Array
The video stream is composed of an array of JFIF .jpeg images. Each JPEG image is preceded with a 24-bit (3 byte) value indicating the size of the JPEG. Each JPEG image contains frames arranged vertically.
The width and height parameters in the SMV header specify the size of each frame, and the frames per jpeg parameter in the header specifies how many frames with be incorporated in each JPEG image. Each JPEG is buffered with an array of nulls at the end so that each image is at predictable locations. The number of nulls is specified by the jpeg modulo parameter in the SMV header.