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
vc1testenc.c
Go to the documentation of this file.
1
/*
2
* VC-1 test bitstreams format muxer.
3
* Copyright (c) 2008 Konstantin Shishkov
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
#include "
avformat.h
"
22
#include "
internal.h
"
23
24
typedef
struct
RCVContext
{
25
int
frames
;
26
}
RCVContext
;
27
28
static
int
vc1test_write_header
(
AVFormatContext
*
s
)
29
{
30
AVCodecContext
*avc = s->
streams
[0]->
codec
;
31
AVIOContext
*pb = s->
pb
;
32
33
if
(avc->
codec_id
!=
AV_CODEC_ID_WMV3
) {
34
av_log
(s,
AV_LOG_ERROR
,
"Only WMV3 is accepted!\n"
);
35
return
-1;
36
}
37
avio_wl24
(pb, 0);
//frames count will be here
38
avio_w8
(pb, 0xC5);
39
avio_wl32
(pb, 4);
40
avio_write
(pb, avc->
extradata
, 4);
41
avio_wl32
(pb, avc->
height
);
42
avio_wl32
(pb, avc->
width
);
43
avio_wl32
(pb, 0xC);
44
avio_wl24
(pb, 0);
// hrd_buffer
45
avio_w8
(pb, 0x80);
// level|cbr|res1
46
avio_wl32
(pb, 0);
// hrd_rate
47
if
(s->
streams
[0]->
avg_frame_rate
.
den
&& s->
streams
[0]->
avg_frame_rate
.
num
== 1)
48
avio_wl32
(pb, s->
streams
[0]->
avg_frame_rate
.
den
);
49
else
50
avio_wl32
(pb, 0xFFFFFFFF);
//variable framerate
51
avpriv_set_pts_info
(s->
streams
[0], 32, 1, 1000);
52
53
return
0;
54
}
55
56
static
int
vc1test_write_packet
(
AVFormatContext
*
s
,
AVPacket
*
pkt
)
57
{
58
RCVContext
*ctx = s->
priv_data
;
59
AVIOContext
*pb = s->
pb
;
60
61
if
(!pkt->
size
)
62
return
0;
63
avio_wl32
(pb, pkt->
size
| ((pkt->
flags
&
AV_PKT_FLAG_KEY
) ? 0x80000000 : 0));
64
avio_wl32
(pb, pkt->
pts
);
65
avio_write
(pb, pkt->
data
, pkt->
size
);
66
ctx->
frames
++;
67
68
return
0;
69
}
70
71
static
int
vc1test_write_trailer
(
AVFormatContext
*
s
)
72
{
73
RCVContext
*ctx = s->
priv_data
;
74
AVIOContext
*pb = s->
pb
;
75
76
if
(s->
pb
->
seekable
) {
77
avio_seek
(pb, 0, SEEK_SET);
78
avio_wl24
(pb, ctx->
frames
);
79
avio_flush
(pb);
80
}
81
return
0;
82
}
83
84
AVOutputFormat
ff_vc1t_muxer
= {
85
.
name
=
"vc1test"
,
86
.long_name =
NULL_IF_CONFIG_SMALL
(
"VC-1 test bitstream"
),
87
.extensions =
"rcv"
,
88
.priv_data_size =
sizeof
(
RCVContext
),
89
.audio_codec =
AV_CODEC_ID_NONE
,
90
.video_codec =
AV_CODEC_ID_WMV3
,
91
.
write_header
=
vc1test_write_header
,
92
.
write_packet
=
vc1test_write_packet
,
93
.
write_trailer
=
vc1test_write_trailer
,
94
};
Generated on Sat Jan 25 2014 19:52:05 for FFmpeg by
1.8.2