xine-lib: xine-lib-1.2.13/src/demuxers/demux_qt.c File Reference

xine-lib 1.2.13-20230125hg15249

Data Structures | Macros | Typedefs | Enumerations | Functions | Variables
demux_qt.c File Reference
`#include <stdio.h>`
`#include <fcntl.h>`
`#include <unistd.h>`
`#include <string.h>`
`#include <stdlib.h>`
`#include <ctype.h>`
`#include <zlib.h>`
`#include "group_video.h"`
`#include <xine/xine_internal.h>`
`#include <xine/xineutils.h>`
`#include <xine/demux.h>`
`#include <xine/buffer.h>`
`#include <xine/mfrag.h>`
`#include "bswap.h"`
`#include "qtpalette.h"`

## Data Structures
struct | scale_int_t
struct | qt_frame
struct | edit_list_table_t
struct | sample_to_chunk_table_t
struct | reference_t
struct | properties_t
struct | qt_trak
struct | qt_info
struct | demux_qt_t

## Macros
#define | LOG_MODULE "demux_qt"
#define | QT_ATOM BE_FOURCC
#define | FREE_ATOM QT_ATOM('f', 'r', 'e', 'e')
#define | JUNK_ATOM QT_ATOM('j', 'u', 'n', 'k')
#define | MDAT_ATOM QT_ATOM('m', 'd', 'a', 't')
#define | MOOV_ATOM QT_ATOM('m', 'o', 'o', 'v')
#define | PNOT_ATOM QT_ATOM('p', 'n', 'o', 't')
#define | SKIP_ATOM QT_ATOM('s', 'k', 'i', 'p')
#define | WIDE_ATOM QT_ATOM('w', 'i', 'd', 'e')
#define | PICT_ATOM QT_ATOM('P', 'I', 'C', 'T')
#define | FTYP_ATOM QT_ATOM('f', 't', 'y', 'p')
#define | SIDX_ATOM QT_ATOM('s', 'i', 'd', 'x')
#define | CMOV_ATOM QT_ATOM('c', 'm', 'o', 'v')
#define | MVHD_ATOM QT_ATOM('m', 'v', 'h', 'd')
#define | VMHD_ATOM QT_ATOM('v', 'm', 'h', 'd')
#define | SMHD_ATOM QT_ATOM('s', 'm', 'h', 'd')
#define | TRAK_ATOM QT_ATOM('t', 'r', 'a', 'k')
#define | TKHD_ATOM QT_ATOM('t', 'k', 'h', 'd')
#define | MDHD_ATOM QT_ATOM('m', 'd', 'h', 'd')
#define | ELST_ATOM QT_ATOM('e', 'l', 's', 't')
#define | STSD_ATOM QT_ATOM('s', 't', 's', 'd')
#define | STSZ_ATOM QT_ATOM('s', 't', 's', 'z')
#define | STZ2_ATOM QT_ATOM('s', 't', 'z', '2')
#define | STSC_ATOM QT_ATOM('s', 't', 's', 'c')
#define | STCO_ATOM QT_ATOM('s', 't', 'c', 'o')
#define | STTS_ATOM QT_ATOM('s', 't', 't', 's')
#define | CTTS_ATOM QT_ATOM('c', 't', 't', 's')
#define | STSS_ATOM QT_ATOM('s', 't', 's', 's')
#define | CO64_ATOM QT_ATOM('c', 'o', '6', '4')
#define | ESDS_ATOM QT_ATOM('e', 's', 'd', 's')
#define | WAVE_ATOM QT_ATOM('w', 'a', 'v', 'e')
#define | FRMA_ATOM QT_ATOM('f', 'r', 'm', 'a')
#define | AVCC_ATOM QT_ATOM('a', 'v', 'c', 'C')
#define | HVCC_ATOM QT_ATOM('h', 'v', 'c', 'C')
#define | ENDA_ATOM QT_ATOM('e', 'n', 'd', 'a')
#define | IMA4_FOURCC ME_FOURCC('i', 'm', 'a', '4')
#define | MAC3_FOURCC ME_FOURCC('M', 'A', 'C', '3')
#define | MAC6_FOURCC ME_FOURCC('M', 'A', 'C', '6')
#define | ULAW_FOURCC ME_FOURCC('u', 'l', 'a', 'w')
#define | ALAW_FOURCC ME_FOURCC('a', 'l', 'a', 'w')
#define | MP4A_FOURCC ME_FOURCC('m', 'p', '4', 'a')
#define | SAMR_FOURCC ME_FOURCC('s', 'a', 'm', 'r')
#define | ALAC_FOURCC ME_FOURCC('a', 'l', 'a', 'c')
#define | DRMS_FOURCC ME_FOURCC('d', 'r', 'm', 's')
#define | TWOS_FOURCC ME_FOURCC('t', 'w', 'o', 's')
#define | SOWT_FOURCC ME_FOURCC('s', 'o', 'w', 't')
#define | RAW_FOURCC ME_FOURCC('r', 'a', 'w', ' ')
#define | IN24_FOURCC ME_FOURCC('i', 'n', '2', '4')
#define | NI42_FOURCC ME_FOURCC('4', '2', 'n', 'i')
#define | AVC1_FOURCC ME_FOURCC('a', 'v', 'c', '1')
#define | HVC1_FOURCC ME_FOURCC('h', 'v', 'c', '1')
#define | HEV1_FOURCC ME_FOURCC('h', 'e', 'v', '1')
#define | HEVC_FOURCC ME_FOURCC('h', 'e', 'v', 'c')
#define | AC_3_FOURCC ME_FOURCC('a', 'c', '-', '3')
#define | EAC3_FOURCC ME_FOURCC('e', 'c', '-', '3')
#define | QCLP_FOURCC ME_FOURCC('Q', 'c', 'l', 'p')
#define | UDTA_ATOM QT_ATOM('u', 'd', 't', 'a')
#define | META_ATOM QT_ATOM('m', 'e', 't', 'a')
#define | HDLR_ATOM QT_ATOM('h', 'd', 'l', 'r')
#define | ILST_ATOM QT_ATOM('i', 'l', 's', 't')
#define | NAM_ATOM QT_ATOM(0xA9, 'n', 'a', 'm')
#define | CPY_ATOM QT_ATOM(0xA9, 'c', 'p', 'y')
#define | DES_ATOM QT_ATOM(0xA9, 'd', 'e', 's')
#define | CMT_ATOM QT_ATOM(0xA9, 'c', 'm', 't')
#define | ALB_ATOM QT_ATOM(0xA9, 'a', 'l', 'b')
#define | GEN_ATOM QT_ATOM(0xA9, 'g', 'e', 'n')
#define | ART_ATOM QT_ATOM(0xA9, 'A', 'R', 'T')
#define | TOO_ATOM QT_ATOM(0xA9, 't', 'o', 'o')
#define | WRT_ATOM QT_ATOM(0xA9, 'w', 'r', 't')
#define | DAY_ATOM QT_ATOM(0xA9, 'd', 'a', 'y')
#define | RMRA_ATOM QT_ATOM('r', 'm', 'r', 'a')
#define | RMDA_ATOM QT_ATOM('r', 'm', 'd', 'a')
#define | RDRF_ATOM QT_ATOM('r', 'd', 'r', 'f')
#define | RMDR_ATOM QT_ATOM('r', 'm', 'd', 'r')
#define | RMVC_ATOM QT_ATOM('r', 'm', 'v', 'c')
#define | QTIM_ATOM QT_ATOM('q', 't', 'i', 'm')
#define | URL__ATOM QT_ATOM('u', 'r', 'l', ' ')
#define | DATA_ATOM QT_ATOM('d', 'a', 't', 'a')
#define | MVEX_ATOM QT_ATOM('m', 'v', 'e', 'x')
#define | MEHD_ATOM QT_ATOM('m', 'e', 'h', 'd')
#define | TREX_ATOM QT_ATOM('t', 'r', 'e', 'x')
#define | MOOF_ATOM QT_ATOM('m', 'o', 'o', 'f')
#define | MFHD_ATOM QT_ATOM('m', 'v', 'h', 'd')
#define | TRAF_ATOM QT_ATOM('t', 'r', 'a', 'f')
#define | TFHD_ATOM QT_ATOM('t', 'f', 'h', 'd')
#define | TRUN_ATOM QT_ATOM('t', 'r', 'u', 'n')
#define | MAX_MOOV_SIZE (128 << 20)
#define | ATOM_PREAMBLE_SIZE 8
#define | PALETTE_COUNT 256
#define | MAX_PTS_DIFF 100000
#define | QTF_OFFSET(f) ((f)._ffs.offset & ~((uint64_t)0xffff << 48))
#define | QTF_KEYFRAME(f) ((f)._ffs.bytes[7])
#define | QTF_MEDIA_ID(f) ((f)._ffs.bytes[6])
#define | MAX_AUDIO_TRAKS 8
#define | DEBUG_ATOM_LOAD 0
#define | DEBUG_EDIT_LIST 0
#define | DEBUG_FRAME_TABLE 0
#define | DEBUG_VIDEO_DEMUX 0
#define | DEBUG_AUDIO_DEMUX 0
#define | DEBUG_META_LOAD 0
#define | DEBUG_DUMP_MOOV 0
#define | RAW_MOOV_FILENAME "moovatom.raw"
#define | WRITE_BE_32(v, p)
#define | KEYFRAMES_SIZE 1024

