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 "avformat.h" 22 23/* Multipart JPEG */ 24 25#define BOUNDARY_TAG "ffserver" 26 27static int mpjpeg_write_header(AVFormatContext *s) 28{ 29 uint8_t buf1[256]; 30 31 snprintf(buf1, sizeof(buf1), "--%s\n", BOUNDARY_TAG); 32 put_buffer(s->pb, buf1, strlen(buf1)); 33 put_flush_packet(s->pb); 34 return 0; 35} 36 37static int mpjpeg_write_packet(AVFormatContext *s, AVPacket *pkt) 38{ 39 uint8_t buf1[256]; 40 41 snprintf(buf1, sizeof(buf1), "Content-type: image/jpeg\n\n"); 42 put_buffer(s->pb, buf1, strlen(buf1)); 43 put_buffer(s->pb, pkt->data, pkt->size); 44 45 snprintf(buf1, sizeof(buf1), "\n--%s\n", BOUNDARY_TAG); 46 put_buffer(s->pb, buf1, strlen(buf1)); 47 put_flush_packet(s->pb); 48 return 0; 49} 50 51static int mpjpeg_write_trailer(AVFormatContext *s) 52{ 53 return 0; 54} 55 56AVOutputFormat mpjpeg_muxer = { 57 "mpjpeg", 58 NULL_IF_CONFIG_SMALL("MIME multipart JPEG format"), 59 "multipart/x-mixed-replace;boundary=" BOUNDARY_TAG, 60 "mjpg", 61 0, 62 CODEC_ID_NONE, 63 CODEC_ID_MJPEG, 64 mpjpeg_write_header, 65 mpjpeg_write_packet, 66 mpjpeg_write_trailer, 67}; 68