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
mpegutils.c
Go to the documentation of this file.
1
/*
2
* Mpeg video formats-related defines and utility functions
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 <stdint.h>
22
23
#include "
libavutil/common.h
"
24
#include "
libavutil/frame.h
"
25
#include "
libavutil/pixdesc.h
"
26
27
#include "
avcodec.h
"
28
#include "
mpegutils.h
"
29
30
void
ff_draw_horiz_band
(
AVCodecContext
*avctx,
31
AVFrame
*cur,
AVFrame
*last,
32
int
y
,
int
h,
int
picture_structure,
33
int
first_field
,
int
low_delay)
34
{
35
const
AVPixFmtDescriptor
*desc =
av_pix_fmt_desc_get
(avctx->
pix_fmt
);
36
int
vshift = desc->
log2_chroma_h
;
37
const
int
field_pic = picture_structure !=
PICT_FRAME
;
38
if
(field_pic) {
39
h <<= 1;
40
y <<= 1;
41
}
42
43
h =
FFMIN
(h, avctx->
height
- y);
44
45
if
(field_pic && first_field &&
46
!(avctx->
slice_flags
&
SLICE_FLAG_ALLOW_FIELD
))
47
return
;
48
49
if
(avctx->
draw_horiz_band
) {
50
AVFrame
*
src
;
51
int
offset
[
AV_NUM_DATA_POINTERS
];
52
int
i;
53
54
if
(cur->
pict_type
==
AV_PICTURE_TYPE_B
|| low_delay ||
55
(avctx->
slice_flags
&
SLICE_FLAG_CODED_ORDER
))
56
src = cur;
57
else
if
(last)
58
src = last;
59
else
60
return
;
61
62
if
(cur->
pict_type
==
AV_PICTURE_TYPE_B
&&
63
picture_structure ==
PICT_FRAME
&&
64
avctx->
codec_id
!=
AV_CODEC_ID_SVQ3
) {
65
for
(i = 0; i <
AV_NUM_DATA_POINTERS
; i++)
66
offset[i] = 0;
67
}
else
{
68
offset[0]= y * src->
linesize
[0];
69
offset[1]=
70
offset[2]= (y >> vshift) * src->
linesize
[1];
71
for
(i = 3; i <
AV_NUM_DATA_POINTERS
; i++)
72
offset[i] = 0;
73
}
74
75
emms_c();
76
77
avctx->
draw_horiz_band
(avctx, src, offset,
78
y, picture_structure, h);
79
}
80
}
Generated on Sun Mar 8 2015 02:34:57 for FFmpeg by
1.8.2