## Typedefs
typedef unsigned int | qt_atom

## Enumerations
enum | qt_error { QT_OK , QT_FILE_READ_ERROR , QT_NO_MEMORY , QT_NOT_A_VALID_FILE , QT_NO_MOOV_ATOM , QT_NO_ZLIB , QT_ZLIB_ERROR , QT_HEADER_TROUBLE , QT_DRM_NOT_SUPPORTED }
enum | media_type { MEDIA_AUDIO , MEDIA_VIDEO , MEDIA_OTHER }

## Functions
static void | scale_int_init (scale_int_t *scale, uint32_t num, uint32_t den)
static void | scale_int_do (scale_int_t *scale, int64_t *v)
static void | XINE_FORMAT_PRINTF (1, 2)
static void | dump_moov_atom (uint8_t *moov_atom, int moov_atom_size)
static void | reset_qt_info (demux_qt_t *this)
static qt_info * | create_qt_info (demux_qt_t *this)
static void | free_qt_info (demux_qt_t *this)
static void | parse_mvhd_atom (demux_qt_t *this, uint8_t *mvhd_atom)
static int | mp4_read_descr_len (uint8_t *s, uint32_t *length)
static void | find_embedded_atoms (uint8_t *atom, const uint32_t *types, uint8_t **found, uint32_t *sizes)
static int | atom_scan (uint8_t *atom, int depth, const uint32_t *types, uint8_t **found, unsigned int *sizes)
static qt_error | parse_trak_atom (qt_trak *trak, uint8_t *trak_atom)
static qt_error | parse_reference_atom (demux_qt_t *this, uint8_t *ref_atom, char *base_mrl)
static void | qt_normpos_init (demux_qt_t *this)
static int32_t | qt_msec_2_normpos (demux_qt_t *this, int32_t msec)
static int32_t | qt_pts_2_msecs (int64_t pts)
static void | qt_keyframes_size (qt_trak *trak, uint32_t n)
static void | qt_keyframes_simple_add (qt_trak *trak, qt_frame *f)
static qt_error | build_frame_table (qt_trak *trak, unsigned int global_timescale)
static int | demux_qt_load_fragment_index (demux_qt_t *this, const uint8_t *head, uint32_t hsize)
static qt_trak * | find_trak_by_id (demux_qt_t *this, int id)
static int | parse_mvex_atom (demux_qt_t *this, uint8_t *mvex_atom, unsigned int bufsize)
static int | parse_traf_atom (demux_qt_t *this, uint8_t *traf_atom, unsigned int trafsize, off_t moofpos)
static int | parse_moof_atom (demux_qt_t *this, uint8_t *moof_atom, int moofsize, off_t moofpos)
static int | fragment_scan (demux_qt_t *this)
static void | info_string_from_atom (uint8_t *atom, char **target)
static void | qt_update_duration (demux_qt_t *this)
static void | parse_moov_atom (demux_qt_t *this, uint8_t *moov_atom)
static qt_error | load_moov_atom (input_plugin_t *input, uint8_t **moov_atom, off_t *moov_atom_offset)
static qt_error | open_qt_file (demux_qt_t *this, uint8_t *moov_atom, off_t moov_atom_offset)
static int | demux_qt_send_chunk (demux_plugin_t *this_gen)
static void | demux_qt_send_headers (demux_plugin_t *this_gen)
static int | binary_seek (demux_qt_t *this, qt_trak *trak, off_t start_pos, int start_time)
static int | demux_qt_seek (demux_plugin_t *this_gen, off_t start_pos, int start_time, int playing)
static void | demux_qt_dispose (demux_plugin_t *this_gen)
static int | demux_qt_get_status (demux_plugin_t *this_gen)
static int | demux_qt_get_stream_length (demux_plugin_t *this_gen)
static uint32_t | demux_qt_get_capabilities (demux_plugin_t *this_gen)
static int | demux_qt_get_optional_data (demux_plugin_t *this_gen, void *data, int data_type)
static demux_plugin_t * | open_plugin (demux_class_t *class_gen, xine_stream_t *stream, input_plugin_t *input)
void * | demux_qt_init_class (xine_t *xine, const void *data)

## Variables
static const uint32_t | bandwidths []
| Network bandwidth, cribbed from src/input/input_mms.c.

## Macro Definition Documentation

## ◆ AC_3_FOURCC

#define AC_3_FOURCC ME_FOURCC('a', 'c', '-', '3')

Referenced by parse_trak_atom().

## ◆ ALAC_FOURCC

#define ALAC_FOURCC ME_FOURCC('a', 'l', 'a', 'c')

Referenced by parse_trak_atom().

## ◆ ALAW_FOURCC

#define ALAW_FOURCC ME_FOURCC('a', 'l', 'a', 'w')

Referenced by parse_trak_atom().

## ◆ ALB_ATOM

#define ALB_ATOM QT_ATOM(0xA9, 'a', 'l', 'b')

Referenced by parse_moov_atom().

## ◆ ART_ATOM

