FFmpeg
Data Structures | Macros | Enumerations | Functions | Variables
wtvdec.c File Reference
#include <inttypes.h>
#include <time.h>
#include "libavutil/channel_layout.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/intfloat.h"
#include "libavutil/time_internal.h"
#include "avformat.h"
#include "demux.h"
#include "internal.h"
#include "wtv.h"
#include "mpegts.h"

Go to the source code of this file.

Data Structures

struct  WtvFile
 
struct  WtvStream
 
struct  WtvContext
 

Macros

#define PRI_PRETTY_GUID   "%08"PRIx32"-%04"PRIx16"-%04"PRIx16"-%02x%02x%02x%02x%02x%02x%02x%02x"
 
#define ARG_PRETTY_GUID(g)   AV_RL32(g),AV_RL16(g+4),AV_RL16(g+6),g[8],g[9],g[10],g[11],g[12],g[13],g[14],g[15]
 
#define LEN_PRETTY_GUID   35
 
#define wtvfile_open(s, buf, buf_size, filename)   wtvfile_open2(s, buf, buf_size, filename, sizeof(filename))
 

Enumerations

enum  { SEEK_TO_DATA = 0, SEEK_TO_PTS }
 

Functions

static int64_t seek_by_sector (AVIOContext *pb, int64_t sector, int64_t offset)
 
static int wtvfile_read_packet (void *opaque, uint8_t *buf, int buf_size)
 
static int64_t wtvfile_seek (void *opaque, int64_t offset, int whence)
 
static int read_ints (AVIOContext *pb, uint32_t *data, int count)
 read non-zero integers (le32) from input stream More...
 
static AVIOContextwtvfile_open_sector (unsigned first_sector, uint64_t length, int depth, AVFormatContext *s)
 Open file. More...
 
static AVIOContextwtvfile_open2 (AVFormatContext *s, const uint8_t *buf, int buf_size, const uint8_t *filename, int filename_size)
 Open file using filename. More...
 
static void wtvfile_close (AVIOContext *pb)
 Close file opened with wtvfile_open_sector(), or wtv_open() More...
 
static int read_probe (const AVProbeData *p)
 
static int filetime_to_iso8601 (char *buf, int buf_size, int64_t value)
 Convert win32 FILETIME to ISO-8601 string. More...
 
static int crazytime_to_iso8601 (char *buf, int buf_size, int64_t value)
 Convert crazy time (100ns since 1 Jan 0001) to ISO-8601 string. More...
 
static int oledate_to_iso8601 (char *buf, int buf_size, int64_t value)
 Convert OLE DATE to ISO-8601 string. More...
 
static void get_attachment (AVFormatContext *s, AVIOContext *pb, int length)
 
static void get_tag (AVFormatContext *s, AVIOContext *pb, const char *key, int type, int length)
 
static void parse_legacy_attrib (AVFormatContext *s, AVIOContext *pb)
 Parse metadata entries. More...
 
static int parse_videoinfoheader2 (AVFormatContext *s, AVStream *st)
 parse VIDEOINFOHEADER2 structure More...
 
static void parse_mpeg1waveformatex (AVStream *st)
 Parse MPEG1WAVEFORMATEX extradata structure. More...
 
static AVStreamnew_stream (AVFormatContext *s, AVStream *st, int sid, int codec_type)
 Initialise stream. More...
 
static AVStreamparse_media_type (AVFormatContext *s, AVStream *st, int sid, ff_asf_guid mediatype, ff_asf_guid subtype, ff_asf_guid formattype, uint64_t size)
 parse Media Type structure and populate stream More...
 
static int recover (WtvContext *wtv, uint64_t broken_pos)
 Try to seek over a broken chunk. More...
 
static int parse_chunks (AVFormatContext *s, int mode, int64_t seekts, int *len_ptr)
 Parse WTV chunks. More...
 
static int read_header (AVFormatContext *s)
 
static int read_packet (AVFormatContext *s, AVPacket *pkt)
 
static int read_seek (AVFormatContext *s, int stream_index, int64_t ts, int flags)
 
static int read_close (AVFormatContext *s)
 

Variables

static const ff_asf_guid EVENTID_SubtitleSpanningEvent
 
static const ff_asf_guid EVENTID_LanguageSpanningEvent
 
static const ff_asf_guid EVENTID_AudioDescriptorSpanningEvent
 
