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
libavfilter
vf_showpalette.c
Go to the documentation of this file.
1
/*
2
* This file is part of FFmpeg.
3
*
4
* FFmpeg is free software; you can redistribute it and/or
5
* modify it under the terms of the GNU Lesser General Public
6
* License as published by the Free Software Foundation; either
7
* version 2.1 of the License, or (at your option) any later version.
8
*
9
* FFmpeg is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
* Lesser General Public License for more details.
13
*
14
* You should have received a copy of the GNU Lesser General Public
15
* License along with FFmpeg; if not, write to the Free Software
16
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
*/
18
19
/**
20
* @file
21
* Display frame palette (AV_PIX_FMT_PAL8)
22
*/
23
24
#include "
libavutil/avassert.h
"
25
#include "
libavutil/opt.h
"
26
#include "
avfilter.h
"
27
#include "
formats.h
"
28
#include "
internal.h
"
29
#include "
video.h
"
30
31
typedef
struct
{
32
const
AVClass
*
class
;
33
int
size
;
34
}
ShowPaletteContext
;
35
36
#define OFFSET(x) offsetof(ShowPaletteContext, x)
37
#define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM
38
static
const
AVOption
showpalette_options
[] = {
39
{
"s"
,
"set pixel box size"
,
OFFSET
(
size
),
AV_OPT_TYPE_INT
, {.i64=30}, 1, 100,
FLAGS
},
40
{
NULL
}
41
};
42
43
AVFILTER_DEFINE_CLASS
(showpalette);
44
45
static
int
query_formats
(
AVFilterContext
*ctx)
46
{
47
static
const
enum
AVPixelFormat
in_fmts[] = {
AV_PIX_FMT_PAL8
,
AV_PIX_FMT_NONE
};
48
static
const
enum
AVPixelFormat
out_fmts[] = {
AV_PIX_FMT_RGB32
,
AV_PIX_FMT_NONE
};
49
AVFilterFormats
*
in
=
ff_make_format_list
(in_fmts);
50
AVFilterFormats
*
out
=
ff_make_format_list
(out_fmts);
51
if
(!in || !out) {
52
av_freep
(&in);
53
av_freep
(&out);
54
return
AVERROR
(ENOMEM);
55
}
56
ff_formats_ref
(in, &ctx->
inputs
[0]->
out_formats
);
57
ff_formats_ref
(out, &ctx->
outputs
[0]->
in_formats
);
58
return
0;
59
}
60
61
static
int
config_output
(
AVFilterLink
*outlink)
62
{
63
AVFilterContext
*ctx = outlink->
src
;
64
const
ShowPaletteContext
*
s
= ctx->
priv
;
65
outlink->
w
= outlink->
h
= 16 * s->
size
;
66
return
0;
67
}
68
69
static
int
disp_palette
(
AVFrame
*
out
,
const
AVFrame
*
in
,
int
size
)
70
{
71
int
x,
y
, i, j;
72
uint32_t *dst = (uint32_t *)out->
data
[0];
73
const
int
dst_linesize = out->
linesize
[0] >> 2;
74
const
uint32_t *pal = (uint32_t *)in->
data
[1];
75
76
for
(y = 0; y < 16; y++)
77
for
(x = 0; x < 16; x++)
78
for
(j = 0; j <
size
; j++)
79
for
(i = 0; i <
size
; i++)
80
dst[(y*dst_linesize + x) * size + j*dst_linesize + i] = pal[y*16 + x];
81
return
0;
82
}
83
84
static
int
filter_frame
(
AVFilterLink
*inlink,
AVFrame
*
in
)
85
{
86
int
ret
;
87
AVFrame
*
out
;
88
AVFilterContext
*ctx = inlink->
dst
;
89
const
ShowPaletteContext
*
s
= ctx->
priv
;
90
AVFilterLink
*outlink = ctx->
outputs
[0];
91
92
out =
ff_get_video_buffer
(outlink, outlink->
w
, outlink->
h
);
93
if
(!out) {
94
av_frame_free
(&in);
95
return
AVERROR
(ENOMEM);
96
}
97
av_frame_copy_props
(out, in);
98
ret =
disp_palette
(out, in, s->
size
);
99
av_frame_free
(&in);
100
return
ret < 0 ? ret :
ff_filter_frame
(outlink, out);
101
}
102
103
static
const
AVFilterPad
showpalette_inputs
[] = {
104
{
105
.
name
=
"default"
,
106
.type =
AVMEDIA_TYPE_VIDEO
,
107
.filter_frame =
filter_frame
,
108
},
109
{
NULL
}
110
};
111
112
static
const
AVFilterPad
showpalette_outputs
[] = {
113
{
114
.
name
=
"default"
,
115
.type =
AVMEDIA_TYPE_VIDEO
,
116
.config_props =
config_output
,
117
},
118
{
NULL
}
119
};
120
121
AVFilter
ff_vf_showpalette
= {
122
.
name
=
"showpalette"
,
123
.description =
NULL_IF_CONFIG_SMALL
(
"Display frame palette"
),
124
.priv_size =
sizeof
(
ShowPaletteContext
),
125
.
query_formats
=
query_formats
,
126
.
inputs
= showpalette_inputs,
127
.
outputs
= showpalette_outputs,
128
.priv_class = &showpalette_class,
129
.
flags
=
AVFILTER_FLAG_SUPPORT_TIMELINE_GENERIC
,
130
};
Generated on Sun Mar 8 2015 02:35:08 for FFmpeg by
1.8.2