1 /* 2 * RAW demuxers 3 * Copyright (C) 2007 Aurelien Jacobs <aurel@gnuage.org> 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 #ifndef AVFORMAT_RAWDEC_H 23 #define AVFORMAT_RAWDEC_H 24 25 #include "avformat.h" 26 #include "libavutil/log.h" 27 #include "libavutil/opt.h" 28 29 typedef struct FFRawVideoDemuxerContext { 30 const AVClass *class; /**< Class for private options. */ 31 int raw_packet_size; 32 char *video_size; /**< String describing video size, set by a private option. */ 33 char *pixel_format; /**< Set by a private option. */ 34 AVRational framerate; /**< AVRational describing framerate, set by a private option. */ 35 } FFRawVideoDemuxerContext; 36 37 typedef struct FFRawDemuxerContext { 38 const AVClass *class; /**< Class for private options. */ 39 int raw_packet_size; 40 } FFRawDemuxerContext; 41 42 extern const AVOption ff_rawvideo_options[]; 43 extern const AVOption ff_raw_options[]; 44 extern const AVClass ff_raw_demuxer_class; 45 46 int ff_raw_read_partial_packet(AVFormatContext *s, AVPacket *pkt); 47 48 int ff_raw_audio_read_header(AVFormatContext *s); 49 50 int ff_raw_video_read_header(AVFormatContext *s); 51 52 int ff_raw_subtitle_read_header(AVFormatContext *s); 53 54 int ff_raw_data_read_header(AVFormatContext *s); 55 56 #define FF_RAW_DEMUXER_CLASS(name)\ 57 static const AVClass name ## _demuxer_class = {\ 58 .class_name = #name " demuxer",\ 59 .item_name = av_default_item_name,\ 60 .option = ff_raw_options,\ 61 .version = LIBAVUTIL_VERSION_INT,\ 62 }; 63 64 #define FF_RAWVIDEO_DEMUXER_CLASS(name)\ 65 static const AVClass name ## _demuxer_class = {\ 66 .class_name = #name " demuxer",\ 67 .item_name = av_default_item_name,\ 68 .option = ff_rawvideo_options,\ 69 .version = LIBAVUTIL_VERSION_INT,\ 70 }; 71 72 #define FF_DEF_RAWVIDEO_DEMUXER2(shortname, longname, probe, ext, id, flag)\ 73 FF_RAWVIDEO_DEMUXER_CLASS(shortname)\ 74 AVInputFormat ff_ ## shortname ## _demuxer = {\ 75 .name = #shortname,\ 76 .long_name = NULL_IF_CONFIG_SMALL(longname),\ 77 .read_probe = probe,\ 78 .read_header = ff_raw_video_read_header,\ 79 .read_packet = ff_raw_read_partial_packet,\ 80 .extensions = ext,\ 81 .flags = flag,\ 82 .raw_codec_id = id,\ 83 .priv_data_size = sizeof(FFRawVideoDemuxerContext),\ 84 .priv_class = &shortname ## _demuxer_class,\ 85 }; 86 87 #define FF_DEF_RAWVIDEO_DEMUXER(shortname, longname, probe, ext, id)\ 88 FF_DEF_RAWVIDEO_DEMUXER2(shortname, longname, probe, ext, id, AVFMT_GENERIC_INDEX) 89 90 #define FF_RAWSUB_DEMUXER_CLASS(name)\ 91 static const AVClass name ## _demuxer_class = {\ 92 .class_name = #name " demuxer",\ 93 .item_name = av_default_item_name,\ 94 .option = ff_raw_options,\ 95 .version = LIBAVUTIL_VERSION_INT,\ 96 }; 97 98 #define FF_DEF_RAWSUB_DEMUXER(shortname, longname, probe, ext, id, flag)\ 99 FF_RAWSUB_DEMUXER_CLASS(shortname)\ 100 AVInputFormat ff_ ## shortname ## _demuxer = {\ 101 .name = #shortname,\ 102 .long_name = NULL_IF_CONFIG_SMALL(longname),\ 103 .read_probe = probe,\ 104 .read_header = ff_raw_subtitle_read_header,\ 105 .read_packet = ff_raw_read_partial_packet,\ 106 .extensions = ext,\ 107 .flags = flag,\ 108 .raw_codec_id = id,\ 109 .priv_data_size = sizeof(FFRawDemuxerContext),\ 110 .priv_class = &shortname ## _demuxer_class,\ 111 }; 112 113 #endif /* AVFORMAT_RAWDEC_H */ 114