libquicktime
Functions
Video encoding

Video related definitions and functions (writing) More...

Functions

void quicktime_set_framerate (quicktime_t *file, double framerate)
 Set the framerate for encoding. More...
 
int quicktime_set_video (quicktime_t *file, int tracks, int frame_w, int frame_h, double frame_rate, char *compressor)
 Set up video tracks for encoding. More...
 
void quicktime_set_jpeg (quicktime_t *file, int quality, int use_float)
 Set jpeg encoding quality. More...
 
void quicktime_set_parameter (quicktime_t *file, char *key, void *value)
 Set a codec parameter. More...
 
void quicktime_set_depth (quicktime_t *file, int depth, int track)
 Set the depth of a video track. More...
 
int quicktime_write_frame (quicktime_t *file, uint8_t *video_buffer, int64_t bytes, int track)
 Write a compressed video frame. More...
 
int quicktime_writes_cmodel (quicktime_t *file, int colormodel, int track)
 Check if a colormodel is supported for encoding. More...
 
int quicktime_encode_video (quicktime_t *file, unsigned char **row_pointers, int track)
 Encode a video frame. More...
 
int lqt_set_pixel_aspect (quicktime_t *file, int track, int pixel_width, int pixel_height)
 Set the pixel aspect ratio of a video track. More...
 
int lqt_set_interlace_mode (quicktime_t *file, int track, lqt_interlace_mode_t mode)
 Set the interlace mode. More...
 
int lqt_set_video (quicktime_t *file, int tracks, int frame_w, int frame_h, int frame_duration, int timescale, lqt_codec_info_t *codec_info)
 Set up video tracks for encoding. More...
 
int lqt_add_video_track (quicktime_t *file, int frame_w, int frame_h, int frame_duration, int timescale, lqt_codec_info_t *codec_info)
 Add a video track for encoding. More...
 
int lqt_set_video_codec (quicktime_t *file, int track, lqt_codec_info_t *info)
 Set a codec for an audio track. More...
 
int lqt_set_video_pass (quicktime_t *file, int pass, int total_passes, const char *stats_file, int track)
 Enable multipass encoding. More...
 
int lqt_encode_video (quicktime_t *file, unsigned char **row_pointers, int track, int64_t time)
 Encode one video frame. More...
 
int lqt_encode_video_d (quicktime_t *file, unsigned char **row_pointers, int track, int64_t time, int duration)
 Encode one video frame. More...
 
void lqt_set_video_pts_offset (quicktime_t *file, int track, int64_t offset)
 Set an video pts offset. More...
 

Detailed Description

Video related definitions and functions (writing)

The video API changed a lot during the last years (causing lot of confusion), so here is the preferred way: Use the Codec registry functions to get all supported video encoders. Once you found a codec (i.e. a lqt_codec_info_t ), call lqt_add_video_track to add the track to the file. You can repeat this procedure to add as many tracks as you like with different formats and/or codecs. You can pass further format parameters with lqt_set_pixel_aspect.

A very important thing is the colormodel (see Color handling): First obtain the colormodel used natively by the codec with lqt_get_cmodel. Your application might or might not support all colormodels, which exist in libquicktime. The more colormodels you can handle yourself, the better, since libquicktimes built in colormodel converter is not the best. Thus, it's the best idea to pack all colormodels you can handle yourself into an array, and call lqt_get_best_colormodel to get the best colormodel. After you figured out, which colormodel you use, tell this to libquicktime with lqt_set_cmodel.

Next you might want to set some compression parameters. This is done by calling lqt_set_video_parameter. Supported parameters and valid ranges are in the lqt_codec_info_t.

Actual encoding should happen with lqt_encode_video.

Function Documentation

◆ quicktime_set_framerate()

void quicktime_set_framerate ( quicktime_t file,
double  framerate 
)

Set the framerate for encoding.

Parameters
fileA quicktime handle
framerateframerate

Sets the framerate for encoding.

This function is depracated and should not be used in newly written code.

◆ quicktime_set_video()

int quicktime_set_video ( quicktime_t file,
int  tracks,
int  frame_w,
int  frame_h,
double  frame_rate,
char *  compressor 
)

