FFmpeg
Data Structures | Macros | Enumerations | Functions | Variables
wtvdec.c File Reference
#include <inttypes.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   34
 
#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 AVInputFormat 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 41 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 43 of file wtvdec.c.

◆ LEN_PRETTY_GUID

#define LEN_PRETTY_GUID   34

Definition at line 45 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 301 of file wtvdec.c.

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
SEEK_TO_DATA 
SEEK_TO_PTS 

Definition at line 748 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 63 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 71 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 109 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 135 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 152 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 256 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 307 of file wtvdec.c.

Referenced by read_close(), and read_header().

◆ read_probe()

static int read_probe ( const AVProbeData p)
static

Definition at line 379 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 388 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 404 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 420 of file wtvdec.c.

Referenced by get_tag().

◆ get_attachment()

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

Definition at line 432 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 460 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 532 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 559 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 573 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 600 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 634 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 757 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 780 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 961 of file wtvdec.c.

◆ read_packet()

static int read_packet ( AVFormatContext s,
AVPacket pkt 
)
static

Definition at line 1061 of file wtvdec.c.

◆ read_seek()

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

Definition at line 1080 of file wtvdec.c.

◆ read_close()

static int read_close ( AVFormatContext s)
static

Definition at line 1120 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 338 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 340 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 342 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 344 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 346 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 348 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 350 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 352 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 354 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 360 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 362 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 364 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 366 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 370 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 372 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 374 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 376 of file wtvdec.c.

Referenced by parse_media_type().

◆ ff_wtv_demuxer

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

Definition at line 1128 of file wtvdec.c.

AVFMT_SHOW_IDS
#define AVFMT_SHOW_IDS
Show format stream IDs numbers.
Definition: avformat.h:477
WtvContext
Definition: wtvdec.c:324
read_seek
static int read_seek(AVFormatContext *s, int stream_index, int64_t ts, int flags)
Definition: wtvdec.c:1080
read_probe
static int read_probe(const AVProbeData *p)
Definition: wtvdec.c:379
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:115
read_packet
static int read_packet(AVFormatContext *s, AVPacket *pkt)
Definition: wtvdec.c:1061
read_header
static int read_header(AVFormatContext *s)
Definition: wtvdec.c:961
read_close
static int read_close(AVFormatContext *s)
Definition: wtvdec.c:1120
flags
#define flags(name, subs,...)
Definition: cbs_av1.c:561