static const ff_asf_guid EVENTID_CtxADescriptorSpanningEvent
 
static const ff_asf_guid EVENTID_CSDescriptorSpanningEvent
 
static const ff_asf_guid EVENTID_DVBScramblingControlSpanningEvent
 
static const ff_asf_guid EVENTID_StreamIDSpanningEvent
 
static const ff_asf_guid EVENTID_TeletextSpanningEvent
 
static const ff_asf_guid EVENTID_AudioTypeSpanningEvent
 
static const ff_asf_guid mediasubtype_mpeg1payload
 
static const ff_asf_guid mediatype_mpeg2_sections
 
static const ff_asf_guid mediatype_mpeg2_pes
 
static const ff_asf_guid mediatype_mstvcaption
 
static const ff_asf_guid mediasubtype_dvb_subtitle
 
static const ff_asf_guid mediasubtype_teletext
 
static const ff_asf_guid mediasubtype_dtvccdata
 
static const ff_asf_guid mediasubtype_mpeg2_sections
 
const FFInputFormat ff_wtv_demuxer
 

Detailed Description

Windows Television (WTV) demuxer

Author
Peter Ross pross.nosp@m.@xvi.nosp@m.d.org

Definition in file wtvdec.c.

Macro Definition Documentation

◆ PRI_PRETTY_GUID

#define PRI_PRETTY_GUID   "%08"PRIx32"-%04"PRIx16"-%04"PRIx16"-%02x%02x%02x%02x%02x%02x%02x%02x"

Definition at line 42 of file wtvdec.c.

◆ ARG_PRETTY_GUID

#define ARG_PRETTY_GUID (   g)    AV_RL32(g),AV_RL16(g+4),AV_RL16(g+6),g[8],g[9],g[10],g[11],g[12],g[13],g[14],g[15]

Definition at line 44 of file wtvdec.c.

◆ LEN_PRETTY_GUID

#define LEN_PRETTY_GUID   35

Definition at line 46 of file wtvdec.c.

◆ wtvfile_open

#define wtvfile_open (   s,
  buf,
  buf_size,
  filename 
)    wtvfile_open2(s, buf, buf_size, filename, sizeof(filename))

Definition at line 302 of file wtvdec.c.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
SEEK_TO_DATA 
SEEK_TO_PTS 

Definition at line 740 of file wtvdec.c.

Function Documentation

◆ seek_by_sector()

static int64_t seek_by_sector ( AVIOContext pb,
int64_t  sector,
int64_t  offset 
)
static

Definition at line 64 of file wtvdec.c.

Referenced by read_header(), wtvfile_open_sector(), wtvfile_read_packet(), and wtvfile_seek().

◆ wtvfile_read_packet()

static int wtvfile_read_packet ( void *  opaque,
uint8_t *  buf,
int  buf_size 
)
static
Returns
bytes read, AVERROR_EOF on end of file, or <0 on error

Definition at line 72 of file wtvdec.c.

Referenced by wtvfile_open_sector().

◆ wtvfile_seek()

static int64_t wtvfile_seek ( void *  opaque,
int64_t  offset,
int  whence 
)
static
Returns
position (or file length)

Definition at line 110 of file wtvdec.c.

Referenced by wtvfile_open_sector().

◆ read_ints()

static int read_ints ( AVIOContext pb,
uint32_t *  data,
int  count 
)
static

read non-zero integers (le32) from input stream

Parameters
pb
[out]datadestination
countmaximum number of integers to read
Returns
total number of integers read

Definition at line 136 of file wtvdec.c.

Referenced by wtvfile_open_sector().

◆ wtvfile_open_sector()

static AVIOContext* wtvfile_open_sector ( unsigned  first_sector,
uint64_t  length,
int  depth,
AVFormatContext s 
)
static

Open file.

Parameters
first_sectorFirst sector
lengthLength of file (bytes)
depthFile allocation table depth
Returns
NULL on error

Definition at line 153 of file wtvdec.c.

Referenced by wtvfile_open2().

◆ wtvfile_open2()

static AVIOContext* wtvfile_open2 ( AVFormatContext s,
const uint8_t *  buf,
int  buf_size,
const uint8_t *  filename,
int  filename_size 
)
static

Open file using filename.

Parameters
[in]bufdirectory buffer
buf_sizedirectory buffer size
[in]filename
filename_sizesize of filename
Returns
NULL on error

