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
libavformat
mpjpeg.c
Go to the documentation of this file.
1
/*
2
* Multipart JPEG format
3
* Copyright (c) 2000, 2001, 2002, 2003 Fabrice Bellard
4
*
5
* This file is part of FFmpeg.
6
*
7
* FFmpeg is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU Lesser General Public
9
* License as published by the Free Software Foundation; either
10
* version 2.1 of the License, or (at your option) any later version.
11
*
12
* FFmpeg is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
* Lesser General Public License for more details.
16
*
17
* You should have received a copy of the GNU Lesser General Public
18
* License along with FFmpeg; if not, write to the Free Software
19
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
*/
21
#include "
libavutil/opt.h
"
22
#include "
avformat.h
"
23
24
/* Multipart JPEG */
25
26
#define BOUNDARY_TAG "ffserver"
27
28
typedef
struct
MPJPEGContext
{
29
AVClass
*
class
;
30
char
*
boundary_tag
;
31
}
MPJPEGContext
;
32
33
static
int
mpjpeg_write_header
(
AVFormatContext
*
s
)
34
{
35
MPJPEGContext
*mpj = s->
priv_data
;
36
uint8_t
buf1[256];
37
38
snprintf
(buf1,
sizeof
(buf1),
"--%s\r\n"
, mpj->
boundary_tag
);
39
avio_write
(s->
pb
, buf1, strlen(buf1));
40
avio_flush
(s->
pb
);
41
return
0;
42
}
43
44
static
int
mpjpeg_write_packet
(
AVFormatContext
*
s
,
AVPacket
*
pkt
)
45
{
46
MPJPEGContext
*mpj = s->
priv_data
;
47
uint8_t
buf1[256];
48
49
snprintf
(buf1,
sizeof
(buf1),
"Content-type: image/jpeg\r\n"
);
50
avio_write
(s->
pb
, buf1, strlen(buf1));
51
52
snprintf
(buf1,
sizeof
(buf1),
"Content-length: %d\r\n\r\n"
, pkt->
size
);
53
avio_write
(s->
pb
, buf1, strlen(buf1));
54
avio_write
(s->
pb
, pkt->
data
, pkt->
size
);
55
56
snprintf
(buf1,
sizeof
(buf1),
"\r\n--%s\r\n"
, mpj->
boundary_tag
);
57
avio_write
(s->
pb
, buf1, strlen(buf1));
58
return
0;
59
}
60
61
static
int
mpjpeg_write_trailer
(
AVFormatContext
*
s
)
62
{
63
return
0;
64
}
65
66
static
const
AVOption
options
[] = {
67
{
"boundary_tag"
,
"Boundary tag"
, offsetof(
MPJPEGContext
, boundary_tag),
AV_OPT_TYPE_STRING
, {.str =
BOUNDARY_TAG
}, .flags =
AV_OPT_FLAG_ENCODING_PARAM
},
68
{ NULL },
69
};
70
71
static
const
AVClass
mpjpeg_muxer_class
= {
72
.
class_name
=
"mpjpeg_muxer"
,
73
.item_name =
av_default_item_name
,
74
.option =
options
,
75
.version =
LIBAVUTIL_VERSION_INT
,
76
};
77
78
AVOutputFormat
ff_mpjpeg_muxer
= {
79
.
name
=
"mpjpeg"
,
80
.long_name =
NULL_IF_CONFIG_SMALL
(
"MIME multipart JPEG"
),
81
.mime_type =
"multipart/x-mixed-replace;boundary="
BOUNDARY_TAG
,
82
.extensions =
"mjpg"
,
83
.priv_data_size =
sizeof
(
MPJPEGContext
),
84
.audio_codec =
AV_CODEC_ID_NONE
,
85
.video_codec =
AV_CODEC_ID_MJPEG
,
86
.
write_header
=
mpjpeg_write_header
,
87
.
write_packet
=
mpjpeg_write_packet
,
88
.
write_trailer
=
mpjpeg_write_trailer
,
89
.
flags
=
AVFMT_NOTIMESTAMPS
,
90
.priv_class = &mpjpeg_muxer_class,
91
};
Generated on Fri Dec 5 2014 04:42:12 for FFmpeg by
1.8.2