rawdec.h 3.9 KB

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