Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * RAW muxers
  3.  * Copyright (c) 2001 Fabrice Bellard
  4.  * Copyright (c) 2005 Alex Beregszaszi
  5.  *
  6.  * This file is part of FFmpeg.
  7.  *
  8.  * FFmpeg is free software; you can redistribute it and/or
  9.  * modify it under the terms of the GNU Lesser General Public
  10.  * License as published by the Free Software Foundation; either
  11.  * version 2.1 of the License, or (at your option) any later version.
  12.  *
  13.  * FFmpeg is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  16.  * Lesser General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU Lesser General Public
  19.  * License along with FFmpeg; if not, write to the Free Software
  20.  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  21.  */
  22.  
  23. #include "avformat.h"
  24. #include "rawenc.h"
  25.  
  26. int ff_raw_write_packet(AVFormatContext *s, AVPacket *pkt)
  27. {
  28.     avio_write(s->pb, pkt->data, pkt->size);
  29.     return 0;
  30. }
  31.  
  32. static int force_one_stream(AVFormatContext *s)
  33. {
  34.     if (s->nb_streams != 1) {
  35.         av_log(s, AV_LOG_ERROR, "%s files have exactly one stream\n",
  36.                s->oformat->name);
  37.         return AVERROR(EINVAL);
  38.     }
  39.     return 0;
  40. }
  41.  
  42. /* Note: Do not forget to add new entries to the Makefile as well. */
  43.  
  44. #if CONFIG_AC3_MUXER
  45. AVOutputFormat ff_ac3_muxer = {
  46.     .name              = "ac3",
  47.     .long_name         = NULL_IF_CONFIG_SMALL("raw AC-3"),
  48.     .mime_type         = "audio/x-ac3",
  49.     .extensions        = "ac3",
  50.     .audio_codec       = AV_CODEC_ID_AC3,
  51.     .video_codec       = AV_CODEC_ID_NONE,
  52.     .write_header      = force_one_stream,
  53.     .write_packet      = ff_raw_write_packet,
  54.     .flags             = AVFMT_NOTIMESTAMPS,
  55. };
  56. #endif
  57.  
  58. #if CONFIG_ADX_MUXER
  59.  
  60. static int adx_write_trailer(AVFormatContext *s)
  61. {
  62.     AVIOContext *pb = s->pb;
  63.     AVCodecContext *avctx = s->streams[0]->codec;
  64.  
  65.     if (pb->seekable) {
  66.         int64_t file_size = avio_tell(pb);
  67.         uint64_t sample_count = (file_size - 36) / avctx->channels / 18 * 32;
  68.         if (sample_count <= UINT32_MAX) {
  69.             avio_seek(pb, 12, SEEK_SET);
  70.             avio_wb32(pb, sample_count);
  71.             avio_seek(pb, file_size, SEEK_SET);
  72.         }
  73.     }
  74.  
  75.     return 0;
  76. }
  77.  
  78. AVOutputFormat ff_adx_muxer = {
  79.     .name              = "adx",
  80.     .long_name         = NULL_IF_CONFIG_SMALL("CRI ADX"),
  81.     .extensions        = "adx",
  82.     .audio_codec       = AV_CODEC_ID_ADPCM_ADX,
  83.     .video_codec       = AV_CODEC_ID_NONE,
  84.     .write_header      = force_one_stream,
  85.     .write_packet      = ff_raw_write_packet,
  86.     .write_trailer     = adx_write_trailer,
  87.     .flags             = AVFMT_NOTIMESTAMPS,
  88. };
  89. #endif
  90.  
  91. #if CONFIG_CAVSVIDEO_MUXER
  92. AVOutputFormat ff_cavsvideo_muxer = {
  93.     .name              = "cavsvideo",
  94.     .long_name         = NULL_IF_CONFIG_SMALL("raw Chinese AVS (Audio Video Standard) video"),
  95.     .extensions        = "cavs",
  96.     .audio_codec       = AV_CODEC_ID_NONE,
  97.     .video_codec       = AV_CODEC_ID_CAVS,
  98.     .write_header      = force_one_stream,
  99.     .write_packet      = ff_raw_write_packet,
  100.     .flags             = AVFMT_NOTIMESTAMPS,
  101. };
  102. #endif
  103.  
  104. #if CONFIG_DATA_MUXER
  105. AVOutputFormat ff_data_muxer = {
  106.     .name              = "data",
  107.     .long_name         = NULL_IF_CONFIG_SMALL("raw data"),
  108.     .write_header      = force_one_stream,
  109.     .write_packet      = ff_raw_write_packet,
  110.     .flags             = AVFMT_NOTIMESTAMPS,
  111. };
  112. #endif
  113.  
  114. #if CONFIG_DIRAC_MUXER
  115. AVOutputFormat ff_dirac_muxer = {
  116.     .name              = "dirac",
  117.     .long_name         = NULL_IF_CONFIG_SMALL("raw Dirac"),
  118.     .extensions        = "drc",
  119.     .audio_codec       = AV_CODEC_ID_NONE,
  120.     .video_codec       = AV_CODEC_ID_DIRAC,
  121.     .write_header      = force_one_stream,
  122.     .write_packet      = ff_raw_write_packet,
  123.     .flags             = AVFMT_NOTIMESTAMPS,
  124. };
  125. #endif
  126.  
  127. #if CONFIG_DNXHD_MUXER
  128. AVOutputFormat ff_dnxhd_muxer = {
  129.     .name              = "dnxhd",
  130.     .long_name         = NULL_IF_CONFIG_SMALL("raw DNxHD (SMPTE VC-3)"),
  131.     .extensions        = "dnxhd",
  132.     .audio_codec       = AV_CODEC_ID_NONE,
  133.     .video_codec       = AV_CODEC_ID_DNXHD,
  134.     .write_header      = force_one_stream,
  135.     .write_packet      = ff_raw_write_packet,
  136.     .flags             = AVFMT_NOTIMESTAMPS,
  137. };
  138. #endif
  139.  
  140. #if CONFIG_DTS_MUXER
  141. AVOutputFormat ff_dts_muxer = {
  142.     .name              = "dts",
  143.     .long_name         = NULL_IF_CONFIG_SMALL("raw DTS"),
  144.     .mime_type         = "audio/x-dca",
  145.     .extensions        = "dts",
  146.     .audio_codec       = AV_CODEC_ID_DTS,
  147.     .video_codec       = AV_CODEC_ID_NONE,
  148.     .write_header      = force_one_stream,
  149.     .write_packet      = ff_raw_write_packet,
  150.     .flags             = AVFMT_NOTIMESTAMPS,
  151. };
  152. #endif
  153.  
  154. #if CONFIG_EAC3_MUXER
  155. AVOutputFormat ff_eac3_muxer = {
  156.     .name              = "eac3",
  157.     .long_name         = NULL_IF_CONFIG_SMALL("raw E-AC-3"),
  158.     .mime_type         = "audio/x-eac3",
  159.     .extensions        = "eac3",
  160.     .audio_codec       = AV_CODEC_ID_EAC3,
  161.     .video_codec       = AV_CODEC_ID_NONE,
  162.     .write_header      = force_one_stream,
  163.     .write_packet      = ff_raw_write_packet,
  164.     .flags             = AVFMT_NOTIMESTAMPS,
  165. };
  166. #endif
  167.  
  168. #if CONFIG_G722_MUXER
  169. AVOutputFormat ff_g722_muxer = {
  170.     .name              = "g722",
  171.     .long_name         = NULL_IF_CONFIG_SMALL("raw G.722"),
  172.     .mime_type         = "audio/G722",
  173.     .extensions        = "g722",
  174.     .audio_codec       = AV_CODEC_ID_ADPCM_G722,
  175.     .video_codec       = AV_CODEC_ID_NONE,
  176.     .write_header      = force_one_stream,
  177.     .write_packet      = ff_raw_write_packet,
  178.     .flags             = AVFMT_NOTIMESTAMPS,
  179. };
  180. #endif
  181.  
  182. #if CONFIG_G723_1_MUXER
  183. AVOutputFormat ff_g723_1_muxer = {
  184.     .name              = "g723_1",
  185.     .long_name         = NULL_IF_CONFIG_SMALL("raw G.723.1"),
  186.     .mime_type         = "audio/g723",
  187.     .extensions        = "tco,rco",
  188.     .audio_codec       = AV_CODEC_ID_G723_1,
  189.     .video_codec       = AV_CODEC_ID_NONE,
  190.     .write_header      = force_one_stream,
  191.     .write_packet      = ff_raw_write_packet,
  192.     .flags             = AVFMT_NOTIMESTAMPS,
  193. };
  194. #endif
  195.  
  196. #if CONFIG_H261_MUXER
  197. AVOutputFormat ff_h261_muxer = {
  198.     .name              = "h261",
  199.     .long_name         = NULL_IF_CONFIG_SMALL("raw H.261"),
  200.     .mime_type         = "video/x-h261",
  201.     .extensions        = "h261",
  202.     .audio_codec       = AV_CODEC_ID_NONE,
  203.     .video_codec       = AV_CODEC_ID_H261,
  204.     .write_header      = force_one_stream,
  205.     .write_packet      = ff_raw_write_packet,
  206.     .flags             = AVFMT_NOTIMESTAMPS,
  207. };
  208. #endif
  209.  
  210. #if CONFIG_H263_MUXER
  211. AVOutputFormat ff_h263_muxer = {
  212.     .name              = "h263",
  213.     .long_name         = NULL_IF_CONFIG_SMALL("raw H.263"),
  214.     .mime_type         = "video/x-h263",
  215.     .extensions        = "h263",
  216.     .audio_codec       = AV_CODEC_ID_NONE,
  217.     .video_codec       = AV_CODEC_ID_H263,
  218.     .write_header      = force_one_stream,
  219.     .write_packet      = ff_raw_write_packet,
  220.     .flags             = AVFMT_NOTIMESTAMPS,
  221. };
  222. #endif
  223.  
  224. #if CONFIG_H264_MUXER
  225. AVOutputFormat ff_h264_muxer = {
  226.     .name              = "h264",
  227.     .long_name         = NULL_IF_CONFIG_SMALL("raw H.264 video"),
  228.     .extensions        = "h264,264",
  229.     .audio_codec       = AV_CODEC_ID_NONE,
  230.     .video_codec       = AV_CODEC_ID_H264,
  231.     .write_header      = force_one_stream,
  232.     .write_packet      = ff_raw_write_packet,
  233.     .flags             = AVFMT_NOTIMESTAMPS,
  234. };
  235. #endif
  236.  
  237. #if CONFIG_HEVC_MUXER
  238. AVOutputFormat ff_hevc_muxer = {
  239.     .name              = "hevc",
  240.     .long_name         = NULL_IF_CONFIG_SMALL("raw HEVC video"),
  241.     .extensions        = "hevc",
  242.     .audio_codec       = AV_CODEC_ID_NONE,
  243.     .video_codec       = AV_CODEC_ID_HEVC,
  244.     .write_packet      = ff_raw_write_packet,
  245.     .flags             = AVFMT_NOTIMESTAMPS,
  246. };
  247. #endif
  248.  
  249. #if CONFIG_M4V_MUXER
  250. AVOutputFormat ff_m4v_muxer = {
  251.     .name              = "m4v",
  252.     .long_name         = NULL_IF_CONFIG_SMALL("raw MPEG-4 video"),
  253.     .extensions        = "m4v",
  254.     .audio_codec       = AV_CODEC_ID_NONE,
  255.     .video_codec       = AV_CODEC_ID_MPEG4,
  256.     .write_packet      = ff_raw_write_packet,
  257.     .flags             = AVFMT_NOTIMESTAMPS,
  258. };
  259. #endif
  260.  
  261. #if CONFIG_MJPEG_MUXER
  262. AVOutputFormat ff_mjpeg_muxer = {
  263.     .name              = "mjpeg",
  264.     .long_name         = NULL_IF_CONFIG_SMALL("raw MJPEG video"),
  265.     .mime_type         = "video/x-mjpeg",
  266.     .extensions        = "mjpg,mjpeg",
  267.     .audio_codec       = AV_CODEC_ID_NONE,
  268.     .video_codec       = AV_CODEC_ID_MJPEG,
  269.     .write_header      = force_one_stream,
  270.     .write_packet      = ff_raw_write_packet,
  271.     .flags             = AVFMT_NOTIMESTAMPS,
  272. };
  273. #endif
  274.  
  275. #if CONFIG_SINGLEJPEG_MUXER
  276. AVOutputFormat ff_singlejpeg_muxer = {
  277.     .name              = "singlejpeg",
  278.     .long_name         = NULL_IF_CONFIG_SMALL("JPEG single image"),
  279.     .mime_type         = "image/jpeg",
  280.     .audio_codec       = AV_CODEC_ID_NONE,
  281.     .video_codec       = AV_CODEC_ID_MJPEG,
  282.     .write_packet      = ff_raw_write_packet,
  283.     .flags             = AVFMT_NOTIMESTAMPS,
  284.     .write_header      = force_one_stream,
  285. };
  286. #endif
  287.  
  288. #if CONFIG_MLP_MUXER
  289. AVOutputFormat ff_mlp_muxer = {
  290.     .name              = "mlp",
  291.     .long_name         = NULL_IF_CONFIG_SMALL("raw MLP"),
  292.     .extensions        = "mlp",
  293.     .audio_codec       = AV_CODEC_ID_MLP,
  294.     .video_codec       = AV_CODEC_ID_NONE,
  295.     .write_header      = force_one_stream,
  296.     .write_packet      = ff_raw_write_packet,
  297.     .flags             = AVFMT_NOTIMESTAMPS,
  298. };
  299. #endif
  300.  
  301. #if CONFIG_MPEG1VIDEO_MUXER
  302. AVOutputFormat ff_mpeg1video_muxer = {
  303.     .name              = "mpeg1video",
  304.     .long_name         = NULL_IF_CONFIG_SMALL("raw MPEG-1 video"),
  305.     .mime_type         = "video/mpeg",
  306.     .extensions        = "mpg,mpeg,m1v",
  307.     .audio_codec       = AV_CODEC_ID_NONE,
  308.     .video_codec       = AV_CODEC_ID_MPEG1VIDEO,
  309.     .write_header      = force_one_stream,
  310.     .write_packet      = ff_raw_write_packet,
  311.     .flags             = AVFMT_NOTIMESTAMPS,
  312. };
  313. #endif
  314.  
  315. #if CONFIG_MPEG2VIDEO_MUXER
  316. AVOutputFormat ff_mpeg2video_muxer = {
  317.     .name              = "mpeg2video",
  318.     .long_name         = NULL_IF_CONFIG_SMALL("raw MPEG-2 video"),
  319.     .extensions        = "m2v",
  320.     .audio_codec       = AV_CODEC_ID_NONE,
  321.     .video_codec       = AV_CODEC_ID_MPEG2VIDEO,
  322.     .write_header      = force_one_stream,
  323.     .write_packet      = ff_raw_write_packet,
  324.     .flags             = AVFMT_NOTIMESTAMPS,
  325. };
  326. #endif
  327.  
  328. #if CONFIG_RAWVIDEO_MUXER
  329. AVOutputFormat ff_rawvideo_muxer = {
  330.     .name              = "rawvideo",
  331.     .long_name         = NULL_IF_CONFIG_SMALL("raw video"),
  332.     .extensions        = "yuv,rgb",
  333.     .audio_codec       = AV_CODEC_ID_NONE,
  334.     .video_codec       = AV_CODEC_ID_RAWVIDEO,
  335.     .write_packet      = ff_raw_write_packet,
  336.     .flags             = AVFMT_NOTIMESTAMPS,
  337. };
  338. #endif
  339.  
  340. #if CONFIG_TRUEHD_MUXER
  341. AVOutputFormat ff_truehd_muxer = {
  342.     .name              = "truehd",
  343.     .long_name         = NULL_IF_CONFIG_SMALL("raw TrueHD"),
  344.     .extensions        = "thd",
  345.     .audio_codec       = AV_CODEC_ID_TRUEHD,
  346.     .video_codec       = AV_CODEC_ID_NONE,
  347.     .write_header      = force_one_stream,
  348.     .write_packet      = ff_raw_write_packet,
  349.     .flags             = AVFMT_NOTIMESTAMPS,
  350. };
  351. #endif
  352.  
  353. #if CONFIG_VC1_MUXER
  354. AVOutputFormat ff_vc1_muxer = {
  355.     .name              = "vc1",
  356.     .long_name         = NULL_IF_CONFIG_SMALL("raw VC-1 video"),
  357.     .extensions        = "vc1",
  358.     .audio_codec       = AV_CODEC_ID_NONE,
  359.     .video_codec       = AV_CODEC_ID_VC1,
  360.     .write_header      = force_one_stream,
  361.     .write_packet      = ff_raw_write_packet,
  362.     .flags             = AVFMT_NOTIMESTAMPS,
  363. };
  364. #endif
  365.