#define ART_ATOM QT_ATOM(0xA9, 'A', 'R', 'T')

Referenced by parse_moov_atom().

## ◆ ATOM_PREAMBLE_SIZE

#define ATOM_PREAMBLE_SIZE 8

## ◆ AVC1_FOURCC

#define AVC1_FOURCC ME_FOURCC('a', 'v', 'c', '1')

Referenced by demux_qt_send_headers().

## ◆ AVCC_ATOM

#define AVCC_ATOM QT_ATOM('a', 'v', 'c', 'C')

Referenced by parse_trak_atom().

## ◆ CMOV_ATOM

#define CMOV_ATOM QT_ATOM('c', 'm', 'o', 'v')

Referenced by load_moov_atom(), and open_qt_file().

## ◆ CMT_ATOM

#define CMT_ATOM QT_ATOM(0xA9, 'c', 'm', 't')

Referenced by parse_moov_atom().

## ◆ CO64_ATOM

#define CO64_ATOM QT_ATOM('c', 'o', '6', '4')

Referenced by parse_trak_atom().

## ◆ CPY_ATOM

#define CPY_ATOM QT_ATOM(0xA9, 'c', 'p', 'y')

Referenced by parse_moov_atom().

## ◆ CTTS_ATOM

#define CTTS_ATOM QT_ATOM('c', 't', 't', 's')

Referenced by parse_trak_atom().

## ◆ DATA_ATOM

#define DATA_ATOM QT_ATOM('d', 'a', 't', 'a')

Referenced by info_string_from_atom().

## ◆ DAY_ATOM

#define DAY_ATOM QT_ATOM(0xA9, 'd', 'a', 'y')

Referenced by parse_moov_atom().

## ◆ DEBUG_ATOM_LOAD

#define DEBUG_ATOM_LOAD 0

## ◆ DEBUG_AUDIO_DEMUX

#define DEBUG_AUDIO_DEMUX 0

## ◆ DEBUG_DUMP_MOOV

#define DEBUG_DUMP_MOOV 0

## ◆ DEBUG_EDIT_LIST

#define DEBUG_EDIT_LIST 0

## ◆ DEBUG_FRAME_TABLE

#define DEBUG_FRAME_TABLE 0

## ◆ DEBUG_META_LOAD

#define DEBUG_META_LOAD 0

## ◆ DEBUG_VIDEO_DEMUX

#define DEBUG_VIDEO_DEMUX 0

## ◆ DES_ATOM

#define DES_ATOM QT_ATOM(0xA9, 'd', 'e', 's')

Referenced by parse_moov_atom().

## ◆ DRMS_FOURCC

#define DRMS_FOURCC ME_FOURCC('d', 'r', 'm', 's')

Referenced by parse_trak_atom().

## ◆ EAC3_FOURCC

#define EAC3_FOURCC ME_FOURCC('e', 'c', '-', '3')

Referenced by parse_trak_atom().

## ◆ ELST_ATOM

#define ELST_ATOM QT_ATOM('e', 'l', 's', 't')

Referenced by parse_trak_atom().

## ◆ ENDA_ATOM

#define ENDA_ATOM QT_ATOM('e', 'n', 'd', 'a')

Referenced by parse_trak_atom().

## ◆ ESDS_ATOM

#define ESDS_ATOM QT_ATOM('e', 's', 'd', 's')

Referenced by parse_trak_atom().

## ◆ FREE_ATOM

#define FREE_ATOM QT_ATOM('f', 'r', 'e', 'e')

Referenced by load_moov_atom(), and parse_moov_atom().

## ◆ FRMA_ATOM

#define FRMA_ATOM QT_ATOM('f', 'r', 'm', 'a')

Referenced by parse_trak_atom().

## ◆ FTYP_ATOM

#define FTYP_ATOM QT_ATOM('f', 't', 'y', 'p')

Referenced by load_moov_atom().

## ◆ GEN_ATOM

#define GEN_ATOM QT_ATOM(0xA9, 'g', 'e', 'n')

Referenced by parse_moov_atom().

## ◆ HDLR_ATOM

#define HDLR_ATOM QT_ATOM('h', 'd', 'l', 'r')

## ◆ HEV1_FOURCC

#define HEV1_FOURCC ME_FOURCC('h', 'e', 'v', '1')

Referenced by demux_qt_send_headers().

## ◆ HEVC_FOURCC

#define HEVC_FOURCC ME_FOURCC('h', 'e', 'v', 'c')

Referenced by demux_qt_send_headers().

## ◆ HVC1_FOURCC

#define HVC1_FOURCC ME_FOURCC('h', 'v', 'c', '1')

Referenced by demux_qt_send_headers().

## ◆ HVCC_ATOM

#define HVCC_ATOM QT_ATOM('h', 'v', 'c', 'C')

Referenced by parse_trak_atom().

## ◆ ILST_ATOM

#define ILST_ATOM QT_ATOM('i', 'l', 's', 't')

## ◆ IMA4_FOURCC

#define IMA4_FOURCC ME_FOURCC('i', 'm', 'a', '4')

Referenced by parse_trak_atom().

## ◆ IN24_FOURCC

#define IN24_FOURCC ME_FOURCC('i', 'n', '2', '4')

Referenced by parse_trak_atom().

## ◆ JUNK_ATOM

#define JUNK_ATOM QT_ATOM('j', 'u', 'n', 'k')

Referenced by load_moov_atom().

## ◆ KEYFRAMES_SIZE

#define KEYFRAMES_SIZE 1024

Referenced by qt_keyframes_size().

## ◆ LOG_MODULE

#define LOG_MODULE "demux_qt"

Referenced by demux_qt_send_headers().

## ◆ MAC3_FOURCC

#define MAC3_FOURCC ME_FOURCC('M', 'A', 'C', '3')

Referenced by parse_trak_atom().

## ◆ MAC6_FOURCC

#define MAC6_FOURCC ME_FOURCC('M', 'A', 'C', '6')

Referenced by parse_trak_atom().

## ◆ MAX_AUDIO_TRAKS

#define MAX_AUDIO_TRAKS 8

Referenced by demux_qt_send_chunk(), and demux_qt_send_headers().

## ◆ MAX_MOOV_SIZE

#define MAX_MOOV_SIZE (128 << 20)

Referenced by load_moov_atom(), and open_qt_file().

## ◆ MAX_PTS_DIFF

#define MAX_PTS_DIFF 100000

Referenced by demux_qt_send_chunk().

## ◆ MDAT_ATOM

#define MDAT_ATOM QT_ATOM('m', 'd', 'a', 't')

Referenced by fragment_scan(), and load_moov_atom().

## ◆ MDHD_ATOM

#define MDHD_ATOM QT_ATOM('m', 'd', 'h', 'd')

Referenced by parse_trak_atom().

## ◆ MEHD_ATOM

#define MEHD_ATOM QT_ATOM('m', 'e', 'h', 'd')

Referenced by parse_mvex_atom().

## ◆ META_ATOM

#define META_ATOM QT_ATOM('m', 'e', 't', 'a')

Referenced by atom_scan().

## ◆ MFHD_ATOM

#define MFHD_ATOM QT_ATOM('m', 'v', 'h', 'd')

Referenced by parse_moof_atom().

## ◆ MOOF_ATOM