Set up video tracks for encoding.

Parameters
fileA quicktime handle
tracksNumber of tracks
frame_wFrame width
frame_hFrame height
frame_rateFrame rate (in frames per second)
compressorFour character code of the compressor

This function is depracated and should not be used in newly written code. It won't allow you to set multiple video streams with different formats, and passing a double framerate causes rounding errors. Use lqt_add_video_track instead.

◆ quicktime_set_jpeg()

void quicktime_set_jpeg ( quicktime_t file,
int  quality,
int  use_float 
)

Set jpeg encoding quality.

Parameters
fileA quicktime handle
qualityQuality (0..100)
use_floatUse floating point routines

Set the jpeg encoding quality and whether to use floating point routines. This should be called after creating the video track(s).

This function is depracated and should not be used in newly written code. Use lqt_set_video_parameter instead.

◆ quicktime_set_parameter()

void quicktime_set_parameter ( quicktime_t file,
char *  key,
void *  value 
)

Set a codec parameter.

Parameters
fileA quicktime handle
keyShort name of the parameter
valueParameter value.

For integer parameters, value must be of the type int*. For string parameters, use char*.

This function sets the same parameter for all video AND audio streams, which is quite idiotic. Use lqt_set_audio_parameter and lqt_set_video_parameter to set codec parameters on a per stream basis.

◆ quicktime_set_depth()

void quicktime_set_depth ( quicktime_t file,
int  depth,
int  track 
)

Set the depth of a video track.

Parameters
fileA quicktime handle
depthThe depth (bits per pixel)
trackindex (starting with 0)

This function is deprecated and should never be called. The depth is set by the codecs and there is no reason to change this.

◆ quicktime_write_frame()

int quicktime_write_frame ( quicktime_t file,
uint8_t *  video_buffer,
int64_t  bytes,
int  track 
)

Write a compressed video frame.

Parameters
fileA quicktime handle
video_bufferThe compressed frame
bytesBytes of the compressed frame
trackindex (starting with 0)

If you get compressed video frames (e.g. from a firewire port), use this function to write them into a quicktime container. Before, you must set up the track with lqt_add_video_track or, if no software codec is present, with quicktime_set_video.

Note: Use lqt_write_video_packet instead.

◆ quicktime_writes_cmodel()

int quicktime_writes_cmodel ( quicktime_t file,
int  colormodel,
int  track 
)

Check if a colormodel is supported for encoding.

Parameters
fileA quicktime handle
colormodelA colormodel (see Color handling)
trackindex (starting with 0)
Returns
1 if the colormodel can be used for encoding calls, 0 if it can't.

To let libquicktime get the best colormodel out of a list of colormodels your application supports, use lqt_get_best_colormodel instead.

◆ quicktime_encode_video()

int quicktime_encode_video ( quicktime_t file,
unsigned char **  row_pointers,
int  track 
)

Encode a video frame.

Parameters
fileA quicktime handle
row_pointersFrame buffer (see lqt_rows_alloc )
trackindex (starting with 0)

Encode one video frame. This works only for constant framerate streams. For nonconstant framerates, you'll want to use lqt_encode_video instead.

◆ lqt_set_pixel_aspect()

int lqt_set_pixel_aspect ( quicktime_t file,
int  track,
int  pixel_width,
int  pixel_height 
)

Set the pixel aspect ratio of a video track.

Parameters
fileA quicktime handle
trackTrack index (starting with 0)
pixel_widthPixel width
pixel_heightPixel height
Returns
1 if the call was successful, 0 if there is no such track

◆ lqt_set_interlace_mode()

int lqt_set_interlace_mode ( quicktime_t file,
int  track,
lqt_interlace_mode_t  mode 
)

Set the interlace mode.

Parameters
fileA quicktime handle
trackTrack index (starting with 0)
modeThe interlace mode.
Returns
1 if the call was successful, 0 if there is no such track

This will in most cases store the correct interlacing information in the file (e.g. in the fiel atom). For tweaking the fiel atom directly, advanced users might look at lqt_set_fiel.

