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
libavcodec
flvenc.c
Go to the documentation of this file.
1
/*
2
* FLV Encoding specific code.
3
*
4
* This file is part of FFmpeg.
5
*
6
* FFmpeg is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Lesser General Public
8
* License as published by the Free Software Foundation; either
9
* version 2.1 of the License, or (at your option) any later version.
10
*
11
* FFmpeg is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* Lesser General Public License for more details.
15
*
16
* You should have received a copy of the GNU Lesser General Public
17
* License along with FFmpeg; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
*/
20
21
#include "
flv.h
"
22
#include "
h263.h
"
23
#include "
mpegvideo.h
"
24
25
void
ff_flv_encode_picture_header
(
MpegEncContext
*
s
,
int
picture_number)
26
{
27
int
format;
28
29
avpriv_align_put_bits
(&s->
pb
);
30
31
put_bits
(&s->
pb
, 17, 1);
32
/* 0: h263 escape codes 1: 11-bit escape codes */
33
put_bits
(&s->
pb
, 5, (s->
h263_flv
- 1));
34
put_bits
(&s->
pb
, 8,
35
(((int64_t) s->
picture_number
* 30 * s->
avctx
->
time_base
.
num
) /
// FIXME use timestamp
36
s->
avctx
->
time_base
.
den
) & 0xff);
/* TemporalReference */
37
if
(s->
width
== 352 && s->
height
== 288)
38
format = 2;
39
else
if
(s->
width
== 176 && s->
height
== 144)
40
format = 3;
41
else
if
(s->
width
== 128 && s->
height
== 96)
42
format = 4;
43
else
if
(s->
width
== 320 && s->
height
== 240)
44
format = 5;
45
else
if
(s->
width
== 160 && s->
height
== 120)
46
format = 6;
47
else
if
(s->
width
<= 255 && s->
height
<= 255)
48
format = 0;
/* use 1 byte width & height */
49
else
50
format = 1;
/* use 2 bytes width & height */
51
put_bits
(&s->
pb
, 3, format);
/* PictureSize */
52
if
(format == 0) {
53
put_bits
(&s->
pb
, 8, s->
width
);
54
put_bits
(&s->
pb
, 8, s->
height
);
55
}
else
if
(format == 1) {
56
put_bits
(&s->
pb
, 16, s->
width
);
57
put_bits
(&s->
pb
, 16, s->
height
);
58
}
59
put_bits
(&s->
pb
, 2, s->
pict_type
==
AV_PICTURE_TYPE_P
);
/* PictureType */
60
put_bits
(&s->
pb
, 1, 1);
/* DeblockingFlag: on */
61
put_bits
(&s->
pb
, 5, s->
qscale
);
/* Quantizer */
62
put_bits
(&s->
pb
, 1, 0);
/* ExtraInformation */
63
64
if
(s->
h263_aic
) {
65
s->
y_dc_scale_table
=
66
s->
c_dc_scale_table
=
ff_aic_dc_scale_table
;
67
}
else
{
68
s->
y_dc_scale_table
=
69
s->
c_dc_scale_table
=
ff_mpeg1_dc_scale_table
;
70
}
71
}
72
73
void
ff_flv2_encode_ac_esc
(
PutBitContext
*pb,
int
slevel,
int
level
,
74
int
run
,
int
last)
75
{
76
if
(level < 64) {
// 7-bit level
77
put_bits
(pb, 1, 0);
78
put_bits
(pb, 1, last);
79
put_bits
(pb, 6, run);
80
81
put_sbits
(pb, 7, slevel);
82
}
else
{
83
/* 11-bit level */
84
put_bits
(pb, 1, 1);
85
put_bits
(pb, 1, last);
86
put_bits
(pb, 6, run);
87
88
put_sbits
(pb, 11, slevel);
89
}
90
}
91
92
FF_MPV_GENERIC_CLASS
(flv)
93
94
AVCodec
ff_flv_encoder
= {
95
.
name
=
"flv"
,
96
.long_name =
NULL_IF_CONFIG_SMALL
(
"FLV / Sorenson Spark / Sorenson H.263 (Flash Video)"
),
97
.type =
AVMEDIA_TYPE_VIDEO
,
98
.id =
AV_CODEC_ID_FLV1
,
99
.priv_data_size =
sizeof
(
MpegEncContext
),
100
.
init
=
ff_mpv_encode_init
,
101
.encode2 =
ff_mpv_encode_picture
,
102
.close =
ff_mpv_encode_end
,
103
.pix_fmts = (
const
enum
AVPixelFormat
[]) {
AV_PIX_FMT_YUV420P
,
104
AV_PIX_FMT_NONE
},
105
.priv_class = &
flv_class
,
106
};
Generated on Sun Mar 8 2015 02:34:51 for FFmpeg by
1.8.2