#define MOOF_ATOM QT_ATOM('m', 'o', 'o', 'f')

Referenced by fragment_scan().

## ◆ MOOV_ATOM

#define MOOV_ATOM QT_ATOM('m', 'o', 'o', 'v')

Referenced by load_moov_atom(), and parse_moov_atom().

## ◆ MP4A_FOURCC

#define MP4A_FOURCC ME_FOURCC('m', 'p', '4', 'a')

Referenced by parse_trak_atom().

## ◆ MVEX_ATOM

#define MVEX_ATOM QT_ATOM('m', 'v', 'e', 'x')

Referenced by parse_moov_atom().

## ◆ MVHD_ATOM

#define MVHD_ATOM QT_ATOM('m', 'v', 'h', 'd')

Referenced by load_moov_atom(), and parse_moov_atom().

## ◆ NAM_ATOM

#define NAM_ATOM QT_ATOM(0xA9, 'n', 'a', 'm')

Referenced by parse_moov_atom().

## ◆ NI42_FOURCC

#define NI42_FOURCC ME_FOURCC('4', '2', 'n', 'i')

Referenced by parse_trak_atom().

## ◆ PALETTE_COUNT

#define PALETTE_COUNT 256

Referenced by parse_trak_atom().

## ◆ PICT_ATOM

#define PICT_ATOM QT_ATOM('P', 'I', 'C', 'T')

Referenced by load_moov_atom().

## ◆ PNOT_ATOM

#define PNOT_ATOM QT_ATOM('p', 'n', 'o', 't')

Referenced by load_moov_atom().

## ◆ QCLP_FOURCC

#define QCLP_FOURCC ME_FOURCC('Q', 'c', 'l', 'p')

Referenced by parse_trak_atom().

## ◆ QT_ATOM

#define QT_ATOM BE_FOURCC

## ◆ QTF_KEYFRAME

#define QTF_KEYFRAME | ( |  | f | ) | ((f)._ffs.bytes[7])

Referenced by build_frame_table(), demux_qt_seek(), demux_qt_send_chunk(), parse_moov_atom(), and parse_traf_atom().

## ◆ QTF_MEDIA_ID

#define QTF_MEDIA_ID | ( |  | f | ) | ((f)._ffs.bytes[6])

Referenced by build_frame_table(), demux_qt_send_chunk(), parse_moov_atom(), and parse_traf_atom().

## ◆ QTF_OFFSET

#define QTF_OFFSET | ( |  | f | ) | ((f)._ffs.offset & ~((uint64_t)0xffff << 48))

Referenced by binary_seek(), demux_qt_send_chunk(), demux_qt_send_headers(), and parse_moov_atom().

## ◆ QTIM_ATOM

#define QTIM_ATOM QT_ATOM('q', 't', 'i', 'm')

Referenced by parse_reference_atom().

## ◆ RAW_FOURCC

#define RAW_FOURCC ME_FOURCC('r', 'a', 'w', ' ')

Referenced by parse_trak_atom().

## ◆ RAW_MOOV_FILENAME

#define RAW_MOOV_FILENAME "moovatom.raw"

Referenced by dump_moov_atom().

## ◆ RDRF_ATOM

#define RDRF_ATOM QT_ATOM('r', 'd', 'r', 'f')

## ◆ RMDA_ATOM

#define RMDA_ATOM QT_ATOM('r', 'm', 'd', 'a')

Referenced by parse_moov_atom().

## ◆ RMDR_ATOM

#define RMDR_ATOM QT_ATOM('r', 'm', 'd', 'r')

Referenced by parse_reference_atom().

## ◆ RMRA_ATOM

#define RMRA_ATOM QT_ATOM('r', 'm', 'r', 'a')

## ◆ RMVC_ATOM

#define RMVC_ATOM QT_ATOM('r', 'm', 'v', 'c')

## ◆ SAMR_FOURCC

#define SAMR_FOURCC ME_FOURCC('s', 'a', 'm', 'r')

Referenced by parse_trak_atom().

## ◆ SIDX_ATOM

#define SIDX_ATOM QT_ATOM('s', 'i', 'd', 'x')

Referenced by fragment_scan().

## ◆ SKIP_ATOM

#define SKIP_ATOM QT_ATOM('s', 'k', 'i', 'p')

Referenced by load_moov_atom().

## ◆ SMHD_ATOM

#define SMHD_ATOM QT_ATOM('s', 'm', 'h', 'd')

Referenced by parse_trak_atom().

## ◆ SOWT_FOURCC

#define SOWT_FOURCC ME_FOURCC('s', 'o', 'w', 't')

Referenced by demux_qt_send_chunk(), and parse_trak_atom().

## ◆ STCO_ATOM

#define STCO_ATOM QT_ATOM('s', 't', 'c', 'o')

Referenced by parse_trak_atom().

## ◆ STSC_ATOM

#define STSC_ATOM QT_ATOM('s', 't', 's', 'c')

Referenced by parse_trak_atom().

## ◆ STSD_ATOM

#define STSD_ATOM QT_ATOM('s', 't', 's', 'd')

Referenced by parse_trak_atom().

## ◆ STSS_ATOM

#define STSS_ATOM QT_ATOM('s', 't', 's', 's')

Referenced by parse_trak_atom().

## ◆ STSZ_ATOM

#define STSZ_ATOM QT_ATOM('s', 't', 's', 'z')

Referenced by parse_trak_atom().

## ◆ STTS_ATOM

#define STTS_ATOM QT_ATOM('s', 't', 't', 's')

Referenced by parse_trak_atom().

## ◆ STZ2_ATOM

#define STZ2_ATOM QT_ATOM('s', 't', 'z', '2')

Referenced by parse_trak_atom().

## ◆ TFHD_ATOM

#define TFHD_ATOM QT_ATOM('t', 'f', 'h', 'd')

Referenced by parse_traf_atom().

## ◆ TKHD_ATOM

#define TKHD_ATOM QT_ATOM('t', 'k', 'h', 'd')

Referenced by parse_trak_atom().

## ◆ TOO_ATOM

#define TOO_ATOM QT_ATOM(0xA9, 't', 'o', 'o')

## ◆ TRAF_ATOM

#define TRAF_ATOM QT_ATOM('t', 'r', 'a', 'f')

Referenced by parse_moof_atom().

## ◆ TRAK_ATOM

#define TRAK_ATOM QT_ATOM('t', 'r', 'a', 'k')

Referenced by parse_moov_atom().

## ◆ TREX_ATOM

#define TREX_ATOM QT_ATOM('t', 'r', 'e', 'x')

Referenced by parse_mvex_atom().

## ◆ TRUN_ATOM

#define TRUN_ATOM QT_ATOM('t', 'r', 'u', 'n')

Referenced by parse_traf_atom().

## ◆ TWOS_FOURCC

#define TWOS_FOURCC ME_FOURCC('t', 'w', 'o', 's')

Referenced by demux_qt_send_chunk(), and parse_trak_atom().

## ◆ UDTA_ATOM

#define UDTA_ATOM QT_ATOM('u', 'd', 't', 'a')

## ◆ ULAW_FOURCC

#define ULAW_FOURCC ME_FOURCC('u', 'l', 'a', 'w')

