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