FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavformat
txd.c
Go to the documentation of this file.
1
/*
2
* Renderware TeXture Dictionary (.txd) demuxer
3
* Copyright (c) 2007 Ivo van Poorten
4
*
5
* This file is part of FFmpeg.
6
*
7
* FFmpeg is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU Lesser General Public
9
* License as published by the Free Software Foundation; either
10
* version 2.1 of the License, or (at your option) any later version.
11
*
12
* FFmpeg is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
* Lesser General Public License for more details.
16
*
17
* You should have received a copy of the GNU Lesser General Public
18
* License along with FFmpeg; if not, write to the Free Software
19
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
*/
21
22
#include "
libavutil/intreadwrite.h
"
23
#include "
avformat.h
"
24
25
#define TXD_FILE 0x16
26
#define TXD_INFO 0x01
27
#define TXD_EXTRA 0x03
28
#define TXD_TEXTURE 0x15
29
#define TXD_TEXTURE_DATA 0x01
30
#define TXD_MARKER 0x1803ffff
31
#define TXD_MARKER2 0x1003ffff
32
33
static
int
txd_probe
(
AVProbeData
* pd) {
34
if
(
AV_RL32
(pd->
buf
) ==
TXD_FILE
&&
35
(
AV_RL32
(pd->
buf
+8) ==
TXD_MARKER
||
AV_RL32
(pd->
buf
+8) ==
TXD_MARKER2
))
36
return
AVPROBE_SCORE_MAX
;
37
return
0;
38
}
39
40
static
int
txd_read_header
(
AVFormatContext
*
s
) {
41
AVStream
*st;
42
43
st =
avformat_new_stream
(s, NULL);
44
if
(!st)
45
return
AVERROR
(ENOMEM);
46
st->
codec
->
codec_type
=
AVMEDIA_TYPE_VIDEO
;
47
st->
codec
->
codec_id
=
AV_CODEC_ID_TXD
;
48
st->
codec
->
time_base
.
den
= 5;
49
st->
codec
->
time_base
.
num
= 1;
50
/* the parameters will be extracted from the compressed bitstream */
51
52
return
0;
53
}
54
55
static
int
txd_read_packet
(
AVFormatContext
*
s
,
AVPacket
*
pkt
) {
56
AVIOContext
*pb = s->
pb
;
57
unsigned
int
id
, chunk_size, marker;
58
int
ret
;
59
60
next_chunk:
61
id
=
avio_rl32
(pb);
62
chunk_size =
avio_rl32
(pb);
63
marker =
avio_rl32
(pb);
64
65
if
(
url_feof
(s->
pb
))
66
return
AVERROR_EOF
;
67
if
(marker !=
TXD_MARKER
&& marker !=
TXD_MARKER2
) {
68
av_log
(s,
AV_LOG_ERROR
,
"marker does not match\n"
);
69
return
AVERROR_INVALIDDATA
;
70
}
71
72
switch
(
id
) {
73
case
TXD_INFO
:
74
if
(chunk_size > 100)
75
break
;
76
case
TXD_EXTRA
:
77
avio_skip
(s->
pb
, chunk_size);
78
case
TXD_FILE
:
79
case
TXD_TEXTURE
:
80
goto
next_chunk;
81
default
:
82
av_log
(s,
AV_LOG_ERROR
,
"unknown chunk id %i\n"
,
id
);
83
return
AVERROR_INVALIDDATA
;
84
}
85
86
ret =
av_get_packet
(s->
pb
, pkt, chunk_size);
87
if
(ret < 0)
88
return
ret
;
89
pkt->
stream_index
= 0;
90
91
return
0;
92
}
93
94
AVInputFormat
ff_txd_demuxer
= {
95
.
name
=
"txd"
,
96
.long_name =
NULL_IF_CONFIG_SMALL
(
"Renderware TeXture Dictionary"
),
97
.read_probe =
txd_probe
,
98
.read_header =
txd_read_header
,
99
.read_packet =
txd_read_packet
,
100
};
Generated on Sun Mar 23 2014 23:50:03 for FFmpeg by
1.8.2