Referenced by parse_trak_atom().

## ◆ URL__ATOM

#define URL__ATOM QT_ATOM('u', 'r', 'l', ' ')

Referenced by parse_reference_atom().

## ◆ VMHD_ATOM

#define VMHD_ATOM QT_ATOM('v', 'm', 'h', 'd')

Referenced by parse_trak_atom().

## ◆ WAVE_ATOM

#define WAVE_ATOM QT_ATOM('w', 'a', 'v', 'e')

Referenced by parse_trak_atom().

## ◆ WIDE_ATOM

#define WIDE_ATOM QT_ATOM('w', 'i', 'd', 'e')

Referenced by load_moov_atom().

## ◆ WRITE_BE_32

#define WRITE_BE_32 | ( |  | v,
|  |  | p )

Value:
{ \
uint8_t *wp = (uint8_t *)(p); \
uint32_t wv = (v); \
wp[0] = wv >> 24; \
wp[1] = wv >> 16; \
wp[2] = wv >> 8; \
wp[3] = wv; \
}
v
uint32_t v
Definition utils.c:1157

Referenced by atom_scan(), and open_qt_file().

## ◆ WRT_ATOM

#define WRT_ATOM QT_ATOM(0xA9, 'w', 'r', 't')

Referenced by parse_moov_atom().

## Typedef Documentation

## ◆ qt_atom

typedef unsigned int qt_atom

## Enumeration Type Documentation

## ◆ media_type

enum media_type

Enumerator
MEDIA_AUDIO |
MEDIA_VIDEO |
MEDIA_OTHER |

## ◆ qt_error

enum qt_error

Enumerator
QT_OK |
QT_FILE_READ_ERROR |
QT_NO_MEMORY |
QT_NOT_A_VALID_FILE |
QT_NO_MOOV_ATOM |
QT_NO_ZLIB |
QT_ZLIB_ERROR |
QT_HEADER_TROUBLE |
QT_DRM_NOT_SUPPORTED |

## Function Documentation

## ◆ atom_scan()

static int atom_scan | ( | uint8_t * | atom,
|  | int | depth,
|  | const uint32_t * | types,
|  | uint8_t ** | found,
|  | unsigned int * | sizes )
| static

<< list of atom sizes to fill in.

Parameters

  atom | << return value: # of missing atoms.
  depth | << the atom to parse.
  types | << how many levels of hierarchy to examine.
  found | << zero terminated list of interesting atom types.
  sizes | << list of atom pointers to fill in.

References _X_BE_32, atom_scan(), META_ATOM, NULL, WRITE_BE_32, and xine_hexdump().

Referenced by atom_scan(), parse_moov_atom(), parse_reference_atom(), and parse_trak_atom().

## ◆ binary_seek()

static int binary_seek | ( | demux_qt_t * | this,
|  | qt_trak * | trak,
|  | off_t | start_pos,
|  | int | start_time )
| static

References qt_trak::current_frame, DEMUX_OK, qt_trak::frame_count, qt_trak::frames, qt_frame::pts, QT_OK, and QTF_OFFSET.

Referenced by demux_qt_seek().

## ◆ build_frame_table()

static qt_error build_frame_table | ( | qt_trak * | trak,
|  | unsigned int | global_timescale )
| static

References qt_frame::_ffs, _X_BE_32, _X_BE_64, properties_t::audio, properties_t::bytes_per_frame, properties_t::channels, qt_trak::chunk_offset_count, qt_trak::chunk_offset_table32, qt_trak::chunk_offset_table64, qt_trak::current_frame, qt_trak::edit_list_count, qt_trak::edit_list_table, sample_to_chunk_table_t::first_chunk, qt_trak::fragment_dts, qt_trak::frame_count, qt_trak::frames, qt_trak::keyframes_size, MEDIA_AUDIO, sample_to_chunk_table_t::media_id, edit_list_table_t::media_time, MEDIA_VIDEO, NULL, qt_frame::offset, qt_trak::properties, qt_frame::pts, qt_frame::ptsoffs, qt_trak::ptsoffs_mul, qt_keyframes_simple_add(), qt_keyframes_size(), QT_NO_MEMORY, QT_OK, QTF_KEYFRAME, QTF_MEDIA_ID, properties_t::s, qt_trak::sample_size, qt_trak::sample_size_bytes, qt_trak::sample_size_count, qt_trak::sample_size_shift, qt_trak::sample_size_table, qt_trak::sample_to_chunk_count, qt_trak::sample_to_chunk_table, qt_trak::samples, sample_to_chunk_table_t::samples_per_chunk, properties_t::samples_per_frame, scale_int_do(), qt_trak::si, qt_frame::size, qt_trak::stsd_atoms, qt_trak::stsd_atoms_count, qt_trak::sync_sample_count, qt_trak::sync_sample_table, qt_trak::time_to_sample_count, qt_trak::time_to_sample_table, qt_trak::timeoffs_to_sample_count, qt_trak::timeoffs_to_sample_table, qt_trak::timescale, edit_list_table_t::track_duration, qt_trak::type, v, and properties_t::vbr.

Referenced by parse_moov_atom().

## ◆ create_qt_info()

static qt_info * create_qt_info | ( | demux_qt_t * | this | ) |
| static

References reset_qt_info().

Referenced by open_plugin().

## ◆ demux_qt_dispose()

static void demux_qt_dispose | ( | demux_plugin_t * | this_gen | ) |
| static

References free_qt_info().

Referenced by open_plugin().

## ◆ demux_qt_get_capabilities()

static uint32_t demux_qt_get_capabilities | ( | demux_plugin_t * | this_gen | ) |
| static

References DEMUX_CAP_AUDIOLANG, and DEMUX_CAP_VIDEO_TIME.

Referenced by open_plugin().

## ◆ demux_qt_get_optional_data()

static int demux_qt_get_optional_data | ( | demux_plugin_t * | this_gen,
|  | void * | data,
|  | int | data_type )
| static

References qt_trak::current_frame, DEMUX_OPTIONAL_DATA_AUDIOLANG, DEMUX_OPTIONAL_DATA_VIDEO_TIME, DEMUX_OPTIONAL_SUCCESS, DEMUX_OPTIONAL_UNSUPPORTED, qt_trak::frames, NULL, qt_frame::pts, and qt_frame::ptsoffs.

Referenced by open_plugin().

## ◆ demux_qt_get_status()

static int demux_qt_get_status | ( | demux_plugin_t * | this_gen | ) |
| static

Referenced by open_plugin().

## ◆ demux_qt_get_stream_length()

static int demux_qt_get_stream_length | ( | demux_plugin_t * | this_gen | ) |
| static

Referenced by open_plugin().

## ◆ demux_qt_init_class()

void * demux_qt_init_class | ( | xine_t * | xine,
|  | const void * | data )

References demux_plugin_s::dispose, N_, NULL, demux_class_s::open_plugin, and open_plugin().

## ◆ demux_qt_load_fragment_index()

static int demux_qt_load_fragment_index | ( | demux_qt_t * | this,
|  | const uint8_t * | head,
|  | uint32_t | hsize )
| static