◆ lqt_set_video()

int lqt_set_video ( quicktime_t file,
int  tracks,
int  frame_w,
int  frame_h,
int  frame_duration,
int  timescale,
lqt_codec_info_t codec_info 
)

Set up video tracks for encoding.

Parameters
fileA quicktime handle
tracksNumber of video tracks
frame_wImage width
frame_hImage height
frame_durationDuration of one frame. This can later be overridden
timescaleTimescale of the track
codec_infoCodec to use (see Codec registry )

This sets one or more video tracks for encoding. The framerate is passed as a rational number (timescale/frame_duration). E.g. for an NTSC stream, you'll choose timescale = 30000 and frame_duration = 1001. To set up multiple video tracks with different formats and/or codecs, use lqt_add_video_track .

◆ lqt_add_video_track()

int lqt_add_video_track ( quicktime_t file,
int  frame_w,
int  frame_h,
int  frame_duration,
int  timescale,
lqt_codec_info_t codec_info 
)

Add a video track for encoding.

Parameters
fileA quicktime handle
frame_wImage width
frame_hImage height
frame_durationDuration of one frame. This can later be overridden
timescaleTimescale of the track
codec_infoCodec to use (see Codec registry ) or NULL

This sets one or more video tracks for encoding. The framerate is passed as a rational number (timescale/frame_duration). E.g. for an NTSC stream, you'll choose timescale = 30000 and frame_duration = 1001. Call this function to subsequently to add as many tracks as you like.

If you passed NULL for the codec_info, you should call lqt_set_video_codec once you know which codec to use.

◆ lqt_set_video_codec()

int lqt_set_video_codec ( quicktime_t file,
int  track,
lqt_codec_info_t info 
)

Set a codec for an audio track.

Parameters
fileA quicktime handle
trackTrack index (starting with 0)
infoThe codec to be used for encoding

◆ lqt_set_video_pass()

int lqt_set_video_pass ( quicktime_t file,
int  pass,
int  total_passes,
const char *  stats_file,
int  track 
)

Enable multipass encoding.

Parameters
fileA quicktime handle
trackTrack index (starting with 0)
passThe number of this pass (starting with 1)
total_passesThe total number of passes
stats_fileStatistics file

This is a purely optional function, which enables multipass encoding. Multipass encoding is done by repeatedly opening a quicktime file, encoding video and and closing it again. The stats_file parameter must always be the same for all passes.

Having more than 2 passes is not always useful. Audio encoding can be skipped for all passes until the last one.

◆ lqt_encode_video()

int lqt_encode_video ( quicktime_t file,
unsigned char **  row_pointers,
int  track,
int64_t  time 
)

Encode one video frame.

Parameters
fileA quicktime handle
row_pointersFrame (see lqt_rows_alloc)
trackTrack index (starting with 0)
timeTimestamp of the frame in timescale tics
Returns
0 if the frame was encoded, 1 else.

Encode one video frame. The presentation timestamp is in timescale tics with the timescale you passed to lqt_add_video_track or lqt_set_video . WARNING: AVI files don't support arbitrary timestamps. For AVI files time is ignored, instead it's frame_number * frame_duration,

◆ lqt_encode_video_d()

int lqt_encode_video_d ( quicktime_t file,
unsigned char **  row_pointers,
int  track,
int64_t  time,
int  duration 
)

Encode one video frame.

Parameters
fileA quicktime handle
row_pointersFrame (see lqt_rows_alloc)
trackTrack index (starting with 0)
timeTimestamp of the frame in timescale tics
durationDuration of the frame
Returns
0 if the frame was encoded, 1 else.

This is the same as lqt_encode_video except that you can pass the duration along with the timestamp. This is really only important for the last picture, since all other durations are calculated from the timestamp differences.

Since 1.1.2

◆ lqt_set_video_pts_offset()

void lqt_set_video_pts_offset ( quicktime_t file,
int  track,
int64_t  offset 
)

Set an video pts offset.

Parameters
fileA quicktime handle
trackTrack index (starting with 0)
offsetPTS of the first video frame (in timescale units)