convert_from.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391
  1. /*
  2. * Copyright 2011 The LibYuv Project Authors. All rights reserved.
  3. *
  4. * Use of this source code is governed by a BSD-style license
  5. * that can be found in the LICENSE file in the root of the source
  6. * tree. An additional intellectual property rights grant can be found
  7. * in the file PATENTS. All contributing project authors may
  8. * be found in the AUTHORS file in the root of the source tree.
  9. */
  10. #ifndef INCLUDE_LIBYUV_CONVERT_FROM_H_
  11. #define INCLUDE_LIBYUV_CONVERT_FROM_H_
  12. #include "libyuv/basic_types.h"
  13. #include "libyuv/rotate.h"
  14. #ifdef __cplusplus
  15. namespace libyuv {
  16. extern "C" {
  17. #endif
  18. // See Also convert.h for conversions from formats to I420.
  19. // Convert 8 bit YUV to 10 bit.
  20. #define H420ToH010 I420ToI010
  21. LIBYUV_API
  22. int I420ToI010(const uint8_t* src_y,
  23. int src_stride_y,
  24. const uint8_t* src_u,
  25. int src_stride_u,
  26. const uint8_t* src_v,
  27. int src_stride_v,
  28. uint16_t* dst_y,
  29. int dst_stride_y,
  30. uint16_t* dst_u,
  31. int dst_stride_u,
  32. uint16_t* dst_v,
  33. int dst_stride_v,
  34. int width,
  35. int height);
  36. LIBYUV_API
  37. int I420ToI422(const uint8_t* src_y,
  38. int src_stride_y,
  39. const uint8_t* src_u,
  40. int src_stride_u,
  41. const uint8_t* src_v,
  42. int src_stride_v,
  43. uint8_t* dst_y,
  44. int dst_stride_y,
  45. uint8_t* dst_u,
  46. int dst_stride_u,
  47. uint8_t* dst_v,
  48. int dst_stride_v,
  49. int width,
  50. int height);
  51. LIBYUV_API
  52. int I420ToI444(const uint8_t* src_y,
  53. int src_stride_y,
  54. const uint8_t* src_u,
  55. int src_stride_u,
  56. const uint8_t* src_v,
  57. int src_stride_v,
  58. uint8_t* dst_y,
  59. int dst_stride_y,
  60. uint8_t* dst_u,
  61. int dst_stride_u,
  62. uint8_t* dst_v,
  63. int dst_stride_v,
  64. int width,
  65. int height);
  66. // Copy to I400. Source can be I420, I422, I444, I400, NV12 or NV21.
  67. LIBYUV_API
  68. int I400Copy(const uint8_t* src_y,
  69. int src_stride_y,
  70. uint8_t* dst_y,
  71. int dst_stride_y,
  72. int width,
  73. int height);
  74. LIBYUV_API
  75. int I420ToNV12(const uint8_t* src_y,
  76. int src_stride_y,
  77. const uint8_t* src_u,
  78. int src_stride_u,
  79. const uint8_t* src_v,
  80. int src_stride_v,
  81. uint8_t* dst_y,
  82. int dst_stride_y,
  83. uint8_t* dst_uv,
  84. int dst_stride_uv,
  85. int width,
  86. int height);
  87. LIBYUV_API
  88. int I420ToNV21(const uint8_t* src_y,
  89. int src_stride_y,
  90. const uint8_t* src_u,
  91. int src_stride_u,
  92. const uint8_t* src_v,
  93. int src_stride_v,
  94. uint8_t* dst_y,
  95. int dst_stride_y,
  96. uint8_t* dst_vu,
  97. int dst_stride_vu,
  98. int width,
  99. int height);
  100. LIBYUV_API
  101. int I420ToYUY2(const uint8_t* src_y,
  102. int src_stride_y,
  103. const uint8_t* src_u,
  104. int src_stride_u,
  105. const uint8_t* src_v,
  106. int src_stride_v,
  107. uint8_t* dst_yuy2,
  108. int dst_stride_yuy2,
  109. int width,
  110. int height);
  111. LIBYUV_API
  112. int I420ToUYVY(const uint8_t* src_y,
  113. int src_stride_y,
  114. const uint8_t* src_u,
  115. int src_stride_u,
  116. const uint8_t* src_v,
  117. int src_stride_v,
  118. uint8_t* dst_uyvy,
  119. int dst_stride_uyvy,
  120. int width,
  121. int height);
  122. LIBYUV_API
  123. int I420ToARGB(const uint8_t* src_y,
  124. int src_stride_y,
  125. const uint8_t* src_u,
  126. int src_stride_u,
  127. const uint8_t* src_v,
  128. int src_stride_v,
  129. uint8_t* dst_argb,
  130. int dst_stride_argb,
  131. int width,
  132. int height);
  133. LIBYUV_API
  134. int I420ToBGRA(const uint8_t* src_y,
  135. int src_stride_y,
  136. const uint8_t* src_u,
  137. int src_stride_u,
  138. const uint8_t* src_v,
  139. int src_stride_v,
  140. uint8_t* dst_bgra,
  141. int dst_stride_bgra,
  142. int width,
  143. int height);
  144. LIBYUV_API
  145. int I420ToABGR(const uint8_t* src_y,
  146. int src_stride_y,
  147. const uint8_t* src_u,
  148. int src_stride_u,
  149. const uint8_t* src_v,
  150. int src_stride_v,
  151. uint8_t* dst_abgr,
  152. int dst_stride_abgr,
  153. int width,
  154. int height);
  155. LIBYUV_API
  156. int I420ToRGBA(const uint8_t* src_y,
  157. int src_stride_y,
  158. const uint8_t* src_u,
  159. int src_stride_u,
  160. const uint8_t* src_v,
  161. int src_stride_v,
  162. uint8_t* dst_rgba,
  163. int dst_stride_rgba,
  164. int width,
  165. int height);
  166. LIBYUV_API
  167. int I420ToRGB24(const uint8_t* src_y,
  168. int src_stride_y,
  169. const uint8_t* src_u,
  170. int src_stride_u,
  171. const uint8_t* src_v,
  172. int src_stride_v,
  173. uint8_t* dst_rgb24,
  174. int dst_stride_rgb24,
  175. int width,
  176. int height);
  177. LIBYUV_API
  178. int I420ToRAW(const uint8_t* src_y,
  179. int src_stride_y,
  180. const uint8_t* src_u,
  181. int src_stride_u,
  182. const uint8_t* src_v,
  183. int src_stride_v,
  184. uint8_t* dst_raw,
  185. int dst_stride_raw,
  186. int width,
  187. int height);
  188. LIBYUV_API
  189. int H420ToRGB24(const uint8_t* src_y,
  190. int src_stride_y,
  191. const uint8_t* src_u,
  192. int src_stride_u,
  193. const uint8_t* src_v,
  194. int src_stride_v,
  195. uint8_t* dst_rgb24,
  196. int dst_stride_rgb24,
  197. int width,
  198. int height);
  199. LIBYUV_API
  200. int H420ToRAW(const uint8_t* src_y,
  201. int src_stride_y,
  202. const uint8_t* src_u,
  203. int src_stride_u,
  204. const uint8_t* src_v,
  205. int src_stride_v,
  206. uint8_t* dst_raw,
  207. int dst_stride_raw,
  208. int width,
  209. int height);
  210. LIBYUV_API
  211. int J420ToRGB24(const uint8_t* src_y,
  212. int src_stride_y,
  213. const uint8_t* src_u,
  214. int src_stride_u,
  215. const uint8_t* src_v,
  216. int src_stride_v,
  217. uint8_t* dst_rgb24,
  218. int dst_stride_rgb24,
  219. int width,
  220. int height);
  221. LIBYUV_API
  222. int J420ToRAW(const uint8_t* src_y,
  223. int src_stride_y,
  224. const uint8_t* src_u,
  225. int src_stride_u,
  226. const uint8_t* src_v,
  227. int src_stride_v,
  228. uint8_t* dst_raw,
  229. int dst_stride_raw,
  230. int width,
  231. int height);
  232. LIBYUV_API
  233. int I420ToRGB565(const uint8_t* src_y,
  234. int src_stride_y,
  235. const uint8_t* src_u,
  236. int src_stride_u,
  237. const uint8_t* src_v,
  238. int src_stride_v,
  239. uint8_t* dst_rgb565,
  240. int dst_stride_rgb565,
  241. int width,
  242. int height);
  243. LIBYUV_API
  244. int J420ToRGB565(const uint8_t* src_y,
  245. int src_stride_y,
  246. const uint8_t* src_u,
  247. int src_stride_u,
  248. const uint8_t* src_v,
  249. int src_stride_v,
  250. uint8_t* dst_rgb565,
  251. int dst_stride_rgb565,
  252. int width,
  253. int height);
  254. LIBYUV_API
  255. int H420ToRGB565(const uint8_t* src_y,
  256. int src_stride_y,
  257. const uint8_t* src_u,
  258. int src_stride_u,
  259. const uint8_t* src_v,
  260. int src_stride_v,
  261. uint8_t* dst_rgb565,
  262. int dst_stride_rgb565,
  263. int width,
  264. int height);
  265. LIBYUV_API
  266. int I422ToRGB565(const uint8_t* src_y,
  267. int src_stride_y,
  268. const uint8_t* src_u,
  269. int src_stride_u,
  270. const uint8_t* src_v,
  271. int src_stride_v,
  272. uint8_t* dst_rgb565,
  273. int dst_stride_rgb565,
  274. int width,
  275. int height);
  276. // Convert I420 To RGB565 with 4x4 dither matrix (16 bytes).
  277. // Values in dither matrix from 0 to 7 recommended.
  278. // The order of the dither matrix is first byte is upper left.
  279. LIBYUV_API
  280. int I420ToRGB565Dither(const uint8_t* src_y,
  281. int src_stride_y,
  282. const uint8_t* src_u,
  283. int src_stride_u,
  284. const uint8_t* src_v,
  285. int src_stride_v,
  286. uint8_t* dst_rgb565,
  287. int dst_stride_rgb565,
  288. const uint8_t* dither4x4,
  289. int width,
  290. int height);
  291. LIBYUV_API
  292. int I420ToARGB1555(const uint8_t* src_y,
  293. int src_stride_y,
  294. const uint8_t* src_u,
  295. int src_stride_u,
  296. const uint8_t* src_v,
  297. int src_stride_v,
  298. uint8_t* dst_argb1555,
  299. int dst_stride_argb1555,
  300. int width,
  301. int height);
  302. LIBYUV_API
  303. int I420ToARGB4444(const uint8_t* src_y,
  304. int src_stride_y,
  305. const uint8_t* src_u,
  306. int src_stride_u,
  307. const uint8_t* src_v,
  308. int src_stride_v,
  309. uint8_t* dst_argb4444,
  310. int dst_stride_argb4444,
  311. int width,
  312. int height);
  313. // Convert I420 to AR30.
  314. LIBYUV_API
  315. int I420ToAR30(const uint8_t* src_y,
  316. int src_stride_y,
  317. const uint8_t* src_u,
  318. int src_stride_u,
  319. const uint8_t* src_v,
  320. int src_stride_v,
  321. uint8_t* dst_ar30,
  322. int dst_stride_ar30,
  323. int width,
  324. int height);
  325. // Convert H420 to AR30.
  326. LIBYUV_API
  327. int H420ToAR30(const uint8_t* src_y,
  328. int src_stride_y,
  329. const uint8_t* src_u,
  330. int src_stride_u,
  331. const uint8_t* src_v,
  332. int src_stride_v,
  333. uint8_t* dst_ar30,
  334. int dst_stride_ar30,
  335. int width,
  336. int height);
  337. // Convert I420 to specified format.
  338. // "dst_sample_stride" is bytes in a row for the destination. Pass 0 if the
  339. // buffer has contiguous rows. Can be negative. A multiple of 16 is optimal.
  340. LIBYUV_API
  341. int ConvertFromI420(const uint8_t* y,
  342. int y_stride,
  343. const uint8_t* u,
  344. int u_stride,
  345. const uint8_t* v,
  346. int v_stride,
  347. uint8_t* dst_sample,
  348. int dst_sample_stride,
  349. int width,
  350. int height,
  351. uint32_t fourcc);
  352. #ifdef __cplusplus
  353. } // extern "C"
  354. } // namespace libyuv
  355. #endif
  356. #endif // INCLUDE_LIBYUV_CONVERT_FROM_H_