References _X_BE_32, input(), INPUT_OPTIONAL_DATA_FRAGLIST, INPUT_OPTIONAL_SUCCESS, NULL, v, xine_mfrag_get_frag_count(), xine_mfrag_get_index_start(), xine_mfrag_set_index_frag(), XINE_VERBOSITY_DEBUG, and xprintf.

Referenced by fragment_scan().

## ◆ demux_qt_seek()

static int demux_qt_seek | ( | demux_plugin_t * | this_gen,
|  | off_t | start_pos,
|  | int | start_time,
|  | int | playing )
| static

References _x_demux_flush_engine(), binary_seek(), qt_trak::current_frame, DEMUX_OK, qt_trak::frame_count, qt_trak::frames, input(), INPUT_CAP_SEEKABLE, INPUT_CAP_SLOW_SEEKABLE, NULL, qt_frame::pts, and QTF_KEYFRAME.

Referenced by open_plugin().

## ◆ demux_qt_send_chunk()

static int demux_qt_send_chunk | ( | demux_plugin_t * | this_gen | ) |
| static

References _x_demux_control_newpts(), _x_demux_send_mrl_reference(), _x_stream_info_set(), properties_t::audio, qt_trak::audio_index, properties_t::bits, BUF_AUDIO_LPCM_BE, BUF_AUDIO_LPCM_LE, BUF_FLAG_FRAME_END, BUF_FLAG_FRAMERATE, BUF_FLAG_KEYFRAME, BUF_FLAG_SEEK, properties_t::codec_buftype, properties_t::codec_fourcc, buf_element_s::content, qt_trak::current_frame, buf_element_s::decoder_flags, buf_element_s::decoder_info, DEMUX_FINISHED, DEMUX_OK, properties_t::edit_list_compensation, buf_element_s::extra_info, fragment_scan(), qt_trak::frame_count, qt_trak::frames, buf_element_s::free_buffer, input(), extra_info_s::input_normpos, extra_info_s::input_time, MAX_AUDIO_TRAKS, MAX_PTS_DIFF, buf_element_s::max_size, properties_t::media_id, MEDIA_VIDEO, NULL, qt_trak::properties, buf_element_s::pts, qt_frame::pts, qt_frame::ptsoffs, QT_DRM_NOT_SUPPORTED, qt_msec_2_normpos(), qt_pts_2_msecs(), qt_update_duration(), QTF_KEYFRAME, QTF_MEDIA_ID, QTF_OFFSET, properties_t::s, buf_element_s::size, qt_frame::size, SOWT_FOURCC, TWOS_FOURCC, buf_element_s::type, qt_trak::type, properties_t::video, XINE_STREAM_INFO_FRAME_DURATION, XINE_VERBOSITY_DEBUG, and xprintf.

Referenced by open_plugin().

## ◆ demux_qt_send_headers()

static void demux_qt_send_headers | ( | demux_plugin_t * | this_gen | ) |
| static

References _x_demux_control_start(), _x_fourcc_to_buf_video(), _x_meta_info_set(), _x_report_audio_format_tag(), _x_report_video_fourcc(), _x_stream_info_set(), properties_t::audio, qt_trak::audio_index, AVC1_FOURCC, properties_t::bits, BUF_AUDIO_UNKNOWN, BUF_FLAG_FRAME_END, BUF_FLAG_HEADER, BUF_FLAG_SPECIAL, BUF_FLAG_STDHEADER, BUF_SPECIAL_DECODER_CONFIG, BUF_SPECIAL_PALETTE, BUF_SPECIAL_STSD_ATOM, BUF_VIDEO_MPEG4, BUF_VIDEO_MSMPEG4_V1, BUF_VIDEO_UNKNOWN, properties_t::bytes_per_frame, properties_t::channels, properties_t::codec_buftype, properties_t::codec_fourcc, buf_element_s::content, properties_t::decoder_config, properties_t::decoder_config_len, buf_element_s::decoder_flags, buf_element_s::decoder_info, buf_element_s::decoder_info_ptr, DEMUX_OK, properties_t::depth, qt_trak::frame_count, qt_trak::frames, properties_t::height, HEV1_FOURCC, HEVC_FOURCC, HVC1_FOURCC, LOG_MODULE, MAX_AUDIO_TRAKS, buf_element_s::max_size, MEDIA_AUDIO, NULL, properties_t::palette, properties_t::palette_count, qt_trak::properties, properties_t::properties_atom, properties_t::properties_atom_size, QTF_OFFSET, properties_t::s, properties_t::sample_rate, properties_t::samples_per_frame, buf_element_s::size, qt_frame::size, buf_element_s::type, qt_trak::type, properties_t::vbr, properties_t::video, properties_t::wave, properties_t::wave_size, properties_t::width, XINE_META_INFO_ALBUM, XINE_META_INFO_ARTIST, XINE_META_INFO_COMMENT, XINE_META_INFO_GENRE, XINE_META_INFO_TITLE, XINE_META_INFO_YEAR, XINE_STREAM_INFO_AUDIO_BITRATE, XINE_STREAM_INFO_AUDIO_BITS, XINE_STREAM_INFO_AUDIO_CHANNELS, XINE_STREAM_INFO_AUDIO_FOURCC, XINE_STREAM_INFO_AUDIO_SAMPLERATE, XINE_STREAM_INFO_HAS_AUDIO, XINE_STREAM_INFO_HAS_VIDEO, XINE_STREAM_INFO_VIDEO_FOURCC, XINE_STREAM_INFO_VIDEO_HEIGHT, and XINE_STREAM_INFO_VIDEO_WIDTH.

Referenced by open_plugin().

## ◆ dump_moov_atom()

static void dump_moov_atom | ( | uint8_t * | moov_atom,
|  | int | moov_atom_size )
| inlinestatic

References RAW_MOOV_FILENAME.

Referenced by open_qt_file().

## ◆ find_embedded_atoms()

static void find_embedded_atoms | ( | uint8_t * | atom,
|  | const uint32_t * | types,
|  | uint8_t ** | found,
|  | uint32_t * | sizes )
| static

References _X_BE_32, NULL, and v.

Referenced by parse_trak_atom().

## ◆ find_trak_by_id()

static qt_trak * find_trak_by_id | ( | demux_qt_t * | this,
|  | int | id )
| static

References NULL.

Referenced by parse_mvex_atom(), and parse_traf_atom().

## ◆ fragment_scan()

static int fragment_scan | ( | demux_qt_t * | this | ) |
| static

References _X_BE_32, _X_BE_64, demux_qt_load_fragment_index(), input(), INPUT_CAP_SEEKABLE, MDAT_ATOM, MOOF_ATOM, parse_moof_atom(), and SIDX_ATOM.

Referenced by demux_qt_send_chunk(), and parse_moov_atom().

## ◆ free_qt_info()

static void free_qt_info | ( | demux_qt_t * | this | ) |
| static

References MEDIA_AUDIO, and reset_qt_info().

Referenced by demux_qt_dispose(), and open_plugin().

## ◆ info_string_from_atom()

static void info_string_from_atom | ( | uint8_t * | atom,
|  | char ** | target )
| static

References _X_BE_16, _X_BE_32, DATA_ATOM, NULL, and string_size.

Referenced by parse_moov_atom().

## ◆ load_moov_atom()

