annotate mpjpeg.c @ 468:60f897e8dd2d libavformat

pass AVPacket into av_write_frame() fixes the random dts/pts during encoding asf preroll fix no more initial zero frames for b frame encoding mpeg-es dts during demuxing fixed .ffm timestamp scale fixed, ffm is still broken though
author michael
date Sat, 29 May 2004 02:06:32 +0000
parents a313e1080322
children 9ace3075f33a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
47
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
1 /*
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
2 * Multipart JPEG format
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
3 * Copyright (c) 2000, 2001, 2002, 2003 Fabrice Bellard.
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
4 *
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
5 * This library is free software; you can redistribute it and/or
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
6 * modify it under the terms of the GNU Lesser General Public
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
7 * License as published by the Free Software Foundation; either
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
8 * version 2 of the License, or (at your option) any later version.
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
9 *
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
10 * This library is distributed in the hope that it will be useful,
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
13 * Lesser General Public License for more details.
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
14 *
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
15 * You should have received a copy of the GNU Lesser General Public
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
16 * License along with this library; if not, write to the Free Software
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
18 */
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
19 #include "avformat.h"
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
20
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
21 /* Multipart JPEG */
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
22
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
23 #define BOUNDARY_TAG "ffserver"
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
24
277
a313e1080322 disable encoders where appropriate (patch courtesy of BERO
melanson
parents: 241
diff changeset
25 #ifdef CONFIG_ENCODERS
47
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
26 static int mpjpeg_write_header(AVFormatContext *s)
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
27 {
65
a58a8a53eb46 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 47
diff changeset
28 uint8_t buf1[256];
47
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
29
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
30 snprintf(buf1, sizeof(buf1), "--%s\n", BOUNDARY_TAG);
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
31 put_buffer(&s->pb, buf1, strlen(buf1));
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
32 put_flush_packet(&s->pb);
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
33 return 0;
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
34 }
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
35
468
60f897e8dd2d pass AVPacket into av_write_frame()
michael
parents: 277
diff changeset
36 static int mpjpeg_write_packet(AVFormatContext *s, AVPacket *pkt)
47
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
37 {
65
a58a8a53eb46 * UINTX -> uintx_t INTX -> intx_t
kabi
parents: 47
diff changeset
38 uint8_t buf1[256];
47
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
39
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
40 snprintf(buf1, sizeof(buf1), "Content-type: image/jpeg\n\n");
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
41 put_buffer(&s->pb, buf1, strlen(buf1));
468
60f897e8dd2d pass AVPacket into av_write_frame()
michael
parents: 277
diff changeset
42 put_buffer(&s->pb, pkt->data, pkt->size);
47
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
43
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
44 snprintf(buf1, sizeof(buf1), "\n--%s\n", BOUNDARY_TAG);
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
45 put_buffer(&s->pb, buf1, strlen(buf1));
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
46 put_flush_packet(&s->pb);
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
47 return 0;
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
48 }
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
49
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
50 static int mpjpeg_write_trailer(AVFormatContext *s)
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
51 {
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
52 return 0;
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
53 }
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
54
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
55 static AVOutputFormat mpjpeg_format = {
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
56 "mpjpeg",
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
57 "Mime multipart JPEG format",
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
58 "multipart/x-mixed-replace;boundary=" BOUNDARY_TAG,
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
59 "mjpg",
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
60 0,
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
61 CODEC_ID_NONE,
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
62 CODEC_ID_MJPEG,
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
63 mpjpeg_write_header,
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
64 mpjpeg_write_packet,
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
65 mpjpeg_write_trailer,
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
66 };
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
67
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
68
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
69 /*************************************/
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
70 /* single frame JPEG */
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
71
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
72 static int single_jpeg_write_header(AVFormatContext *s)
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
73 {
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
74 return 0;
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
75 }
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
76
468
60f897e8dd2d pass AVPacket into av_write_frame()
michael
parents: 277
diff changeset
77 static int single_jpeg_write_packet(AVFormatContext *s, AVPacket *pkt)
47
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
78 {
468
60f897e8dd2d pass AVPacket into av_write_frame()
michael
parents: 277
diff changeset
79 put_buffer(&s->pb, pkt->data, pkt->size);
47
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
80 put_flush_packet(&s->pb);
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
81 return 1; /* no more data can be sent */
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
82 }
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
83
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
84 static int single_jpeg_write_trailer(AVFormatContext *s)
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
85 {
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
86 return 0;
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
87 }
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
88
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
89 static AVOutputFormat single_jpeg_format = {
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
90 "singlejpeg",
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
91 "single JPEG image",
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
92 "image/jpeg",
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
93 NULL, /* note: no extension to favorize jpeg multiple images match */
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
94 0,
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
95 CODEC_ID_NONE,
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
96 CODEC_ID_MJPEG,
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
97 single_jpeg_write_header,
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
98 single_jpeg_write_packet,
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
99 single_jpeg_write_trailer,
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
100 };
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
101
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
102 int jpeg_init(void)
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
103 {
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
104 av_register_output_format(&mpjpeg_format);
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
105 av_register_output_format(&single_jpeg_format);
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
106 return 0;
45308962220f added jpeg image encoder and decoder (new YUV handling routines and mjpeg codec fixes are necessary to go further)
bellard
parents:
diff changeset
107 }
277
a313e1080322 disable encoders where appropriate (patch courtesy of BERO
melanson
parents: 241
diff changeset
108 #endif //CONFIG_ENCODERS