FFmpeg
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
Data Structures | Macros | Enumerations | Functions | Variables
wtvdec.c File Reference

Windows Television (WTV) demuxer. More...

#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 "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 (int 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 (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
 
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

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

Definition at line 40 of file wtvdec.c.

Referenced by get_tag().

#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 42 of file wtvdec.c.

Referenced by get_tag().

#define LEN_PRETTY_GUID   34

Definition at line 44 of file wtvdec.c.

Referenced by get_tag().

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

Definition at line 296 of file wtvdec.c.

Referenced by read_header().

Enumeration Type Documentation

anonymous enum
Enumerator
SEEK_TO_DATA 
SEEK_TO_PTS 

Definition at line 751 of file wtvdec.c.

Function Documentation

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

Definition at line 62 of file wtvdec.c.

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

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 70 of file wtvdec.c.

Referenced by wtvfile_open_sector().

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().

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().

static AVIOContext* wtvfile_open_sector ( int  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().

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.

static void wtvfile_close ( AVIOContext pb)
static

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

Definition at line 302 of file wtvdec.c.

Referenced by read_close(), and read_header().

static int read_probe ( AVProbeData p)
static

Definition at line 374 of file wtvdec.c.

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 383 of file wtvdec.c.

Referenced by get_tag().

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 399 of file wtvdec.c.

Referenced by get_tag().

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 415 of file wtvdec.c.

Referenced by get_tag().

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

Definition at line 427 of file wtvdec.c.

Referenced by get_tag().

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

Definition at line 463 of file wtvdec.c.

Referenced by parse_legacy_attrib().

static void parse_legacy_attrib ( AVFormatContext s,
AVIOContext pb 
)
static

Parse metadata entries.

Definition at line 535 of file wtvdec.c.

Referenced by read_header().

static int parse_videoinfoheader2 ( AVFormatContext s,
AVStream st 
)
static

parse VIDEOINFOHEADER2 structure

Returns
bytes consumed

Definition at line 562 of file wtvdec.c.

Referenced by parse_media_type().

static void parse_mpeg1waveformatex ( AVStream st)
static

Parse MPEG1WAVEFORMATEX extradata structure.

Definition at line 576 of file wtvdec.c.

Referenced by parse_media_type().

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 605 of file wtvdec.c.

Referenced by 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 639 of file wtvdec.c.

Referenced by parse_chunks().

static int recover ( WtvContext wtv,
uint64_t  broken_pos 
)
static

Try to seek over a broken chunk.

Returns
<0 on error

Definition at line 760 of file wtvdec.c.

Referenced by parse_chunks(), and read_part_of_packet().

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 783 of file wtvdec.c.

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

static int read_header ( AVFormatContext s)
static

Definition at line 957 of file wtvdec.c.

static int read_packet ( AVFormatContext s,
AVPacket pkt 
)
static

Definition at line 1054 of file wtvdec.c.

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

Definition at line 1073 of file wtvdec.c.

static int read_close ( AVFormatContext s)
static

Definition at line 1113 of file wtvdec.c.

Variable Documentation

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 333 of file wtvdec.c.

Referenced by parse_chunks().

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 335 of file wtvdec.c.

Referenced by parse_chunks().

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 337 of file wtvdec.c.

Referenced by parse_chunks().

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 339 of file wtvdec.c.

Referenced by parse_chunks().

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 341 of file wtvdec.c.

Referenced by parse_chunks().

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 343 of file wtvdec.c.

Referenced by parse_chunks().

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 345 of file wtvdec.c.

Referenced by parse_chunks().

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 347 of file wtvdec.c.

Referenced by parse_chunks().

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 349 of file wtvdec.c.

Referenced by parse_chunks().

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 355 of file wtvdec.c.

Referenced by parse_media_type().

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 357 of file wtvdec.c.

Referenced by parse_media_type().

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 359 of file wtvdec.c.

Referenced by parse_media_type().

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 361 of file wtvdec.c.

Referenced by parse_media_type().

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 365 of file wtvdec.c.

Referenced by parse_media_type().

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 367 of file wtvdec.c.

Referenced by parse_media_type().

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 369 of file wtvdec.c.

Referenced by parse_media_type().

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 371 of file wtvdec.c.

Referenced by parse_media_type().

AVInputFormat ff_wtv_demuxer
Initial value:
= {
.name = "wtv",
.long_name = NULL_IF_CONFIG_SMALL("Windows Television (WTV)"),
.priv_data_size = sizeof(WtvContext),
}
#define AVFMT_SHOW_IDS
Show format stream IDs numbers.
Definition: avformat.h:467
static int read_probe(AVProbeData *p)
Definition: wtvdec.c:374
static int read_packet(AVFormatContext *s, AVPacket *pkt)
Definition: wtvdec.c:1054
static int read_header(AVFormatContext *s)
Definition: wtvdec.c:957
static int read_close(AVFormatContext *s)
Definition: wtvdec.c:1113
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification. ...
Definition: internal.h:186
static int read_seek(AVFormatContext *s, int stream_index, int64_t ts, int flags)
Definition: wtvdec.c:1073
#define flags(name, subs,...)
Definition: cbs_av1.c:596

Definition at line 1121 of file wtvdec.c.