static qt_error load_moov_atom | ( | input_plugin_t * | input,
|  | uint8_t ** | moov_atom,
|  | off_t * | moov_atom_offset )
| static

References _X_BE_32, _X_BE_64, CMOV_ATOM, FREE_ATOM, FTYP_ATOM, input(), INPUT_CAP_SEEKABLE, INPUT_CAP_SLOW_SEEKABLE, INPUT_OPTIONAL_DATA_PREVIEW, JUNK_ATOM, MAX_MOOV_SIZE, MAX_PREVIEW_SIZE, MDAT_ATOM, MOOV_ATOM, MVHD_ATOM, PICT_ATOM, PNOT_ATOM, QT_FILE_READ_ERROR, QT_NO_MEMORY, QT_NO_MOOV_ATOM, QT_NOT_A_VALID_FILE, QT_OK, SKIP_ATOM, type, and WIDE_ATOM.

Referenced by open_plugin().

## ◆ mp4_read_descr_len()

static int mp4_read_descr_len | ( | uint8_t * | s,
|  | uint32_t * | length )
| static

Referenced by parse_trak_atom().

## ◆ open_plugin()

static demux_plugin_t * open_plugin | ( | demux_class_t * | class_gen,
|  | xine_stream_t * | stream,
|  | input_plugin_t * | input )
| static

References _, _X_BE_32, _x_message(), bandwidths, xine_stream_s::content_detection_method, create_qt_info(), DEMUX_FINISHED, demux_qt_dispose(), demux_qt_get_capabilities(), demux_qt_get_optional_data(), demux_qt_get_status(), demux_qt_get_stream_length(), demux_qt_seek(), demux_qt_send_chunk(), demux_qt_send_headers(), free_qt_info(), input_plugin_s::get_optional_data, input(), INPUT_CAP_BLOCK, INPUT_OPTIONAL_DATA_PTSOFFS, load_moov_atom(), METHOD_BY_CONTENT, METHOD_BY_MRL, METHOD_EXPLICIT, NULL, xine_cfg_entry_s::num_value, open_qt_file(), QT_DRM_NOT_SUPPORTED, QT_OK, xine_stream_s::xine, xine_config_lookup_entry(), XINE_MSG_ENCRYPTED_SOURCE, XINE_VERBOSITY_DEBUG, and xprintf.

Referenced by demux_qt_init_class().

## ◆ open_qt_file()

static qt_error open_qt_file | ( | demux_qt_t * | this,
|  | uint8_t * | moov_atom,
|  | off_t | moov_atom_offset )
| static

References _X_BE_32, CMOV_ATOM, dump_moov_atom(), input(), MAX_MOOV_SIZE, NULL, parse_moov_atom(), QT_NO_MEMORY, QT_OK, QT_ZLIB_ERROR, and WRITE_BE_32.

Referenced by open_plugin().

## ◆ parse_moof_atom()

static int parse_moof_atom | ( | demux_qt_t * | this,
|  | uint8_t * | moof_atom,
|  | int | moofsize,
|  | off_t | moofpos )
| static

References _X_BE_32, MFHD_ATOM, parse_traf_atom(), and TRAF_ATOM.

Referenced by fragment_scan().

## ◆ parse_moov_atom()

static void parse_moov_atom | ( | demux_qt_t * | this,
|  | uint8_t * | moov_atom )
| static

References _X_BE_32, _x_keyframes_set(), ALB_ATOM, ART_ATOM, atom_scan(), properties_t::audio, properties_t::bits, build_frame_table(), properties_t::channels, CMT_ATOM, properties_t::codec_str, CPY_ATOM, DAY_ATOM, DES_ATOM, fragment_scan(), qt_trak::frame_count, qt_trak::frames, FREE_ATOM, GEN_ATOM, properties_t::height, info_string_from_atom(), qt_trak::keyframes_list, qt_trak::keyframes_size, qt_trak::keyframes_used, MEDIA_AUDIO, MEDIA_VIDEO, MOOV_ATOM, xine_keyframes_entry_t::msecs, MVEX_ATOM, MVHD_ATOM, NAM_ATOM, xine_keyframes_entry_t::normpos, NULL, parse_mvex_atom(), parse_mvhd_atom(), parse_reference_atom(), parse_trak_atom(), qt_trak::properties, qt_frame::pts, qt_frame::ptsoffs, qt_msec_2_normpos(), QT_NO_MEMORY, QT_NO_MOOV_ATOM, QT_OK, qt_update_duration(), QTF_KEYFRAME, QTF_MEDIA_ID, QTF_OFFSET, RMDA_ATOM, properties_t::s, properties_t::sample_rate, qt_frame::size, TRAK_ATOM, qt_trak::type, properties_t::video, properties_t::width, WRT_ATOM, XINE_VERBOSITY_DEBUG, and xprintf.

Referenced by open_qt_file().

## ◆ parse_mvex_atom()

static int parse_mvex_atom | ( | demux_qt_t * | this,
|  | uint8_t * | mvex_atom,
|  | unsigned int | bufsize )
| static

References _X_BE_32, qt_trak::default_sample_description_index, qt_trak::default_sample_duration, qt_trak::default_sample_flags, qt_trak::default_sample_size, qt_trak::delay_index, qt_trak::edit_list_count, qt_trak::edit_list_table, find_trak_by_id(), qt_trak::fragment_dts, qt_trak::fragment_frames, qt_trak::frame_count, edit_list_table_t::media_time, MEHD_ATOM, qt_trak::timescale, edit_list_table_t::track_duration, and TREX_ATOM.

Referenced by parse_moov_atom().

## ◆ parse_mvhd_atom()

static void parse_mvhd_atom | ( | demux_qt_t * | this,
|  | uint8_t * | mvhd_atom )
| static

References _X_BE_32.

Referenced by parse_moov_atom().

## ◆ parse_reference_atom()

static qt_error parse_reference_atom | ( | demux_qt_t * | this,
|  | uint8_t * | ref_atom,
|  | char * | base_mrl )
| static

References _X_BE_16, _X_BE_32, atom_scan(), reference_t::data_rate, NULL, QT_NOT_A_VALID_FILE, QT_OK, QTIM_ATOM, reference_t::qtim_version, RMDR_ATOM, string_size, reference_t::url, and URL__ATOM.

Referenced by parse_moov_atom().

## ◆ parse_traf_atom()

static int parse_traf_atom | ( | demux_qt_t * | this,
|  | uint8_t * | traf_atom,
|  | unsigned int | trafsize,
|  | off_t | moofpos )
| static

References qt_frame::_ffs, _X_BE_32, _X_BE_64, qt_trak::default_sample_description_index, qt_trak::default_sample_duration, qt_trak::default_sample_flags, qt_trak::default_sample_size, qt_trak::delay_index, qt_trak::edit_list_table, find_trak_by_id(), qt_trak::fragment_dts, qt_trak::fragment_frames, qt_trak::frame_count, qt_trak::frames, qt_trak::keyframes_used, edit_list_table_t::media_time, MEDIA_VIDEO, NULL, qt_frame::offset, qt_frame::pts, qt_frame::ptsoffs, qt_trak::ptsoffs_mul, qt_keyframes_simple_add(), qt_keyframes_size(), QTF_KEYFRAME, QTF_MEDIA_ID, scale_int_do(), qt_trak::si, qt_frame::size, TFHD_ATOM, TRUN_ATOM, and qt_trak::type.

