1/* 2 * id RoQ (.roq) File muxer 3 * Copyright (c) 2007 Vitor Sessak 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 22#include "avformat.h" 23#include "rawenc.h" 24 25 26static int roq_write_header(struct AVFormatContext *s) 27{ 28 uint8_t header[] = { 29 0x84, 0x10, 0xFF, 0xFF, 0xFF, 0xFF, /* fps: */ 0x1E, 0x00 30 }; 31 int n; 32 AVCodecContext *avctx; 33 34// set the actual fps 35 for(n=0;n<s->nb_streams;n++) { 36 if ((avctx=s->streams[n]->codec)->codec_type == AVMEDIA_TYPE_VIDEO) { 37 unsigned int fps; 38 39 if (avctx->time_base.num != 1) { 40 av_log(avctx, AV_LOG_ERROR, "Frame rate must be integer\n"); 41 return AVERROR(EINVAL); 42 } 43 44 if ((fps=avctx->time_base.den) > 255) { 45 av_log(avctx, AV_LOG_ERROR, "Frame rate may not exceed 255fps\n"); 46 return AVERROR(EINVAL); 47 } 48 49 if (fps != 30) { 50 av_log(avctx, AV_LOG_WARNING, "For vintage compatibility fps must be 30\n"); 51 } 52 53 header[6] = fps; 54 break; 55 } 56 } 57 58 avio_write(s->pb, header, 8); 59 avio_flush(s->pb); 60 61 return 0; 62} 63 64AVOutputFormat ff_roq_muxer = { 65 .name = "roq", 66 .long_name = NULL_IF_CONFIG_SMALL("raw id RoQ"), 67 .extensions = "roq", 68 .audio_codec = AV_CODEC_ID_ROQ_DPCM, 69 .video_codec = AV_CODEC_ID_ROQ, 70 .write_header = roq_write_header, 71 .write_packet = ff_raw_write_packet, 72}; 73