Definition at line 257 of file wtvdec.c.

◆ wtvfile_close()

static void wtvfile_close ( AVIOContext pb)
static

Close file opened with wtvfile_open_sector(), or wtv_open()

Definition at line 308 of file wtvdec.c.

Referenced by read_close(), and read_header().

◆ read_probe()

static int read_probe ( const AVProbeData p)
static

Definition at line 380 of file wtvdec.c.

◆ filetime_to_iso8601()

static int filetime_to_iso8601 ( char *  buf,
int  buf_size,
int64_t  value 
)
static

Convert win32 FILETIME to ISO-8601 string.

Returns
<0 on error

Definition at line 389 of file wtvdec.c.

Referenced by get_tag().

◆ crazytime_to_iso8601()

static int crazytime_to_iso8601 ( char *  buf,
int  buf_size,
int64_t  value 
)
static

Convert crazy time (100ns since 1 Jan 0001) to ISO-8601 string.

Returns
<0 on error

Definition at line 405 of file wtvdec.c.

Referenced by get_tag().

◆ oledate_to_iso8601()

static int oledate_to_iso8601 ( char *  buf,
int  buf_size,
int64_t  value 
)
static

Convert OLE DATE to ISO-8601 string.

Returns
<0 on error

Definition at line 421 of file wtvdec.c.

Referenced by get_tag().

◆ get_attachment()

static void get_attachment ( AVFormatContext s,
AVIOContext pb,
int  length 
)
static

Definition at line 433 of file wtvdec.c.

Referenced by get_tag().

◆ get_tag()

static void get_tag ( AVFormatContext s,
AVIOContext pb,
const char *  key,
int  type,
int  length 
)
static

Definition at line 461 of file wtvdec.c.

Referenced by parse_legacy_attrib().

◆ parse_legacy_attrib()

static void parse_legacy_attrib ( AVFormatContext s,
AVIOContext pb 
)
static

Parse metadata entries.

Definition at line 524 of file wtvdec.c.

Referenced by read_header().

◆ parse_videoinfoheader2()

static int parse_videoinfoheader2 ( AVFormatContext s,
AVStream st 
)
static

parse VIDEOINFOHEADER2 structure

Returns
bytes consumed

Definition at line 551 of file wtvdec.c.

Referenced by parse_media_type().

◆ parse_mpeg1waveformatex()

static void parse_mpeg1waveformatex ( AVStream st)
static

Parse MPEG1WAVEFORMATEX extradata structure.

Definition at line 565 of file wtvdec.c.

Referenced by parse_media_type().

◆ new_stream()

static AVStream* new_stream ( AVFormatContext s,
AVStream st,
int  sid,
int  codec_type 
)
static

Initialise stream.

Parameters
stStream to initialise, or NULL to create and initialise new stream
Returns
NULL on error

Definition at line 592 of file wtvdec.c.

Referenced by parse_media_type().

◆ parse_media_type()

static AVStream* parse_media_type ( AVFormatContext s,
AVStream st,
int  sid,
ff_asf_guid  mediatype,
ff_asf_guid  subtype,
ff_asf_guid  formattype,
uint64_t  size 
)
static

parse Media Type structure and populate stream

Parameters
stStream, or NULL to create new stream
mediatypeMediatype GUID
subtypeSubtype GUID
formattypeFormat GUID
sizeSize of format buffer
Returns
NULL on error

Definition at line 626 of file wtvdec.c.

Referenced by parse_chunks().

◆ recover()

static int recover ( WtvContext wtv,
uint64_t  broken_pos 
)
static

Try to seek over a broken chunk.

Returns
<0 on error

Definition at line 749 of file wtvdec.c.

Referenced by parse_chunks(), and read_part_of_packet().

◆ parse_chunks()

static int parse_chunks ( AVFormatContext s,
int  mode,
int64_t  seekts,
int len_ptr 
)
static

Parse WTV chunks.

Parameters
modeSEEK_TO_DATA or SEEK_TO_PTS
seektstimestamp
[out]len_ptrLength of data chunk
Returns
stream index of data chunk, or <0 on error

Definition at line 772 of file wtvdec.c.

Referenced by read_header(), read_packet(), and read_seek().

◆ read_header()

static int read_header ( AVFormatContext s)
static

Definition at line 953 of file wtvdec.c.

