FFmpeg
Loading...
Searching...
No Matches
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/mem.h"
#include "avformat.h"
#include "avio_internal.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)
 
#define LEN_PRETTY_GUID   35
 
#define wtvfile_open(s, buf, buf_size, 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
 
static AVIOContextwtvfile_open_sector (unsigned first_sector, uint64_t length, int depth, AVFormatContext *s)
 Open file.
 
static AVIOContextwtvfile_open2 (AVFormatContext *s, const uint8_t *buf, int buf_size, const uint8_t *filename, int filename_size)
 Open file using filename.
 
static void wtvfile_close (AVIOContext *pb)
 Close file opened with wtvfile_open_sector(), or wtv_open()
 
static int read_probe (const AVProbeData *p)
 
static int64_t crazytime_to_avtime (int64_t value)
 Convert crazy time (100ns since 1 Jan 0001) to av time (unix timestamp in microseconds)
 
static int64_t oledate_to_avtime (int64_t value)
 Convert OLE DATE to av time (unix timestamp in microseconds)
 
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.
 
static int parse_videoinfoheader2 (AVFormatContext *s, AVStream *st)
 parse VIDEOINFOHEADER2 structure
 
static void parse_mpeg1waveformatex (AVStream *st)
 Parse MPEG1WAVEFORMATEX extradata structure.
 
static AVStreamnew_stream (AVFormatContext *s, AVStream *st, int sid, int codec_type)
 Initialise stream.
 
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
 
static int recover (WtvContext *wtv, uint64_t broken_pos)
 Try to seek over a broken chunk.
 
static int parse_chunks (AVFormatContext *s, int mode, int64_t seekts, int *len_ptr)
 Parse WTV chunks.
 
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.

Referenced by get_tag().

◆ ARG_PRETTY_GUID

#define ARG_PRETTY_GUID ( g)
Value:
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 AV_RL32(p)
#define AV_RL16(p)
const char * g
Definition vf_curves.c:128

Definition at line 44 of file wtvdec.c.

Referenced by get_tag().

◆ LEN_PRETTY_GUID

#define LEN_PRETTY_GUID   35

Definition at line 46 of file wtvdec.c.

Referenced by get_tag().

◆ wtvfile_open

#define wtvfile_open ( s,
buf,
buf_size,
filename )
Value:
wtvfile_open2(s, buf, buf_size, filename, sizeof(filename))
#define s(width, name)
Definition cbs_vp9.c:198
static AVIOContext * wtvfile_open2(AVFormatContext *s, const uint8_t *buf, int buf_size, const uint8_t *filename, int filename_size)
Open file using filename.
Definition wtvdec.c:257

Definition at line 302 of file wtvdec.c.

Referenced by read_header().

Enumeration Type Documentation

◆ anonymous enum

anonymous enum
Enumerator
SEEK_TO_DATA 
SEEK_TO_PTS 

Definition at line 708 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.

◆ crazytime_to_avtime()

static int64_t crazytime_to_avtime ( int64_t value)
static

Convert crazy time (100ns since 1 Jan 0001) to av time (unix timestamp in microseconds)

Definition at line 388 of file wtvdec.c.

Referenced by get_tag().

◆ oledate_to_avtime()

static int64_t oledate_to_avtime ( int64_t value)
static

Convert OLE DATE to av time (unix timestamp in microseconds)

Definition at line 396 of file wtvdec.c.

Referenced by get_tag().

◆ get_attachment()

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

Definition at line 401 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 429 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 492 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 519 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 533 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 560 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 594 of file wtvdec.c.

Referenced by parse_chunks(), and parse_media_type().

◆ 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 717 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 740 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 925 of file wtvdec.c.

◆ read_packet()

static int read_packet ( AVFormatContext * s,
AVPacket * pkt )
static

Definition at line 1025 of file wtvdec.c.

◆ read_seek()

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

Definition at line 1044 of file wtvdec.c.

◆ read_close()

static int read_close ( AVFormatContext * s)
static

Definition at line 1084 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),
}
#define AVFMT_SHOW_IDS
Show format stream IDs numbers.
Definition avformat.h:496
static int read_packet(void *opaque, uint8_t *buf, int buf_size)
static int read_probe(const AVProbeData *p)
Definition cdg.c:30
static int read_header(FFV1Context *f, RangeCoder *c)
Definition ffv1dec.c:578
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition internal.h:88
static av_cold int read_close(AVFormatContext *ctx)
Definition libcdio.c:143
static int read_seek(AVFormatContext *ctx, int stream_index, int64_t timestamp, int flags)
Definition libcdio.c:151

Definition at line 1092 of file wtvdec.c.