Referenced by parse_moof_atom().

## ◆ parse_trak_atom()

static qt_error parse_trak_atom | ( | qt_trak * | trak,
|  | uint8_t * | trak_atom )
| static

<< note: using this as default.

References _X_BE_16, _X_BE_24, _X_BE_32, _X_BE_64, _x_formattag_to_buf_audio(), _X_ME_32, _x_tag32_me2str(), _x_waveformatex_le2me(), AC_3_FOURCC, ALAC_FOURCC, ALAW_FOURCC, atom_scan(), properties_t::audio, AVCC_ATOM, palette_entry_s::b, properties_t::bits, BUF_AUDIO_A52, BUF_AUDIO_AAC, BUF_AUDIO_DTS, BUF_AUDIO_EAC3, BUF_AUDIO_MPEG, BUF_AUDIO_QCLP, BUF_AUDIO_VORBIS, properties_t::bytes_per_frame, properties_t::bytes_per_packet, properties_t::bytes_per_sample, properties_t::channels, qt_trak::chunk_offset_count, qt_trak::chunk_offset_table32, qt_trak::chunk_offset_table64, CO64_ATOM, properties_t::codec_buftype, properties_t::codec_fourcc, properties_t::codec_str, CTTS_ATOM, qt_trak::current_frame, properties_t::decoder_config, properties_t::decoder_config_len, qt_trak::delay_index, properties_t::depth, DRMS_FOURCC, EAC3_FOURCC, qt_trak::edit_list_count, qt_trak::edit_list_table, ELST_ATOM, ENDA_ATOM, ESDS_ATOM, find_embedded_atoms(), sample_to_chunk_table_t::first_chunk, qt_trak::flags, qt_trak::frame_count, qt_trak::frames, FRMA_ATOM, palette_entry_s::g, properties_t::height, HVCC_ATOM, qt_trak::id, IMA4_FOURCC, IN24_FOURCC, qt_trak::keyframes_list, qt_trak::keyframes_size, qt_trak::keyframes_used, qt_trak::lang, MAC3_FOURCC, MAC6_FOURCC, MDHD_ATOM, MEDIA_AUDIO, properties_t::media_id, sample_to_chunk_table_t::media_id, MEDIA_OTHER, edit_list_table_t::media_time, MEDIA_VIDEO, mp4_read_descr_len(), MP4A_FOURCC, name, NI42_FOURCC, NULL, properties_t::object_type_id, properties_t::palette, PALETTE_COUNT, properties_t::palette_count, qt_trak::properties, properties_t::properties_atom, properties_t::properties_atom_size, QCLP_FOURCC, qt_default_palette_16, qt_default_palette_256, qt_default_palette_4, QT_DRM_NOT_SUPPORTED, QT_HEADER_TROUBLE, QT_NO_MEMORY, QT_OK, palette_entry_s::r, RAW_FOURCC, properties_t::s, properties_t::sample_rate, qt_trak::sample_size, qt_trak::sample_size_bytes, qt_trak::sample_size_count, qt_trak::sample_size_shift, qt_trak::sample_size_table, qt_trak::sample_to_chunk_count, qt_trak::sample_to_chunk_table, qt_trak::samples, sample_to_chunk_table_t::samples_per_chunk, properties_t::samples_per_frame, properties_t::samples_per_packet, SAMR_FOURCC, scale_int_init(), qt_trak::si, SMHD_ATOM, SOWT_FOURCC, STCO_ATOM, STSC_ATOM, STSD_ATOM, qt_trak::stsd_atoms, qt_trak::stsd_atoms_count, STSS_ATOM, STSZ_ATOM, STTS_ATOM, STZ2_ATOM, qt_trak::sync_sample_count, qt_trak::sync_sample_table, qt_trak::time_to_sample_count, qt_trak::time_to_sample_table, qt_trak::timeoffs_to_sample_count, qt_trak::timeoffs_to_sample_table, qt_trak::timescale, TKHD_ATOM, edit_list_table_t::track_duration, TWOS_FOURCC, qt_trak::type, ULAW_FOURCC, properties_t::vbr, properties_t::video, VMHD_ATOM, properties_t::wave, WAVE_ATOM, properties_t::wave_size, and properties_t::width.

Referenced by parse_moov_atom().

## ◆ qt_keyframes_simple_add()

static void qt_keyframes_simple_add | ( | qt_trak * | trak,
|  | qt_frame * | f )
| static

References qt_trak::keyframes_list, qt_trak::keyframes_size, qt_trak::keyframes_used, xine_keyframes_entry_t::msecs, qt_frame::pts, and qt_pts_2_msecs().

Referenced by build_frame_table(), and parse_traf_atom().

## ◆ qt_keyframes_size()

static void qt_keyframes_size | ( | qt_trak * | trak,
|  | uint32_t | n )
| static

References qt_trak::keyframes_list, KEYFRAMES_SIZE, and qt_trak::keyframes_size.

Referenced by build_frame_table(), and parse_traf_atom().

## ◆ qt_msec_2_normpos()

static int32_t qt_msec_2_normpos | ( | demux_qt_t * | this,
|  | int32_t | msec )
| static

Referenced by demux_qt_send_chunk(), and parse_moov_atom().

## ◆ qt_normpos_init()

static void qt_normpos_init | ( | demux_qt_t * | this | ) |
| static

Referenced by qt_update_duration().

## ◆ qt_pts_2_msecs()

static int32_t qt_pts_2_msecs | ( | int64_t | pts | ) |
| static

Referenced by demux_qt_send_chunk(), qt_keyframes_simple_add(), and qt_update_duration().

## ◆ qt_update_duration()

static void qt_update_duration | ( | demux_qt_t * | this | ) |
| static

References qt_trak::frame_count, qt_trak::frames, qt_frame::pts, qt_normpos_init(), and qt_pts_2_msecs().

Referenced by demux_qt_send_chunk(), and parse_moov_atom().

## ◆ reset_qt_info()

static void reset_qt_info | ( | demux_qt_t * | this | ) |
| static

References NULL, and QT_OK.

Referenced by create_qt_info(), and free_qt_info().

## ◆ scale_int_do()

static void scale_int_do | ( | scale_int_t * | scale,
|  | int64_t * | v )
| static

References scale_int_t::den, scale_int_t::num, and v.

Referenced by build_frame_table(), and parse_traf_atom().

## ◆ scale_int_init()

static void scale_int_init | ( | scale_int_t * | scale,
|  | uint32_t | num,
|  | uint32_t | den )
| static

References scale_int_t::den, and scale_int_t::num.

Referenced by parse_trak_atom().

## ◆ XINE_FORMAT_PRINTF()

static void XINE_FORMAT_PRINTF | ( | 1 | ,
|  | 2 | )
| inlinestatic

## Variable Documentation

## ◆ bandwidths

const uint32_t bandwidths[]
| static

Initial value:
= {
14400, 19200, 28800, 33600, 34430, 57600,
115200, 262200, 393216, 524300, 1544000, 10485800
}

Network bandwidth, cribbed from src/input/input_mms.c.

Referenced by open_plugin().