You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

332 lines
10KB

  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. #include "avformat.h"
  23. #include "rawenc.h"
  24. int ff_raw_write_packet(AVFormatContext *s, AVPacket *pkt)
  25. {
  26. avio_write(s->pb, pkt->data, pkt->size);
  27. return 0;
  28. }
  29. static int force_one_stream(AVFormatContext *s)
  30. {
  31. if (s->nb_streams != 1) {
  32. av_log(s, AV_LOG_ERROR, "%s files have exactly one stream\n",
  33. s->oformat->name);
  34. return AVERROR(EINVAL);
  35. }
  36. return 0;
  37. }
  38. /* Note: Do not forget to add new entries to the Makefile as well. */
  39. #if CONFIG_AC3_MUXER
  40. AVOutputFormat ff_ac3_muxer = {
  41. .name = "ac3",
  42. .long_name = NULL_IF_CONFIG_SMALL("raw AC-3"),
  43. .mime_type = "audio/x-ac3",
  44. .extensions = "ac3",
  45. .audio_codec = AV_CODEC_ID_AC3,
  46. .video_codec = AV_CODEC_ID_NONE,
  47. .write_header = force_one_stream,
  48. .write_packet = ff_raw_write_packet,
  49. .flags = AVFMT_NOTIMESTAMPS,
  50. };
  51. #endif
  52. #if CONFIG_ADX_MUXER
  53. AVOutputFormat ff_adx_muxer = {
  54. .name = "adx",
  55. .long_name = NULL_IF_CONFIG_SMALL("CRI ADX"),
  56. .extensions = "adx",
  57. .audio_codec = AV_CODEC_ID_ADPCM_ADX,
  58. .video_codec = AV_CODEC_ID_NONE,
  59. .write_header = force_one_stream,
  60. .write_packet = ff_raw_write_packet,
  61. .flags = AVFMT_NOTIMESTAMPS,
  62. };
  63. #endif
  64. #if CONFIG_CAVSVIDEO_MUXER
  65. AVOutputFormat ff_cavsvideo_muxer = {
  66. .name = "cavsvideo",
  67. .long_name = NULL_IF_CONFIG_SMALL("raw Chinese AVS (Audio Video Standard) video"),
  68. .extensions = "cavs",
  69. .audio_codec = AV_CODEC_ID_NONE,
  70. .video_codec = AV_CODEC_ID_CAVS,
  71. .write_header = force_one_stream,
  72. .write_packet = ff_raw_write_packet,
  73. .flags = AVFMT_NOTIMESTAMPS,
  74. };
  75. #endif
  76. #if CONFIG_DATA_MUXER
  77. AVOutputFormat ff_data_muxer = {
  78. .name = "data",
  79. .long_name = NULL_IF_CONFIG_SMALL("raw data"),
  80. .write_header = force_one_stream,
  81. .write_packet = ff_raw_write_packet,
  82. .flags = AVFMT_NOTIMESTAMPS,
  83. };
  84. #endif
  85. #if CONFIG_DIRAC_MUXER
  86. AVOutputFormat ff_dirac_muxer = {
  87. .name = "dirac",
  88. .long_name = NULL_IF_CONFIG_SMALL("raw Dirac"),
  89. .extensions = "drc",
  90. .audio_codec = AV_CODEC_ID_NONE,
  91. .video_codec = AV_CODEC_ID_DIRAC,
  92. .write_header = force_one_stream,
  93. .write_packet = ff_raw_write_packet,
  94. .flags = AVFMT_NOTIMESTAMPS,
  95. };
  96. #endif
  97. #if CONFIG_DNXHD_MUXER
  98. AVOutputFormat ff_dnxhd_muxer = {
  99. .name = "dnxhd",
  100. .long_name = NULL_IF_CONFIG_SMALL("raw DNxHD (SMPTE VC-3)"),
  101. .extensions = "dnxhd",
  102. .audio_codec = AV_CODEC_ID_NONE,
  103. .video_codec = AV_CODEC_ID_DNXHD,
  104. .write_header = force_one_stream,
  105. .write_packet = ff_raw_write_packet,
  106. .flags = AVFMT_NOTIMESTAMPS,
  107. };
  108. #endif
  109. #if CONFIG_DTS_MUXER
  110. AVOutputFormat ff_dts_muxer = {
  111. .name = "dts",
  112. .long_name = NULL_IF_CONFIG_SMALL("raw DTS"),
  113. .mime_type = "audio/x-dca",
  114. .extensions = "dts",
  115. .audio_codec = AV_CODEC_ID_DTS,
  116. .video_codec = AV_CODEC_ID_NONE,
  117. .write_header = force_one_stream,
  118. .write_packet = ff_raw_write_packet,
  119. .flags = AVFMT_NOTIMESTAMPS,
  120. };
  121. #endif
  122. #if CONFIG_EAC3_MUXER
  123. AVOutputFormat ff_eac3_muxer = {
  124. .name = "eac3",
  125. .long_name = NULL_IF_CONFIG_SMALL("raw E-AC-3"),
  126. .mime_type = "audio/x-eac3",
  127. .extensions = "eac3",
  128. .audio_codec = AV_CODEC_ID_EAC3,
  129. .video_codec = AV_CODEC_ID_NONE,
  130. .write_header = force_one_stream,
  131. .write_packet = ff_raw_write_packet,
  132. .flags = AVFMT_NOTIMESTAMPS,
  133. };
  134. #endif
  135. #if CONFIG_G722_MUXER
  136. AVOutputFormat ff_g722_muxer = {
  137. .name = "g722",
  138. .long_name = NULL_IF_CONFIG_SMALL("raw G.722"),
  139. .mime_type = "audio/G722",
  140. .extensions = "g722",
  141. .audio_codec = AV_CODEC_ID_ADPCM_G722,
  142. .video_codec = AV_CODEC_ID_NONE,
  143. .write_header = force_one_stream,
  144. .write_packet = ff_raw_write_packet,
  145. .flags = AVFMT_NOTIMESTAMPS,
  146. };
  147. #endif
  148. #if CONFIG_G723_1_MUXER
  149. AVOutputFormat ff_g723_1_muxer = {
  150. .name = "g723_1",
  151. .long_name = NULL_IF_CONFIG_SMALL("raw G.723.1"),
  152. .mime_type = "audio/g723",
  153. .extensions = "tco,rco",
  154. .audio_codec = AV_CODEC_ID_G723_1,
  155. .video_codec = AV_CODEC_ID_NONE,
  156. .write_header = force_one_stream,
  157. .write_packet = ff_raw_write_packet,
  158. .flags = AVFMT_NOTIMESTAMPS,
  159. };
  160. #endif
  161. #if CONFIG_H261_MUXER
  162. AVOutputFormat ff_h261_muxer = {
  163. .name = "h261",
  164. .long_name = NULL_IF_CONFIG_SMALL("raw H.261"),
  165. .mime_type = "video/x-h261",
  166. .extensions = "h261",
  167. .audio_codec = AV_CODEC_ID_NONE,
  168. .video_codec = AV_CODEC_ID_H261,
  169. .write_header = force_one_stream,
  170. .write_packet = ff_raw_write_packet,
  171. .flags = AVFMT_NOTIMESTAMPS,
  172. };
  173. #endif
  174. #if CONFIG_H263_MUXER
  175. AVOutputFormat ff_h263_muxer = {
  176. .name = "h263",
  177. .long_name = NULL_IF_CONFIG_SMALL("raw H.263"),
  178. .mime_type = "video/x-h263",
  179. .extensions = "h263",
  180. .audio_codec = AV_CODEC_ID_NONE,
  181. .video_codec = AV_CODEC_ID_H263,
  182. .write_header = force_one_stream,
  183. .write_packet = ff_raw_write_packet,
  184. .flags = AVFMT_NOTIMESTAMPS,
  185. };
  186. #endif
  187. #if CONFIG_H264_MUXER
  188. AVOutputFormat ff_h264_muxer = {
  189. .name = "h264",
  190. .long_name = NULL_IF_CONFIG_SMALL("raw H.264 video"),
  191. .extensions = "h264",
  192. .audio_codec = AV_CODEC_ID_NONE,
  193. .video_codec = AV_CODEC_ID_H264,
  194. .write_header = force_one_stream,
  195. .write_packet = ff_raw_write_packet,
  196. .flags = AVFMT_NOTIMESTAMPS,
  197. };
  198. #endif
  199. #if CONFIG_HEVC_MUXER
  200. AVOutputFormat ff_hevc_muxer = {
  201. .name = "hevc",
  202. .long_name = NULL_IF_CONFIG_SMALL("raw HEVC video"),
  203. .extensions = "hevc",
  204. .audio_codec = AV_CODEC_ID_NONE,
  205. .video_codec = AV_CODEC_ID_HEVC,
  206. .write_packet = ff_raw_write_packet,
  207. .flags = AVFMT_NOTIMESTAMPS,
  208. };
  209. #endif
  210. #if CONFIG_M4V_MUXER
  211. AVOutputFormat ff_m4v_muxer = {
  212. .name = "m4v",
  213. .long_name = NULL_IF_CONFIG_SMALL("raw MPEG-4 video"),
  214. .extensions = "m4v",
  215. .audio_codec = AV_CODEC_ID_NONE,
  216. .video_codec = AV_CODEC_ID_MPEG4,
  217. .write_packet = ff_raw_write_packet,
  218. .flags = AVFMT_NOTIMESTAMPS,
  219. };
  220. #endif
  221. #if CONFIG_MJPEG_MUXER
  222. AVOutputFormat ff_mjpeg_muxer = {
  223. .name = "mjpeg",
  224. .long_name = NULL_IF_CONFIG_SMALL("raw MJPEG video"),
  225. .mime_type = "video/x-mjpeg",
  226. .extensions = "mjpg,mjpeg",
  227. .audio_codec = AV_CODEC_ID_NONE,
  228. .video_codec = AV_CODEC_ID_MJPEG,
  229. .write_header = force_one_stream,
  230. .write_packet = ff_raw_write_packet,
  231. .flags = AVFMT_NOTIMESTAMPS,
  232. };
  233. #endif
  234. #if CONFIG_MLP_MUXER
  235. AVOutputFormat ff_mlp_muxer = {
  236. .name = "mlp",
  237. .long_name = NULL_IF_CONFIG_SMALL("raw MLP"),
  238. .extensions = "mlp",
  239. .audio_codec = AV_CODEC_ID_MLP,
  240. .video_codec = AV_CODEC_ID_NONE,
  241. .write_header = force_one_stream,
  242. .write_packet = ff_raw_write_packet,
  243. .flags = AVFMT_NOTIMESTAMPS,
  244. };
  245. #endif
  246. #if CONFIG_MPEG1VIDEO_MUXER
  247. AVOutputFormat ff_mpeg1video_muxer = {
  248. .name = "mpeg1video",
  249. .long_name = NULL_IF_CONFIG_SMALL("raw MPEG-1 video"),
  250. .mime_type = "video/mpeg",
  251. .extensions = "mpg,mpeg,m1v",
  252. .audio_codec = AV_CODEC_ID_NONE,
  253. .video_codec = AV_CODEC_ID_MPEG1VIDEO,
  254. .write_header = force_one_stream,
  255. .write_packet = ff_raw_write_packet,
  256. .flags = AVFMT_NOTIMESTAMPS,
  257. };
  258. #endif
  259. #if CONFIG_MPEG2VIDEO_MUXER
  260. AVOutputFormat ff_mpeg2video_muxer = {
  261. .name = "mpeg2video",
  262. .long_name = NULL_IF_CONFIG_SMALL("raw MPEG-2 video"),
  263. .extensions = "m2v",
  264. .audio_codec = AV_CODEC_ID_NONE,
  265. .video_codec = AV_CODEC_ID_MPEG2VIDEO,
  266. .write_header = force_one_stream,
  267. .write_packet = ff_raw_write_packet,
  268. .flags = AVFMT_NOTIMESTAMPS,
  269. };
  270. #endif
  271. #if CONFIG_RAWVIDEO_MUXER
  272. AVOutputFormat ff_rawvideo_muxer = {
  273. .name = "rawvideo",
  274. .long_name = NULL_IF_CONFIG_SMALL("raw video"),
  275. .extensions = "yuv,rgb",
  276. .audio_codec = AV_CODEC_ID_NONE,
  277. .video_codec = AV_CODEC_ID_RAWVIDEO,
  278. .write_packet = ff_raw_write_packet,
  279. .flags = AVFMT_NOTIMESTAMPS,
  280. };
  281. #endif
  282. #if CONFIG_TRUEHD_MUXER
  283. AVOutputFormat ff_truehd_muxer = {
  284. .name = "truehd",
  285. .long_name = NULL_IF_CONFIG_SMALL("raw TrueHD"),
  286. .extensions = "thd",
  287. .audio_codec = AV_CODEC_ID_TRUEHD,
  288. .video_codec = AV_CODEC_ID_NONE,
  289. .write_header = force_one_stream,
  290. .write_packet = ff_raw_write_packet,
  291. .flags = AVFMT_NOTIMESTAMPS,
  292. };
  293. #endif
  294. #if CONFIG_VC1_MUXER
  295. AVOutputFormat ff_vc1_muxer = {
  296. .name = "vc1",
  297. .long_name = NULL_IF_CONFIG_SMALL("raw VC-1 video"),
  298. .extensions = "vc1",
  299. .audio_codec = AV_CODEC_ID_NONE,
  300. .video_codec = AV_CODEC_ID_VC1,
  301. .write_header = force_one_stream,
  302. .write_packet = ff_raw_write_packet,
  303. .flags = AVFMT_NOTIMESTAMPS,
  304. };
  305. #endif