◆ read_packet()

static int read_packet ( AVFormatContext s,
AVPacket pkt 
)
static

Definition at line 1053 of file wtvdec.c.

◆ read_seek()

static int read_seek ( AVFormatContext s,
int  stream_index,
int64_t  ts,
int  flags 
)
static

Definition at line 1072 of file wtvdec.c.

◆ read_close()

static int read_close ( AVFormatContext s)
static

Definition at line 1112 of file wtvdec.c.

Variable Documentation

◆ EVENTID_SubtitleSpanningEvent

const ff_asf_guid EVENTID_SubtitleSpanningEvent
static
Initial value:
=
{0x48,0xC0,0xCE,0x5D,0xB9,0xD0,0x63,0x41,0x87,0x2C,0x4F,0x32,0x22,0x3B,0xE8,0x8A}

Definition at line 339 of file wtvdec.c.

Referenced by parse_chunks().

◆ EVENTID_LanguageSpanningEvent

const ff_asf_guid EVENTID_LanguageSpanningEvent
static
Initial value:
=
{0x6D,0x66,0x92,0xE2,0x02,0x9C,0x8D,0x44,0xAA,0x8D,0x78,0x1A,0x93,0xFD,0xC3,0x95}

Definition at line 341 of file wtvdec.c.

Referenced by parse_chunks().

◆ EVENTID_AudioDescriptorSpanningEvent

const ff_asf_guid EVENTID_AudioDescriptorSpanningEvent
static
Initial value:
=
{0x1C,0xD4,0x7B,0x10,0xDA,0xA6,0x91,0x46,0x83,0x69,0x11,0xB2,0xCD,0xAA,0x28,0x8E}

Definition at line 343 of file wtvdec.c.

Referenced by parse_chunks().

◆ EVENTID_CtxADescriptorSpanningEvent

const ff_asf_guid EVENTID_CtxADescriptorSpanningEvent
static
Initial value:
=
{0xE6,0xA2,0xB4,0x3A,0x47,0x42,0x34,0x4B,0x89,0x6C,0x30,0xAF,0xA5,0xD2,0x1C,0x24}

Definition at line 345 of file wtvdec.c.

Referenced by parse_chunks().

◆ EVENTID_CSDescriptorSpanningEvent

const ff_asf_guid EVENTID_CSDescriptorSpanningEvent
static
Initial value:
=
{0xD9,0x79,0xE7,0xEf,0xF0,0x97,0x86,0x47,0x80,0x0D,0x95,0xCF,0x50,0x5D,0xDC,0x66}

Definition at line 347 of file wtvdec.c.

Referenced by parse_chunks().

◆ EVENTID_DVBScramblingControlSpanningEvent

const ff_asf_guid EVENTID_DVBScramblingControlSpanningEvent
static
Initial value:
=
{0xC4,0xE1,0xD4,0x4B,0xA1,0x90,0x09,0x41,0x82,0x36,0x27,0xF0,0x0E,0x7D,0xCC,0x5B}

Definition at line 349 of file wtvdec.c.

Referenced by parse_chunks().

◆ EVENTID_StreamIDSpanningEvent

const ff_asf_guid EVENTID_StreamIDSpanningEvent
static
Initial value:
=
{0x68,0xAB,0xF1,0xCA,0x53,0xE1,0x41,0x4D,0xA6,0xB3,0xA7,0xC9,0x98,0xDB,0x75,0xEE}

Definition at line 351 of file wtvdec.c.

Referenced by parse_chunks().

◆ EVENTID_TeletextSpanningEvent

const ff_asf_guid EVENTID_TeletextSpanningEvent
static
Initial value:
=
{0x50,0xD9,0x99,0x95,0x33,0x5F,0x17,0x46,0xAF,0x7C,0x1E,0x54,0xB5,0x10,0xDA,0xA3}

Definition at line 353 of file wtvdec.c.

Referenced by parse_chunks().

◆ EVENTID_AudioTypeSpanningEvent

const ff_asf_guid EVENTID_AudioTypeSpanningEvent
static
Initial value:
=
{0xBE,0xBF,0x1C,0x50,0x49,0xB8,0xCE,0x42,0x9B,0xE9,0x3D,0xB8,0x69,0xFB,0x82,0xB3}

Definition at line 355 of file wtvdec.c.

Referenced by parse_chunks().

