FFmpeg
Main Page
Related Pages
Modules
Namespaces
Namespace List
Namespace Members
All
Functions
Variables
Data Structures
Data Structures
Data Structure Index
Class Hierarchy
Data Fields
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Functions
_
a
c
d
g
h
i
o
q
r
s
v
~
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Enumerations
Enumerator
a
d
e
f
i
j
l
m
n
p
r
s
v
Files
File List
Globals
All
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Functions
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Variables
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
a
b
c
d
e
f
g
h
i
l
m
o
p
q
r
s
t
u
v
w
x
y
Enumerations
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Enumerator
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Macros
_
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Examples
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Modules
Pages
libavcodec
xbmenc.c
Go to the documentation of this file.
1
/*
2
* XBM image format
3
*
4
* Copyright (c) 2012 Paul B Mahol
5
*
6
* This file is part of FFmpeg.
7
*
8
* FFmpeg is free software; you can redistribute it and/or
9
* modify it under the terms of the GNU Lesser General Public
10
* License as published by the Free Software Foundation; either
11
* version 2.1 of the License, or (at your option) any later version.
12
*
13
* FFmpeg is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
* Lesser General Public License for more details.
17
*
18
* You should have received a copy of the GNU Lesser General Public
19
* License along with FFmpeg; if not, write to the Free Software
20
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
*/
22
23
#include "
libavutil/reverse.h
"
24
#include "
avcodec.h
"
25
#include "
codec_internal.h
"
26
#include "
encode.h
"
27
#include "
mathops.h
"
28
29
#define ANSI_MIN_READLINE 509
30
31
static
int
xbm_encode_frame
(
AVCodecContext
*avctx,
AVPacket
*
pkt
,
32
const
AVFrame
*p,
int
*got_packet)
33
{
34
int
i
, j, l, commas,
ret
,
size
, linesize, lineout, rowsout;
35
uint8_t *ptr, *buf;
36
37
linesize = lineout = (avctx->
width
+ 7) / 8;
38
commas = avctx->
height
* linesize;
39
40
/* ANSI worst case minimum readline is 509 chars. */
41
rowsout = avctx->
height
;
42
if
(lineout > (
ANSI_MIN_READLINE
/ 6)) {
43
lineout =
ANSI_MIN_READLINE
/ 6;
44
rowsout = (commas + lineout - 1) / lineout;
45
}
46
47
size
= rowsout * (lineout * 6 + 1) + 106;
48
if
((
ret
=
ff_alloc_packet
(avctx,
pkt
,
size
)) < 0)
49
return
ret
;
50
51
buf =
pkt
->
data
;
52
ptr = p->
data
[0];
53
54
buf +=
snprintf
(buf, 32,
"#define image_width %u\n"
, avctx->
width
);
55
buf +=
snprintf
(buf, 33,
"#define image_height %u\n"
, avctx->
height
);
56
buf +=
snprintf
(buf, 39,
"static unsigned char image_bits[] = {\n"
);
57
for
(
i
= 0, l = lineout;
i
< avctx->
height
;
i
++) {
58
for
(j = 0; j < linesize; j++) {
59
buf +=
snprintf
(buf, 6,
" 0x%02X"
,
ff_reverse
[*ptr++]);
60
if
(--commas <= 0) {
61
buf +=
snprintf
(buf, 2,
"\n"
);
62
break
;
63
}
64
buf +=
snprintf
(buf, 2,
","
);
65
if
(--l <= 0) {
66
buf +=
snprintf
(buf, 2,
"\n"
);
67
l = lineout;
68
}
69
}
70
ptr += p->
linesize
[0] - linesize;
71
}
72
buf +=
snprintf
(buf, 5,
" };\n"
);
73
74
pkt
->
size
= buf -
pkt
->
data
;
75
*got_packet = 1;
76
return
0;
77
}
78
79
const
FFCodec
ff_xbm_encoder
= {
80
.
p
.
name
=
"xbm"
,
81
.p.long_name =
NULL_IF_CONFIG_SMALL
(
"XBM (X BitMap) image"
),
82
.p.type =
AVMEDIA_TYPE_VIDEO
,
83
.p.id =
AV_CODEC_ID_XBM
,
84
FF_CODEC_ENCODE_CB
(
xbm_encode_frame
),
85
.p.pix_fmts = (
const
enum
AVPixelFormat
[]) {
AV_PIX_FMT_MONOWHITE
,
86
AV_PIX_FMT_NONE
},
87
};
AVPixelFormat
AVPixelFormat
Pixel format.
Definition:
pixfmt.h:64
AVFrame
This structure describes decoded (raw) audio or video data.
Definition:
frame.h:325
AVPacket::data
uint8_t * data
Definition:
packet.h:374
ANSI_MIN_READLINE
#define ANSI_MIN_READLINE
Definition:
xbmenc.c:29
encode.h
ff_reverse
const uint8_t ff_reverse[256]
Definition:
reverse.c:23
AV_PIX_FMT_MONOWHITE
@ AV_PIX_FMT_MONOWHITE
Y , 1bpp, 0 is white, 1 is black, in each byte pixels are ordered from the msb to the lsb.
Definition:
pixfmt.h:75
FFCodec
Definition:
codec_internal.h:112
reverse.h
AVFrame::data
uint8_t * data[AV_NUM_DATA_POINTERS]
pointer to the picture/channel planes.
Definition:
frame.h:346
FFCodec::p
AVCodec p
The public AVCodec.
Definition:
codec_internal.h:116
FF_CODEC_ENCODE_CB
#define FF_CODEC_ENCODE_CB(func)
Definition:
codec_internal.h:263
pkt
AVPacket * pkt
Definition:
movenc.c:59
mathops.h
xbm_encode_frame
static int xbm_encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVFrame *p, int *got_packet)
Definition:
xbmenc.c:31
AVPacket::size
int size
Definition:
packet.h:375
NULL_IF_CONFIG_SMALL
#define NULL_IF_CONFIG_SMALL(x)
Return NULL if CONFIG_SMALL is true, otherwise the argument without modification.
Definition:
internal.h:117
codec_internal.h
size
int size
Definition:
twinvq_data.h:10344
ff_xbm_encoder
const FFCodec ff_xbm_encoder
Definition:
xbmenc.c:79
i
#define i(width, name, range_min, range_max)
Definition:
cbs_h2645.c:269
AVCodec::name
const char * name
Name of the codec implementation.
Definition:
codec.h:203
AVCodecContext::height
int height
Definition:
avcodec.h:562
AV_CODEC_ID_XBM
@ AV_CODEC_ID_XBM
Definition:
codec_id.h:210
avcodec.h
ret
ret
Definition:
filter_design.txt:187
AVCodecContext
main external API structure.
Definition:
avcodec.h:389
AV_PIX_FMT_NONE
@ AV_PIX_FMT_NONE
Definition:
pixfmt.h:65
AVMEDIA_TYPE_VIDEO
@ AVMEDIA_TYPE_VIDEO
Definition:
avutil.h:201
AVPacket
This structure stores compressed data.
Definition:
packet.h:351
AVCodecContext::width
int width
picture width / height.
Definition:
avcodec.h:562
AVFrame::linesize
int linesize[AV_NUM_DATA_POINTERS]
For video, a positive or negative value, which is typically indicating the size in bytes of each pict...
Definition:
frame.h:370
snprintf
#define snprintf
Definition:
snprintf.h:34
ff_alloc_packet
int ff_alloc_packet(AVCodecContext *avctx, AVPacket *avpkt, int64_t size)
Check AVPacket size and allocate data.
Definition:
encode.c:35
Generated on Wed Aug 24 2022 21:41:55 for FFmpeg by
1.8.17