◆ mediasubtype_mpeg1payload

const ff_asf_guid mediasubtype_mpeg1payload
static
Initial value:
=
{0x81,0xEB,0x36,0xE4,0x4F,0x52,0xCE,0x11,0x9F,0x53,0x00,0x20,0xAF,0x0B,0xA7,0x70}

Definition at line 361 of file wtvdec.c.

Referenced by parse_media_type().

◆ mediatype_mpeg2_sections

const ff_asf_guid mediatype_mpeg2_sections
static
Initial value:
=
{0x6C,0x17,0x5F,0x45,0x06,0x4B,0xCE,0x47,0x9A,0xEF,0x8C,0xAE,0xF7,0x3D,0xF7,0xB5}

Definition at line 363 of file wtvdec.c.

Referenced by parse_media_type().

◆ mediatype_mpeg2_pes

const ff_asf_guid mediatype_mpeg2_pes
static
Initial value:
=
{0x20,0x80,0x6D,0xE0,0x46,0xDB,0xCF,0x11,0xB4,0xD1,0x00,0x80,0x5F,0x6C,0xBB,0xEA}

Definition at line 365 of file wtvdec.c.

Referenced by parse_media_type().

◆ mediatype_mstvcaption

const ff_asf_guid mediatype_mstvcaption
static
Initial value:
=
{0x89,0x8A,0x8B,0xB8,0x49,0xB0,0x80,0x4C,0xAD,0xCF,0x58,0x98,0x98,0x5E,0x22,0xC1}

Definition at line 367 of file wtvdec.c.

Referenced by parse_media_type().

◆ mediasubtype_dvb_subtitle

const ff_asf_guid mediasubtype_dvb_subtitle
static
Initial value:
=
{0xC3,0xCB,0xFF,0x34,0xB3,0xD5,0x71,0x41,0x90,0x02,0xD4,0xC6,0x03,0x01,0x69,0x7F}

Definition at line 371 of file wtvdec.c.

Referenced by parse_media_type().

◆ mediasubtype_teletext

const ff_asf_guid mediasubtype_teletext
static
Initial value:
=
{0xE3,0x76,0x2A,0xF7,0x0A,0xEB,0xD0,0x11,0xAC,0xE4,0x00,0x00,0xC0,0xCC,0x16,0xBA}

Definition at line 373 of file wtvdec.c.

Referenced by parse_media_type().

◆ mediasubtype_dtvccdata

const ff_asf_guid mediasubtype_dtvccdata
static
Initial value:
=
{0xAA,0xDD,0x2A,0xF5,0xF0,0x36,0xF5,0x43,0x95,0xEA,0x6D,0x86,0x64,0x84,0x26,0x2A}

Definition at line 375 of file wtvdec.c.

Referenced by parse_media_type().

◆ mediasubtype_mpeg2_sections

const ff_asf_guid mediasubtype_mpeg2_sections
static
Initial value:
=
{0x79,0x85,0x9F,0x4A,0xF8,0x6B,0x92,0x43,0x8A,0x6D,0xD2,0xDD,0x09,0xFA,0x78,0x61}

Definition at line 377 of file wtvdec.c.

Referenced by parse_media_type().

◆ ff_wtv_demuxer

const FFInputFormat ff_wtv_demuxer
Initial value:
= {
.p.name = "wtv",
.p.long_name = NULL_IF_CONFIG_SMALL("Windows Television (WTV)"),
.p.flags = AVFMT_SHOW_IDS,
.priv_data_size = sizeof(WtvContext),
}

Definition at line 1120 of file wtvdec.c.

AVFMT_SHOW_IDS
#define AVFMT_SHOW_IDS
Show format stream IDs numbers.
Definition: avformat.h:477
WtvContext
Definition: wtvdec.c:325
read_seek
static int read_seek(AVFormatContext *s, int stream_index, int64_t ts, int flags)
Definition: wtvdec.c:1072
read_probe
static int read_probe(const AVProbeData *p)
Definition: wtvdec.c:380
NULL_IF_CONFIG_SMALL
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition: internal.h:106
read_packet
static int read_packet(AVFormatContext *s, AVPacket *pkt)
Definition: wtvdec.c:1053
read_header
static int read_header(AVFormatContext *s)
Definition: wtvdec.c:953
read_close
static int read_close(AVFormatContext *s)
Definition: wtvdec.c:1112