PageRenderTime 80ms CodeModel.GetById 22ms RepoModel.GetById 1ms app.codeStats 1ms

/src/media_tools/av_parsers.c

https://github.com/svettom/gpac
C | 4542 lines | 3823 code | 483 blank | 236 comment | 965 complexity | 4d74b05e1a383deca7966dc5f407e1fd MD5 | raw file
Possible License(s): LGPL-2.1, GPL-2.0
  1. /*
  2. * GPAC - Multimedia Framework C SDK
  3. *
  4. * Authors: Jean Le Feuvre, Romain Bouqueau, Cyril Concolato
  5. * Copyright (c) Telecom ParisTech 2000-2012
  6. * All rights reserved
  7. *
  8. * This file is part of GPAC / Media Tools sub-project
  9. *
  10. * GPAC is free software; you can redistribute it and/or modify
  11. * it under the terms of the GNU Lesser General Public License as published by
  12. * the Free Software Foundation; either version 2, or (at your option)
  13. * any later version.
  14. *
  15. * GPAC is distributed in the hope that it will be useful,
  16. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  17. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  18. * GNU Lesser General Public License for more details.
  19. *
  20. * You should have received a copy of the GNU Lesser General Public
  21. * License along with this library; see the file COPYING. If not, write to
  22. * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  23. *
  24. */
  25. #include "../../include/gpac/internal/media_dev.h"
  26. #include "../../include/gpac/constants.h"
  27. #include "../../include/gpac/mpeg4_odf.h"
  28. #ifndef GPAC_DISABLE_OGG
  29. #include "../../include/gpac/internal/ogg.h"
  30. #include "../../include/gpac/math.h"
  31. #endif
  32. static const struct { u32 w, h; } std_par[ ] =
  33. {
  34. { 4, 3}, {3, 2}, {16, 9}, {5, 3}, {5, 4}, {8, 5},
  35. {0, 0},
  36. };
  37. GF_EXPORT
  38. void gf_media_reduce_aspect_ratio(u32 *width, u32 *height)
  39. {
  40. u32 i=0;
  41. u32 w = *width;
  42. u32 h = *height;
  43. while (std_par[i].w) {
  44. if (std_par[i].w * h == std_par[i].h * w) {
  45. *width = std_par[i].w;
  46. *height = std_par[i].h;
  47. return;
  48. }
  49. i++;
  50. }
  51. }
  52. GF_EXPORT
  53. void gf_media_get_reduced_frame_rate(u32 *timescale, u32 *sample_dur)
  54. {
  55. u32 res;
  56. if (! *sample_dur) return;
  57. res = *timescale / *sample_dur;
  58. if (res * *sample_dur == *timescale) {
  59. *timescale = res;
  60. *sample_dur = 1;
  61. }
  62. }
  63. GF_EXPORT
  64. const char *gf_m4v_get_profile_name(u8 video_pl)
  65. {
  66. switch (video_pl) {
  67. case 0x00: return "Reserved (0x00) Profile";
  68. case 0x01: return "Simple Profile @ Level 1";
  69. case 0x02: return "Simple Profile @ Level 2";
  70. case 0x03: return "Simple Profile @ Level 3";
  71. case 0x08: return "Simple Profile @ Level 0";
  72. case 0x10: return "Simple Scalable Profile @ Level 0";
  73. case 0x11: return "Simple Scalable Profile @ Level 1";
  74. case 0x12: return "Simple Scalable Profile @ Level 2";
  75. case 0x15: return "AVC/H264 Profile";
  76. case 0x21: return "Core Profile @ Level 1";
  77. case 0x22: return "Core Profile @ Level 2";
  78. case 0x32: return "Main Profile @ Level 2";
  79. case 0x33: return "Main Profile @ Level 3";
  80. case 0x34: return "Main Profile @ Level 4";
  81. case 0x42: return "N-bit Profile @ Level 2";
  82. case 0x51: return "Scalable Texture Profile @ Level 1";
  83. case 0x61: return "Simple Face Animation Profile @ Level 1";
  84. case 0x62: return "Simple Face Animation Profile @ Level 2";
  85. case 0x63: return "Simple FBA Profile @ Level 1";
  86. case 0x64: return "Simple FBA Profile @ Level 2";
  87. case 0x71: return "Basic Animated Texture Profile @ Level 1";
  88. case 0x72: return "Basic Animated Texture Profile @ Level 2";
  89. case 0x81: return "Hybrid Profile @ Level 1";
  90. case 0x82: return "Hybrid Profile @ Level 2";
  91. case 0x91: return "Advanced Real Time Simple Profile @ Level 1";
  92. case 0x92: return "Advanced Real Time Simple Profile @ Level 2";
  93. case 0x93: return "Advanced Real Time Simple Profile @ Level 3";
  94. case 0x94: return "Advanced Real Time Simple Profile @ Level 4";
  95. case 0xA1: return "Core Scalable Profile @ Level1";
  96. case 0xA2: return "Core Scalable Profile @ Level2";
  97. case 0xA3: return "Core Scalable Profile @ Level3";
  98. case 0xB1: return "Advanced Coding Efficiency Profile @ Level 1";
  99. case 0xB2: return "Advanced Coding Efficiency Profile @ Level 2";
  100. case 0xB3: return "Advanced Coding Efficiency Profile @ Level 3";
  101. case 0xB4: return "Advanced Coding Efficiency Profile @ Level 4";
  102. case 0xC1: return "Advanced Core Profile @ Level 1";
  103. case 0xC2: return "Advanced Core Profile @ Level 2";
  104. case 0xD1: return "Advanced Scalable Texture @ Level1";
  105. case 0xD2: return "Advanced Scalable Texture @ Level2";
  106. case 0xE1: return "Simple Studio Profile @ Level 1";
  107. case 0xE2: return "Simple Studio Profile @ Level 2";
  108. case 0xE3: return "Simple Studio Profile @ Level 3";
  109. case 0xE4: return "Simple Studio Profile @ Level 4";
  110. case 0xE5: return "Core Studio Profile @ Level 1";
  111. case 0xE6: return "Core Studio Profile @ Level 2";
  112. case 0xE7: return "Core Studio Profile @ Level 3";
  113. case 0xE8: return "Core Studio Profile @ Level 4";
  114. case 0xF0: return "Advanced Simple Profile @ Level 0";
  115. case 0xF1: return "Advanced Simple Profile @ Level 1";
  116. case 0xF2: return "Advanced Simple Profile @ Level 2";
  117. case 0xF3: return "Advanced Simple Profile @ Level 3";
  118. case 0xF4: return "Advanced Simple Profile @ Level 4";
  119. case 0xF5: return "Advanced Simple Profile @ Level 5";
  120. case 0xF7: return "Advanced Simple Profile @ Level 3b";
  121. case 0xF8: return "Fine Granularity Scalable Profile @ Level 0";
  122. case 0xF9: return "Fine Granularity Scalable Profile @ Level 1";
  123. case 0xFA: return "Fine Granularity Scalable Profile @ Level 2";
  124. case 0xFB: return "Fine Granularity Scalable Profile @ Level 3";
  125. case 0xFC: return "Fine Granularity Scalable Profile @ Level 4";
  126. case 0xFD: return "Fine Granularity Scalable Profile @ Level 5";
  127. case 0xFE: return "Not part of MPEG-4 Visual profiles";
  128. case 0xFF: return "No visual capability required";
  129. default: return "ISO Reserved Profile";
  130. }
  131. }
  132. #ifndef GPAC_DISABLE_AV_PARSERS
  133. #define MPEG12_START_CODE_PREFIX 0x000001
  134. #define MPEG12_PICTURE_START_CODE 0x00000100
  135. #define MPEG12_SLICE_MIN_START 0x00000101
  136. #define MPEG12_SLICE_MAX_START 0x000001af
  137. #define MPEG12_USER_DATA_START_CODE 0x000001b2
  138. #define MPEG12_SEQUENCE_START_CODE 0x000001b3
  139. #define MPEG12_SEQUENCE_ERR_START_CODE 0x000001b4
  140. #define MPEG12_EXT_START_CODE 0x000001b5
  141. #define MPEG12_SEQUENCE_END_START_CODE 0x000001b7
  142. #define MPEG12_GOP_START_CODE 0x000001b8
  143. s32 gf_mv12_next_start_code(unsigned char *pbuffer, u32 buflen, u32 *optr, u32 *scode)
  144. {
  145. u32 value;
  146. u32 offset;
  147. if (buflen < 4) return -1;
  148. for (offset = 0; offset < buflen - 3; offset++, pbuffer++) {
  149. #ifdef GPAC_BIG_ENDIAN
  150. value = *(u32 *)pbuffer >> 8;
  151. #else
  152. value = (pbuffer[0] << 16) | (pbuffer[1] << 8) | (pbuffer[2] << 0);
  153. #endif
  154. if (value == MPEG12_START_CODE_PREFIX) {
  155. *optr = offset;
  156. *scode = (value << 8) | pbuffer[3];
  157. return 0;
  158. }
  159. }
  160. return -1;
  161. }
  162. s32 gf_mv12_next_slice_start(unsigned char *pbuffer, u32 startoffset, u32 buflen, u32 *slice_offset)
  163. {
  164. u32 slicestart, code;
  165. while (gf_mv12_next_start_code(pbuffer + startoffset, buflen - startoffset, &slicestart, &code) >= 0) {
  166. if ((code >= MPEG12_SLICE_MIN_START) && (code <= MPEG12_SLICE_MAX_START)) {
  167. *slice_offset = slicestart + startoffset;
  168. return 0;
  169. }
  170. startoffset += slicestart + 4;
  171. }
  172. return -1;
  173. }
  174. /*
  175. MPEG-4 video (14496-2)
  176. */
  177. #define M4V_VO_START_CODE 0x00
  178. #define M4V_VOL_START_CODE 0x20
  179. #define M4V_VOP_START_CODE 0xB6
  180. #define M4V_VISOBJ_START_CODE 0xB5
  181. #define M4V_VOS_START_CODE 0xB0
  182. #define M4V_GOV_START_CODE 0xB3
  183. #define M4V_UDTA_START_CODE 0xB2
  184. #define M2V_PIC_START_CODE 0x00
  185. #define M2V_SEQ_START_CODE 0xB3
  186. #define M2V_EXT_START_CODE 0xB5
  187. #define M2V_GOP_START_CODE 0xB8
  188. struct __tag_m4v_parser
  189. {
  190. GF_BitStream *bs;
  191. Bool mpeg12;
  192. u32 current_object_type;
  193. u64 current_object_start;
  194. u32 tc_dec, prev_tc_dec, tc_disp, prev_tc_disp;
  195. };
  196. GF_EXPORT
  197. GF_M4VParser *gf_m4v_parser_new(char *data, u64 data_size, Bool mpeg12video)
  198. {
  199. GF_M4VParser *tmp;
  200. if (!data || !data_size) return NULL;
  201. GF_SAFEALLOC(tmp, GF_M4VParser);
  202. tmp->bs = gf_bs_new(data, data_size, GF_BITSTREAM_READ);
  203. tmp->mpeg12 = mpeg12video;
  204. return tmp;
  205. }
  206. GF_M4VParser *gf_m4v_parser_bs_new(GF_BitStream *bs, Bool mpeg12video)
  207. {
  208. GF_M4VParser *tmp;
  209. GF_SAFEALLOC(tmp, GF_M4VParser);
  210. tmp->bs = bs;
  211. tmp->mpeg12 = mpeg12video;
  212. return tmp;
  213. }
  214. GF_EXPORT
  215. void gf_m4v_parser_del(GF_M4VParser *m4v)
  216. {
  217. gf_bs_del(m4v->bs);
  218. gf_free(m4v);
  219. }
  220. #define M4V_CACHE_SIZE 4096
  221. s32 M4V_LoadObject(GF_M4VParser *m4v)
  222. {
  223. u32 v, bpos, found;
  224. char m4v_cache[M4V_CACHE_SIZE];
  225. u64 end, cache_start, load_size;
  226. if (!m4v) return 0;
  227. bpos = 0;
  228. found = 0;
  229. load_size = 0;
  230. end = 0;
  231. cache_start = 0;
  232. v = 0xffffffff;
  233. while (!end) {
  234. /*refill cache*/
  235. if (bpos == (u32) load_size) {
  236. if (!gf_bs_available(m4v->bs)) break;
  237. load_size = gf_bs_available(m4v->bs);
  238. if (load_size>M4V_CACHE_SIZE) load_size=M4V_CACHE_SIZE;
  239. bpos = 0;
  240. cache_start = gf_bs_get_position(m4v->bs);
  241. gf_bs_read_data(m4v->bs, m4v_cache, (u32) load_size);
  242. }
  243. v = ( (v<<8) & 0xFFFFFF00) | ((u8) m4v_cache[bpos]);
  244. bpos++;
  245. if ((v & 0xFFFFFF00) == 0x00000100) {
  246. end = cache_start+bpos-4;
  247. found = 1;
  248. break;
  249. }
  250. }
  251. if (!found) return -1;
  252. m4v->current_object_start = end;
  253. gf_bs_seek(m4v->bs, end+3);
  254. m4v->current_object_type = gf_bs_read_u8(m4v->bs);
  255. return (s32) m4v->current_object_type;
  256. }
  257. GF_EXPORT
  258. void gf_m4v_rewrite_pl(char **o_data, u32 *o_dataLen, u8 PL)
  259. {
  260. u32 pos = 0;
  261. unsigned char *data = (unsigned char *)*o_data;
  262. u32 dataLen = *o_dataLen;
  263. while (pos+4<dataLen) {
  264. if (!data[pos] && !data[pos+1] && (data[pos+2]==0x01) && (data[pos+3]==M4V_VOS_START_CODE)) {
  265. data[pos+4] = PL;
  266. return;
  267. }
  268. pos ++;
  269. }
  270. /*emulate VOS at beggining*/
  271. (*o_data) = (char *)gf_malloc(sizeof(char)*(dataLen+5));
  272. (*o_data)[0] = 0;
  273. (*o_data)[1] = 0;
  274. (*o_data)[2] = 1;
  275. (*o_data)[3] = (char) M4V_VOS_START_CODE;
  276. (*o_data)[4] = PL;
  277. memcpy( (*o_data + 5), data, sizeof(char)*dataLen);
  278. gf_free(data);
  279. (*o_dataLen) = dataLen + 5;
  280. }
  281. static GF_Err M4V_Reset(GF_M4VParser *m4v, u64 start)
  282. {
  283. gf_bs_seek(m4v->bs, start);
  284. assert(start < 1<<31);
  285. m4v->current_object_start = (u32) start;
  286. m4v->current_object_type = 0;
  287. return GF_OK;
  288. }
  289. static GF_Err gf_m4v_parse_config_mpeg12(GF_M4VParser *m4v, GF_M4VDecSpecInfo *dsi)
  290. {
  291. unsigned char p[4];
  292. u32 ext_type;
  293. s32 o_type;
  294. u8 go, par;
  295. if (!m4v || !dsi) return GF_BAD_PARAM;
  296. memset(dsi, 0, sizeof(GF_M4VDecSpecInfo));
  297. dsi->VideoPL = 0;
  298. go = 1;
  299. while (go) {
  300. o_type = M4V_LoadObject(m4v);
  301. switch (o_type) {
  302. case M2V_SEQ_START_CODE:
  303. dsi->RAP_stream = 1;
  304. gf_bs_read_data(m4v->bs, (char *) p, 4);
  305. dsi->width = (p[0] << 4) | ((p[1] >> 4) & 0xf);
  306. dsi->height = ((p[1] & 0xf) << 8) | p[2];
  307. dsi->VideoPL = GPAC_OTI_VIDEO_MPEG1;
  308. par = (p[3] >> 4) & 0xf;
  309. switch (par) {
  310. case 2: dsi->par_num = dsi->height/3; dsi->par_den = dsi->width/4; break;
  311. case 3: dsi->par_num = dsi->height/9; dsi->par_den = dsi->width/16; break;
  312. case 4: dsi->par_num = dsi->height/2; dsi->par_den = dsi->width/21; break;
  313. default: dsi->par_den = dsi->par_num = 0; break;
  314. }
  315. switch (p[3] & 0xf) {
  316. case 0: break;
  317. case 1: dsi->fps = 24000.0/1001.0; break;
  318. case 2: dsi->fps = 24.0; break;
  319. case 3: dsi->fps = 25.0; break;
  320. case 4: dsi->fps = 30000.0/1001.0; break;
  321. case 5: dsi->fps = 30.0; break;
  322. case 6: dsi->fps = 50.0; break;
  323. case 7: dsi->fps = ((60.0*1000.0)/1001.0); break;
  324. case 8: dsi->fps = 60.0; break;
  325. case 9: dsi->fps = 1; break;
  326. case 10: dsi->fps = 5; break;
  327. case 11: dsi->fps = 10; break;
  328. case 12: dsi->fps = 12; break;
  329. case 13: dsi->fps = 15; break;
  330. }
  331. break;
  332. case M2V_EXT_START_CODE:
  333. gf_bs_read_data(m4v->bs, (char *) p, 4);
  334. ext_type = ((p[0] >> 4) & 0xf);
  335. if (ext_type == 1) {
  336. dsi->VideoPL = 0x65;
  337. dsi->height = ((p[1] & 0x1) << 13) | ((p[2] & 0x80) << 5) | (dsi->height & 0x0fff);
  338. dsi->width = (((p[2] >> 5) & 0x3) << 12) | (dsi->width & 0x0fff);
  339. }
  340. break;
  341. case M2V_PIC_START_CODE:
  342. if (dsi->width) go = 0;
  343. break;
  344. default:
  345. break;
  346. /*EOS*/
  347. case -1:
  348. go = 0;
  349. m4v->current_object_start = gf_bs_get_position(m4v->bs);
  350. break;
  351. }
  352. }
  353. M4V_Reset(m4v, 0);
  354. return GF_OK;
  355. }
  356. static const struct { u32 w, h; } m4v_sar[6] = { { 0, 0 }, { 1, 1 }, { 12, 11 }, { 10, 11 }, { 16, 11 }, { 40, 33 } };
  357. static u8 m4v_get_sar_idx(u32 w, u32 h)
  358. {
  359. u32 i;
  360. for (i=0; i<6; i++) {
  361. if ((m4v_sar[i].w==w) && (m4v_sar[i].h==h)) return i;
  362. }
  363. return 0xF;
  364. }
  365. static GF_Err gf_m4v_parse_config_mpeg4(GF_M4VParser *m4v, GF_M4VDecSpecInfo *dsi)
  366. {
  367. s32 o_type;
  368. u8 go, verid, par;
  369. s32 clock_rate;
  370. if (!m4v || !dsi) return GF_BAD_PARAM;
  371. memset(dsi, 0, sizeof(GF_M4VDecSpecInfo));
  372. go = 1;
  373. while (go) {
  374. o_type = M4V_LoadObject(m4v);
  375. switch (o_type) {
  376. /*vosh*/
  377. case M4V_VOS_START_CODE:
  378. dsi->VideoPL = (u8) gf_bs_read_u8(m4v->bs);
  379. break;
  380. case M4V_VOL_START_CODE:
  381. verid = 0;
  382. dsi->RAP_stream = gf_bs_read_int(m4v->bs, 1);
  383. dsi->objectType = gf_bs_read_int(m4v->bs, 8);
  384. if (gf_bs_read_int(m4v->bs, 1)) {
  385. verid = gf_bs_read_int(m4v->bs, 4);
  386. gf_bs_read_int(m4v->bs, 3);
  387. }
  388. par = gf_bs_read_int(m4v->bs, 4);
  389. if (par == 0xF) {
  390. dsi->par_num = gf_bs_read_int(m4v->bs, 8);
  391. dsi->par_den = gf_bs_read_int(m4v->bs, 8);
  392. } else if (par<6) {
  393. dsi->par_num = m4v_sar[par].w;
  394. dsi->par_den = m4v_sar[par].h;
  395. }
  396. if (gf_bs_read_int(m4v->bs, 1)) {
  397. gf_bs_read_int(m4v->bs, 3);
  398. if (gf_bs_read_int(m4v->bs, 1)) gf_bs_read_int(m4v->bs, 79);
  399. }
  400. dsi->has_shape = gf_bs_read_int(m4v->bs, 2);
  401. if (dsi->has_shape && (verid!=1) ) gf_bs_read_int(m4v->bs, 4);
  402. gf_bs_read_int(m4v->bs, 1);
  403. /*clock rate*/
  404. dsi->clock_rate = gf_bs_read_int(m4v->bs, 16);
  405. /*marker*/
  406. gf_bs_read_int(m4v->bs, 1);
  407. clock_rate = dsi->clock_rate-1;
  408. if (clock_rate >= 65536) clock_rate = 65535;
  409. if (clock_rate > 0) {
  410. for (dsi->NumBitsTimeIncrement = 1; dsi->NumBitsTimeIncrement < 16; dsi->NumBitsTimeIncrement++) {
  411. if (clock_rate == 1) break;
  412. clock_rate = (clock_rate >> 1);
  413. }
  414. } else {
  415. /*fix from vivien for divX*/
  416. dsi->NumBitsTimeIncrement = 1;
  417. }
  418. /*fixed FPS stream*/
  419. dsi->time_increment = 0;
  420. if (gf_bs_read_int(m4v->bs, 1)) {
  421. dsi->time_increment = gf_bs_read_int(m4v->bs, dsi->NumBitsTimeIncrement);
  422. }
  423. if (!dsi->has_shape) {
  424. gf_bs_read_int(m4v->bs, 1);
  425. dsi->width = gf_bs_read_int(m4v->bs, 13);
  426. gf_bs_read_int(m4v->bs, 1);
  427. dsi->height = gf_bs_read_int(m4v->bs, 13);
  428. } else {
  429. dsi->width = dsi->height = 0;
  430. }
  431. /*shape will be done later*/
  432. gf_bs_align(m4v->bs);
  433. break;
  434. case M4V_VOP_START_CODE:
  435. case M4V_GOV_START_CODE:
  436. go = 0;
  437. break;
  438. /*EOS*/
  439. case -1:
  440. go = 0;
  441. m4v->current_object_start = gf_bs_get_position(m4v->bs);
  442. break;
  443. /*don't interest us*/
  444. case M4V_UDTA_START_CODE:
  445. default:
  446. break;
  447. }
  448. }
  449. return GF_OK;
  450. }
  451. GF_EXPORT
  452. GF_Err gf_m4v_parse_config(GF_M4VParser *m4v, GF_M4VDecSpecInfo *dsi)
  453. {
  454. if (m4v->mpeg12) {
  455. return gf_m4v_parse_config_mpeg12(m4v, dsi);
  456. } else {
  457. return gf_m4v_parse_config_mpeg4(m4v, dsi);
  458. }
  459. }
  460. static GF_Err gf_m4v_parse_frame_mpeg12(GF_M4VParser *m4v, GF_M4VDecSpecInfo dsi, u8 *frame_type, u32 *time_inc, u64 *size, u64 *start, Bool *is_coded)
  461. {
  462. u8 go, hasVOP, firstObj, val;
  463. s32 o_type;
  464. if (!m4v || !size || !start || !frame_type) return GF_BAD_PARAM;
  465. *size = 0;
  466. firstObj = 1;
  467. hasVOP = 0;
  468. *is_coded = 0;
  469. m4v->current_object_type = (u32) -1;
  470. *frame_type = 0;
  471. M4V_Reset(m4v, m4v->current_object_start);
  472. go = 1;
  473. while (go) {
  474. o_type = M4V_LoadObject(m4v);
  475. switch (o_type) {
  476. case M2V_PIC_START_CODE:
  477. /*done*/
  478. if (hasVOP) {
  479. go = 0;
  480. break;
  481. }
  482. if (firstObj) {
  483. *start = m4v->current_object_start;
  484. firstObj = 0;
  485. }
  486. hasVOP = 1;
  487. *is_coded = 1;
  488. val = gf_bs_read_u8(m4v->bs);
  489. val = gf_bs_read_u8(m4v->bs);
  490. *frame_type = ( (val >> 3) & 0x7 ) - 1;
  491. break;
  492. case M2V_GOP_START_CODE:
  493. if (firstObj) {
  494. *start = m4v->current_object_start;
  495. firstObj = 0;
  496. }
  497. if (hasVOP) go = 0;
  498. break;
  499. case M2V_SEQ_START_CODE:
  500. if (firstObj) {
  501. *start = m4v->current_object_start;
  502. firstObj = 0;
  503. }
  504. if (hasVOP) {
  505. go = 0;
  506. break;
  507. }
  508. /**/
  509. break;
  510. default:
  511. break;
  512. case -1:
  513. *size = gf_bs_get_position(m4v->bs) - *start;
  514. return GF_EOS;
  515. }
  516. }
  517. *size = m4v->current_object_start - *start;
  518. return GF_OK;
  519. }
  520. static GF_Err gf_m4v_parse_frame_mpeg4(GF_M4VParser *m4v, GF_M4VDecSpecInfo dsi, u8 *frame_type, u32 *time_inc, u64 *size, u64 *start, Bool *is_coded)
  521. {
  522. u8 go, hasVOP, firstObj, secs;
  523. s32 o_type;
  524. u32 vop_inc = 0;
  525. if (!m4v || !size || !start || !frame_type) return GF_BAD_PARAM;
  526. *size = 0;
  527. firstObj = 1;
  528. hasVOP = 0;
  529. *is_coded = 0;
  530. m4v->current_object_type = (u32) -1;
  531. *frame_type = 0;
  532. M4V_Reset(m4v, m4v->current_object_start);
  533. go = 1;
  534. while (go) {
  535. o_type = M4V_LoadObject(m4v);
  536. switch (o_type) {
  537. case M4V_VOP_START_CODE:
  538. /*done*/
  539. if (hasVOP) {
  540. go = 0;
  541. break;
  542. }
  543. if (firstObj) {
  544. *start = m4v->current_object_start;
  545. firstObj = 0;
  546. }
  547. hasVOP = 1;
  548. /*coding type*/
  549. *frame_type = gf_bs_read_int(m4v->bs, 2);
  550. /*modulo time base*/
  551. secs = 0;
  552. while (gf_bs_read_int(m4v->bs, 1) != 0)
  553. secs ++;
  554. /*no support for B frames in parsing*/
  555. secs += (dsi.enh_layer || *frame_type!=2) ? m4v->tc_dec : m4v->tc_disp;
  556. /*marker*/
  557. gf_bs_read_int(m4v->bs, 1);
  558. /*vop_time_inc*/
  559. if (dsi.NumBitsTimeIncrement)
  560. vop_inc = gf_bs_read_int(m4v->bs, dsi.NumBitsTimeIncrement);
  561. m4v->prev_tc_dec = m4v->tc_dec;
  562. m4v->prev_tc_disp = m4v->tc_disp;
  563. if (dsi.enh_layer || *frame_type!=2) {
  564. m4v->tc_disp = m4v->tc_dec;
  565. m4v->tc_dec = secs;
  566. }
  567. *time_inc = secs * dsi.clock_rate + vop_inc;
  568. /*marker*/
  569. gf_bs_read_int(m4v->bs, 1);
  570. /*coded*/
  571. *is_coded = gf_bs_read_int(m4v->bs, 1);
  572. gf_bs_align(m4v->bs);
  573. break;
  574. case M4V_GOV_START_CODE:
  575. if (firstObj) {
  576. *start = m4v->current_object_start;
  577. firstObj = 0;
  578. }
  579. if (hasVOP) go = 0;
  580. break;
  581. case M4V_VOS_START_CODE:
  582. case M4V_VOL_START_CODE:
  583. if (hasVOP) {
  584. go = 0;
  585. } else if (firstObj) {
  586. *start = m4v->current_object_start;
  587. firstObj = 0;
  588. }
  589. break;
  590. case M4V_VO_START_CODE:
  591. default:
  592. break;
  593. case -1:
  594. *size = gf_bs_get_position(m4v->bs) - *start;
  595. return GF_EOS;
  596. }
  597. }
  598. *size = m4v->current_object_start - *start;
  599. return GF_OK;
  600. }
  601. GF_EXPORT
  602. GF_Err gf_m4v_parse_frame(GF_M4VParser *m4v, GF_M4VDecSpecInfo dsi, u8 *frame_type, u32 *time_inc, u64 *size, u64 *start, Bool *is_coded)
  603. {
  604. if (m4v->mpeg12) {
  605. return gf_m4v_parse_frame_mpeg12(m4v, dsi, frame_type, time_inc, size, start, is_coded);
  606. } else {
  607. return gf_m4v_parse_frame_mpeg4(m4v, dsi, frame_type, time_inc, size, start, is_coded);
  608. }
  609. }
  610. GF_Err gf_m4v_rewrite_par(char **o_data, u32 *o_dataLen, s32 par_n, s32 par_d)
  611. {
  612. u64 start, end, size;
  613. GF_BitStream *mod;
  614. GF_M4VParser *m4v;
  615. Bool go = 1;
  616. m4v = gf_m4v_parser_new(*o_data, *o_dataLen, 0);
  617. mod = gf_bs_new(NULL, 0, GF_BITSTREAM_WRITE);
  618. end = start = 0;
  619. while (go) {
  620. u32 type = M4V_LoadObject(m4v);
  621. end = gf_bs_get_position(m4v->bs) - 4;
  622. size = end - start;
  623. /*store previous object*/
  624. if (size) {
  625. assert (size < 1<<31);
  626. if (size) gf_bs_write_data(mod, *o_data + start, (u32) size);
  627. start = end;
  628. }
  629. switch (type) {
  630. case M4V_VOL_START_CODE:
  631. gf_bs_write_int(mod, 0, 8);
  632. gf_bs_write_int(mod, 0, 8);
  633. gf_bs_write_int(mod, 1, 8);
  634. gf_bs_write_int(mod, M4V_VOL_START_CODE, 8);
  635. gf_bs_write_int(mod, gf_bs_read_int(m4v->bs, 1), 1);
  636. gf_bs_write_int(mod, gf_bs_read_int(m4v->bs, 8), 8);
  637. start = gf_bs_read_int(m4v->bs, 1);
  638. gf_bs_write_int(mod, (u32) start, 1);
  639. if (start) {
  640. gf_bs_write_int(mod, gf_bs_read_int(m4v->bs, 7), 7);
  641. }
  642. start = gf_bs_read_int(m4v->bs, 4);
  643. if (start == 0xF) {
  644. gf_bs_read_int(m4v->bs, 8);
  645. gf_bs_read_int(m4v->bs, 8);
  646. }
  647. if ((par_n>=0) && (par_d>=0)) {
  648. u8 par = m4v_get_sar_idx(par_n, par_d);
  649. gf_bs_write_int(mod, par, 4);
  650. if (par==0xF) {
  651. gf_bs_write_int(mod, par_n, 8);
  652. gf_bs_write_int(mod, par_d, 8);
  653. }
  654. } else {
  655. gf_bs_write_int(mod, 0x0, 4);
  656. }
  657. case -1:
  658. go = 0;
  659. break;
  660. default:
  661. break;
  662. }
  663. }
  664. while (gf_bs_bits_available(m4v->bs)) {
  665. u32 b = gf_bs_read_int(m4v->bs, 1);
  666. gf_bs_write_int(mod, b, 1);
  667. }
  668. gf_m4v_parser_del(m4v);
  669. gf_free(*o_data);
  670. gf_bs_get_content(mod, o_data, o_dataLen);
  671. gf_bs_del(mod);
  672. return GF_OK;
  673. }
  674. GF_EXPORT
  675. u64 gf_m4v_get_object_start(GF_M4VParser *m4v)
  676. {
  677. return m4v->current_object_start;
  678. }
  679. GF_EXPORT
  680. Bool gf_m4v_is_valid_object_type(GF_M4VParser *m4v)
  681. {
  682. return ((s32) m4v->current_object_type==-1) ? 0 : 1;
  683. }
  684. GF_EXPORT
  685. GF_Err gf_m4v_get_config(char *rawdsi, u32 rawdsi_size, GF_M4VDecSpecInfo *dsi)
  686. {
  687. GF_Err e;
  688. GF_M4VParser *vparse;
  689. if (!rawdsi || !rawdsi_size) return GF_NON_COMPLIANT_BITSTREAM;
  690. vparse = gf_m4v_parser_new(rawdsi, rawdsi_size, 0);
  691. e = gf_m4v_parse_config(vparse, dsi);
  692. gf_m4v_parser_del(vparse);
  693. return e;
  694. }
  695. #endif
  696. /*
  697. AAC parser
  698. */
  699. GF_EXPORT
  700. const char *gf_m4a_object_type_name(u32 objectType)
  701. {
  702. switch (objectType) {
  703. case 0: return "MPEG-4 Audio Reserved";
  704. case 1: return "MPEG-4 Audio AAC Main";
  705. case 2: return "MPEG-4 Audio AAC LC";
  706. case 3: return "MPEG-4 Audio AAC SSR";
  707. case 4: return "MPEG-4 Audio AAC LTP";
  708. case 5: return "MPEG-4 Audio SBR";
  709. case 6: return "MPEG-4 Audio AAC Scalable";
  710. case 7: return "MPEG-4 Audio TwinVQ";
  711. case 8: return "MPEG-4 Audio CELP";
  712. case 9: return "MPEG-4 Audio HVXC";
  713. case 10: return "MPEG-4 Audio Reserved";
  714. case 11: return "MPEG-4 Audio Reserved";
  715. case 12: return "MPEG-4 Audio TTSI";
  716. case 13: return "MPEG-4 Audio Main synthetic";
  717. case 14: return "MPEG-4 Audio Wavetable synthesis";
  718. case 15: return "MPEG-4 Audio General MIDI";
  719. case 16: return "MPEG-4 Audio Algorithmic Synthesis and Audio FX";
  720. case 17: return "MPEG-4 Audio ER AAC LC";
  721. case 18: return "MPEG-4 Audio Reserved";
  722. case 19: return "MPEG-4 Audio ER AAC LTP";
  723. case 20: return "MPEG-4 Audio ER AAC scalable";
  724. case 21: return "MPEG-4 Audio ER TwinVQ";
  725. case 22: return "MPEG-4 Audio ER BSAC";
  726. case 23: return "MPEG-4 Audio ER AAC LD";
  727. case 24: return "MPEG-4 Audio ER CELP";
  728. case 25: return "MPEG-4 Audio ER HVXC";
  729. case 26: return "MPEG-4 Audio ER HILN";
  730. case 27: return "MPEG-4 Audio ER Parametric";
  731. case 28: return "MPEG-4 Audio SSC";
  732. case 29: return "MPEG-4 Audio ParametricStereo";
  733. case 30: return "MPEG-4 Audio Reserved";
  734. case 31: return "MPEG-4 Audio Reserved";
  735. case 32: return "MPEG-1 Audio Layer-1";
  736. case 33: return "MPEG-1 Audio Layer-2";
  737. case 34: return "MPEG-1 Audio Layer-3";
  738. case 35: return "MPEG-4 Audio DST";
  739. case 36: return "MPEG-4 Audio ALS";
  740. case 37: return "MPEG-4 Audio SLS";
  741. default: return "MPEG-4 Audio Unknown";
  742. }
  743. }
  744. GF_EXPORT
  745. const char *gf_m4a_get_profile_name(u8 audio_pl)
  746. {
  747. switch (audio_pl) {
  748. case 0x00: return "ISO Reserved (0x00)";
  749. case 0x01: return "Main Audio Profile @ Level 1";
  750. case 0x02: return "Main Audio Profile @ Level 2";
  751. case 0x03: return "Main Audio Profile @ Level 3";
  752. case 0x04: return "Main Audio Profile @ Level 4";
  753. case 0x05: return "Scalable Audio Profile @ Level 1";
  754. case 0x06: return "Scalable Audio Profile @ Level 2";
  755. case 0x07: return "Scalable Audio Profile @ Level 3";
  756. case 0x08: return "Scalable Audio Profile @ Level 4";
  757. case 0x09: return "Speech Audio Profile @ Level 1";
  758. case 0x0A: return "Speech Audio Profile @ Level 2";
  759. case 0x0B: return "Synthetic Audio Profile @ Level 1";
  760. case 0x0C: return "Synthetic Audio Profile @ Level 2";
  761. case 0x0D: return "Synthetic Audio Profile @ Level 3";
  762. case 0x0E: return "High Quality Audio Profile @ Level 1";
  763. case 0x0F: return "High Quality Audio Profile @ Level 2";
  764. case 0x10: return "High Quality Audio Profile @ Level 3";
  765. case 0x11: return "High Quality Audio Profile @ Level 4";
  766. case 0x12: return "High Quality Audio Profile @ Level 5";
  767. case 0x13: return "High Quality Audio Profile @ Level 6";
  768. case 0x14: return "High Quality Audio Profile @ Level 7";
  769. case 0x15: return "High Quality Audio Profile @ Level 8";
  770. case 0x16: return "Low Delay Audio Profile @ Level 1";
  771. case 0x17: return "Low Delay Audio Profile @ Level 2";
  772. case 0x18: return "Low Delay Audio Profile @ Level 3";
  773. case 0x19: return "Low Delay Audio Profile @ Level 4";
  774. case 0x1A: return "Low Delay Audio Profile @ Level 5";
  775. case 0x1B: return "Low Delay Audio Profile @ Level 6";
  776. case 0x1C: return "Low Delay Audio Profile @ Level 7";
  777. case 0x1D: return "Low Delay Audio Profile @ Level 8";
  778. case 0x1E: return "Natural Audio Profile @ Level 1";
  779. case 0x1F: return "Natural Audio Profile @ Level 2";
  780. case 0x20: return "Natural Audio Profile @ Level 3";
  781. case 0x21: return "Natural Audio Profile @ Level 4";
  782. case 0x22: return "Mobile Audio Internetworking Profile @ Level 1";
  783. case 0x23: return "Mobile Audio Internetworking Profile @ Level 2";
  784. case 0x24: return "Mobile Audio Internetworking Profile @ Level 3";
  785. case 0x25: return "Mobile Audio Internetworking Profile @ Level 4";
  786. case 0x26: return "Mobile Audio Internetworking Profile @ Level 5";
  787. case 0x27: return "Mobile Audio Internetworking Profile @ Level 6";
  788. case 0x28: return "AAC Profile @ Level 1";
  789. case 0x29: return "AAC Profile @ Level 2";
  790. case 0x2A: return "AAC Profile @ Level 4";
  791. case 0x2B: return "AAC Profile @ Level 5";
  792. case 0x2C: return "High Efficiency AAC Profile @ Level 2";
  793. case 0x2D: return "High Efficiency AAC Profile @ Level 3";
  794. case 0x2E: return "High Efficiency AAC Profile @ Level 4";
  795. case 0x2F: return "High Efficiency AAC Profile @ Level 5";
  796. case 0x3B: return "High Definition AAC Profile @ Level 1";
  797. case 0x3C: return "ALS Simple Profile @ Level 1";
  798. case 0xFE: return "Not part of MPEG-4 audio profiles";
  799. case 0xFF: return "No audio capability required";
  800. default: return "ISO Reserved / User Private";
  801. }
  802. }
  803. #ifndef GPAC_DISABLE_AV_PARSERS
  804. GF_EXPORT
  805. u32 gf_m4a_get_profile(GF_M4ADecSpecInfo *cfg)
  806. {
  807. switch (cfg->base_object_type) {
  808. case 2: /*AAC LC*/
  809. if (cfg->nb_chan<=2) return (cfg->base_sr<=24000) ? 0x28 : 0x29; /*LC@L1 or LC@L2*/
  810. return (cfg->base_sr<=48000) ? 0x2A : 0x2B; /*LC@L4 or LC@L5*/
  811. case 5: /*HE-AAC - SBR*/
  812. case 29: /*HE-AAC - SBR+PS*/
  813. if (cfg->nb_chan<=2) return (cfg->base_sr<=24000) ? 0x2C : 0x2D; /*HE@L2 or HE@L3*/
  814. return (cfg->base_sr<=48000) ? 0x2E : 0x2F; /*HE@L4 or HE@L5*/
  815. /*default to HQ*/
  816. default:
  817. if (cfg->nb_chan<=2) return (cfg->base_sr<24000) ? 0x0E : 0x0F; /*HQ@L1 or HQ@L2*/
  818. return 0x10; /*HQ@L3*/
  819. }
  820. }
  821. GF_EXPORT
  822. GF_Err gf_m4a_parse_config(GF_BitStream *bs, GF_M4ADecSpecInfo *cfg, Bool size_known)
  823. {
  824. memset(cfg, 0, sizeof(GF_M4ADecSpecInfo));
  825. cfg->base_object_type = gf_bs_read_int(bs, 5);
  826. /*extended object type*/
  827. if (cfg->base_object_type==31) {
  828. cfg->base_object_type = 32 + gf_bs_read_int(bs, 6);
  829. }
  830. cfg->base_sr_index = gf_bs_read_int(bs, 4);
  831. if (cfg->base_sr_index == 0x0F) {
  832. cfg->base_sr = gf_bs_read_int(bs, 24);
  833. } else {
  834. cfg->base_sr = GF_M4ASampleRates[cfg->base_sr_index];
  835. }
  836. cfg->nb_chan = gf_bs_read_int(bs, 4);
  837. /*this is 7+1 channels*/
  838. if (cfg->nb_chan==7) cfg->nb_chan=8;
  839. if (cfg->base_object_type==5 || cfg->base_object_type==29) {
  840. if (cfg->base_object_type==29) {
  841. cfg->has_ps = 1;
  842. cfg->nb_chan = 1;
  843. }
  844. cfg->has_sbr = 1;
  845. cfg->sbr_sr_index = gf_bs_read_int(bs, 4);
  846. if (cfg->sbr_sr_index == 0x0F) {
  847. cfg->sbr_sr = gf_bs_read_int(bs, 24);
  848. } else {
  849. cfg->sbr_sr = GF_M4ASampleRates[cfg->sbr_sr_index];
  850. }
  851. cfg->sbr_object_type = gf_bs_read_int(bs, 5);
  852. }
  853. /*object cfg*/
  854. switch (cfg->base_object_type) {
  855. case 1:
  856. case 2:
  857. case 3:
  858. case 4:
  859. case 6:
  860. case 7:
  861. case 17:
  862. case 19:
  863. case 20:
  864. case 21:
  865. case 22:
  866. case 23:
  867. {
  868. Bool ext_flag;
  869. /*frame length flag*/
  870. /*fl_flag = */gf_bs_read_int(bs, 1);
  871. /*depends on core coder*/
  872. if (gf_bs_read_int(bs, 1))
  873. /*delay = */gf_bs_read_int(bs, 14);
  874. ext_flag = gf_bs_read_int(bs, 1);
  875. if (!cfg->nb_chan) {
  876. }
  877. if ((cfg->base_object_type == 6) || (cfg->base_object_type == 20)) {
  878. gf_bs_read_int(bs, 3);
  879. }
  880. if (ext_flag) {
  881. if (cfg->base_object_type == 22) {
  882. gf_bs_read_int(bs, 5);
  883. gf_bs_read_int(bs, 11);
  884. }
  885. if ((cfg->base_object_type == 17)
  886. || (cfg->base_object_type == 19)
  887. || (cfg->base_object_type == 20)
  888. || (cfg->base_object_type == 23)
  889. ) {
  890. gf_bs_read_int(bs, 1);
  891. gf_bs_read_int(bs, 1);
  892. gf_bs_read_int(bs, 1);
  893. }
  894. ext_flag = gf_bs_read_int(bs, 1);
  895. }
  896. }
  897. break;
  898. }
  899. /*ER cfg*/
  900. switch (cfg->base_object_type) {
  901. case 17:
  902. case 19:
  903. case 20:
  904. case 21:
  905. case 22:
  906. case 23:
  907. case 24:
  908. case 25:
  909. case 26:
  910. case 27:
  911. {
  912. u32 epConfig = gf_bs_read_int(bs, 2);
  913. if ((epConfig == 2) || (epConfig == 3) ) {
  914. }
  915. if (epConfig == 3) {
  916. gf_bs_read_int(bs, 1);
  917. }
  918. }
  919. break;
  920. }
  921. if (size_known && (cfg->base_object_type != 5) && (cfg->base_object_type != 29) ) {
  922. while (gf_bs_available(bs)>=2) {
  923. u32 sync = gf_bs_peek_bits(bs, 11, 0);
  924. if (sync==0x2b7) {
  925. gf_bs_read_int(bs, 11);
  926. cfg->sbr_object_type = gf_bs_read_int(bs, 5);
  927. cfg->has_sbr = gf_bs_read_int(bs, 1);
  928. if (cfg->has_sbr) {
  929. cfg->sbr_sr_index = gf_bs_read_int(bs, 4);
  930. if (cfg->sbr_sr_index == 0x0F) {
  931. cfg->sbr_sr = gf_bs_read_int(bs, 24);
  932. } else {
  933. cfg->sbr_sr = GF_M4ASampleRates[cfg->sbr_sr_index];
  934. }
  935. }
  936. } else if (sync == 0x548) {
  937. gf_bs_read_int(bs, 11);
  938. cfg->has_ps = gf_bs_read_int(bs, 1);
  939. if (cfg->has_ps)
  940. cfg->nb_chan = 1;
  941. } else {
  942. break;
  943. }
  944. }
  945. }
  946. cfg->audioPL = gf_m4a_get_profile(cfg);
  947. return GF_OK;
  948. }
  949. GF_EXPORT
  950. GF_Err gf_m4a_get_config(char *dsi, u32 dsi_size, GF_M4ADecSpecInfo *cfg)
  951. {
  952. GF_BitStream *bs;
  953. if (!dsi || !dsi_size || (dsi_size<2) ) return GF_NON_COMPLIANT_BITSTREAM;
  954. bs = gf_bs_new(dsi, dsi_size, GF_BITSTREAM_READ);
  955. gf_m4a_parse_config(bs, cfg, 1);
  956. gf_bs_del(bs);
  957. return GF_OK;
  958. }
  959. u32 gf_latm_get_value(GF_BitStream *bs)
  960. {
  961. u32 i, tmp, value = 0;
  962. u32 bytesForValue = gf_bs_read_int(bs, 2);
  963. for (i=0; i <= bytesForValue; i++) {
  964. value <<= 8;
  965. tmp = gf_bs_read_int(bs, 8);
  966. value += tmp;
  967. }
  968. return value;
  969. }
  970. GF_EXPORT
  971. GF_Err gf_m4a_write_config_bs(GF_BitStream *bs, GF_M4ADecSpecInfo *cfg)
  972. {
  973. if (!cfg->base_sr_index) {
  974. if (!cfg->base_sr) return GF_BAD_PARAM;
  975. while (GF_M4ASampleRates[cfg->base_sr_index]) {
  976. if (GF_M4ASampleRates[cfg->base_sr_index]==cfg->base_sr)
  977. break;
  978. cfg->base_sr_index++;
  979. }
  980. }
  981. if (cfg->sbr_sr && !cfg->sbr_sr_index) {
  982. while (GF_M4ASampleRates[cfg->sbr_sr_index]) {
  983. if (GF_M4ASampleRates[cfg->sbr_sr_index]==cfg->sbr_sr)
  984. break;
  985. cfg->sbr_sr_index++;
  986. }
  987. }
  988. /*extended object type*/
  989. if (cfg->base_object_type>=32) {
  990. gf_bs_write_int(bs, 31, 5);
  991. gf_bs_write_int(bs, cfg->base_object_type-32, 6);
  992. } else {
  993. gf_bs_write_int(bs, cfg->base_object_type, 5);
  994. }
  995. gf_bs_write_int(bs, cfg->base_sr_index, 4);
  996. if (cfg->base_sr_index == 0x0F) {
  997. gf_bs_write_int(bs, cfg->base_sr, 24);
  998. }
  999. if (cfg->nb_chan == 8) {
  1000. gf_bs_write_int(bs, 7, 4);
  1001. } else {
  1002. gf_bs_write_int(bs, cfg->nb_chan, 4);
  1003. }
  1004. if (cfg->base_object_type==5 || cfg->base_object_type==29) {
  1005. if (cfg->base_object_type == 29) {
  1006. cfg->has_ps = 1;
  1007. cfg->nb_chan = 1;
  1008. }
  1009. cfg->has_sbr = 1;
  1010. gf_bs_write_int(bs, cfg->sbr_sr_index, 4);
  1011. if (cfg->sbr_sr_index == 0x0F) {
  1012. gf_bs_write_int(bs, cfg->sbr_sr, 24);
  1013. }
  1014. gf_bs_write_int(bs, cfg->sbr_object_type, 5);
  1015. }
  1016. /*object cfg*/
  1017. switch (cfg->base_object_type) {
  1018. case 1:
  1019. case 2:
  1020. case 3:
  1021. case 4:
  1022. case 6:
  1023. case 7:
  1024. case 17:
  1025. case 19:
  1026. case 20:
  1027. case 21:
  1028. case 22:
  1029. case 23:
  1030. {
  1031. /*frame length flag*/
  1032. gf_bs_write_int(bs, 0, 1);
  1033. /*depends on core coder*/
  1034. gf_bs_write_int(bs, 0, 1);
  1035. /*ext flag*/
  1036. gf_bs_write_int(bs, 0, 1);
  1037. if ((cfg->base_object_type == 6) || (cfg->base_object_type == 20)) {
  1038. gf_bs_write_int(bs, 0, 3);
  1039. }
  1040. }
  1041. break;
  1042. }
  1043. /*ER cfg - not supported*/
  1044. /*implicit sbr - not used yet*/
  1045. if (0 && (cfg->base_object_type != 5) && (cfg->base_object_type != 29) ) {
  1046. gf_bs_write_int(bs, 0x2b7, 11);
  1047. cfg->sbr_object_type = gf_bs_read_int(bs, 5);
  1048. cfg->has_sbr = gf_bs_read_int(bs, 1);
  1049. if (cfg->has_sbr) {
  1050. cfg->sbr_sr_index = gf_bs_read_int(bs, 4);
  1051. if (cfg->sbr_sr_index == 0x0F) {
  1052. cfg->sbr_sr = gf_bs_read_int(bs, 24);
  1053. } else {
  1054. cfg->sbr_sr = GF_M4ASampleRates[cfg->sbr_sr_index];
  1055. }
  1056. }
  1057. }
  1058. return GF_OK;
  1059. }
  1060. GF_EXPORT
  1061. GF_Err gf_m4a_write_config(GF_M4ADecSpecInfo *cfg, char **dsi, u32 *dsi_size)
  1062. {
  1063. GF_BitStream *bs = gf_bs_new(NULL, 0, GF_BITSTREAM_WRITE);
  1064. gf_m4a_write_config_bs(bs, cfg);
  1065. gf_bs_get_content(bs, dsi, dsi_size);
  1066. gf_bs_del(bs);
  1067. return GF_OK;
  1068. }
  1069. #endif /*GPAC_DISABLE_AV_PARSERS*/
  1070. GF_EXPORT
  1071. u8 gf_mp3_version(u32 hdr)
  1072. {
  1073. return ((hdr >> 19) & 0x3);
  1074. }
  1075. GF_EXPORT
  1076. const char *gf_mp3_version_name(u32 hdr)
  1077. {
  1078. u32 v = gf_mp3_version(hdr);
  1079. switch (v) {
  1080. case 0: return "MPEG-2.5";
  1081. case 1: return "Reserved";
  1082. case 2: return "MPEG-2";
  1083. case 3: return "MPEG-1";
  1084. default: return "Unknown";
  1085. }
  1086. }
  1087. #ifndef GPAC_DISABLE_AV_PARSERS
  1088. GF_EXPORT
  1089. u8 gf_mp3_layer(u32 hdr)
  1090. {
  1091. return 4 - (((hdr >> 17) & 0x3));
  1092. }
  1093. GF_EXPORT
  1094. u8 gf_mp3_num_channels(u32 hdr)
  1095. {
  1096. if (((hdr >> 6) & 0x3) == 3) return 1;
  1097. return 2;
  1098. }
  1099. GF_EXPORT
  1100. u16 gf_mp3_sampling_rate(u32 hdr)
  1101. {
  1102. u16 res;
  1103. /* extract the necessary fields from the MP3 header */
  1104. u8 version = gf_mp3_version(hdr);
  1105. u8 sampleRateIndex = (hdr >> 10) & 0x3;
  1106. switch (sampleRateIndex) {
  1107. case 0:
  1108. res = 44100;
  1109. break;
  1110. case 1:
  1111. res = 48000;
  1112. break;
  1113. case 2:
  1114. res = 32000;
  1115. break;
  1116. default:
  1117. GF_LOG(GF_LOG_ERROR, GF_LOG_CODING, ("[MPEG-1/2 Audio] Samplerate index not valid\n"));
  1118. return 0;
  1119. }
  1120. /*reserved or MPEG-1*/
  1121. if (version & 1) return res;
  1122. /*MPEG-2*/
  1123. res /= 2;
  1124. /*MPEG-2.5*/
  1125. if (version == 0) res /= 2;
  1126. return res;
  1127. }
  1128. GF_EXPORT
  1129. u16 gf_mp3_window_size(u32 hdr)
  1130. {
  1131. u8 version = gf_mp3_version(hdr);
  1132. u8 layer = gf_mp3_layer(hdr);
  1133. if (layer == 3) {
  1134. if (version == 3) return 1152;
  1135. return 576;
  1136. }
  1137. if (layer == 2) return 1152;
  1138. return 384;
  1139. }
  1140. GF_EXPORT
  1141. u8 gf_mp3_object_type_indication(u32 hdr)
  1142. {
  1143. switch (gf_mp3_version(hdr)) {
  1144. case 3:
  1145. return GPAC_OTI_AUDIO_MPEG1;
  1146. case 2:
  1147. case 0:
  1148. return GPAC_OTI_AUDIO_MPEG2_PART3;
  1149. default:
  1150. return 0x00;
  1151. }
  1152. }
  1153. /*aligned bitrate parsing with libMAD*/
  1154. static
  1155. u32 const bitrate_table[5][15] = {
  1156. /* MPEG-1 */
  1157. { 0, 32000, 64000, 96000, 128000, 160000, 192000, 224000, /* Layer I */
  1158. 256000, 288000, 320000, 352000, 384000, 416000, 448000 },
  1159. { 0, 32000, 48000, 56000, 64000, 80000, 96000, 112000, /* Layer II */
  1160. 128000, 160000, 192000, 224000, 256000, 320000, 384000 },
  1161. { 0, 32000, 40000, 48000, 56000, 64000, 80000, 96000, /* Layer III */
  1162. 112000, 128000, 160000, 192000, 224000, 256000, 320000 },
  1163. /* MPEG-2 LSF */
  1164. { 0, 32000, 48000, 56000, 64000, 80000, 96000, 112000, /* Layer I */
  1165. 128000, 144000, 160000, 176000, 192000, 224000, 256000 },
  1166. { 0, 8000, 16000, 24000, 32000, 40000, 48000, 56000, /* Layers */
  1167. 64000, 80000, 96000, 112000, 128000, 144000, 160000 } /* II & III */
  1168. };
  1169. u32 gf_mp3_bit_rate(u32 hdr)
  1170. {
  1171. u8 version = gf_mp3_version(hdr);
  1172. u8 layer = gf_mp3_layer(hdr);
  1173. u8 bitRateIndex = (hdr >> 12) & 0xF;
  1174. if (bitRateIndex == 15) {
  1175. GF_LOG(GF_LOG_ERROR, GF_LOG_CODING, ("[MPEG-1/2 Audio] Bitrate index not valid\n"));
  1176. return 0;
  1177. }
  1178. /*MPEG-1*/
  1179. if (version & 1)
  1180. return bitrate_table[layer - 1][bitRateIndex];
  1181. /*MPEG-2/2.5*/
  1182. else
  1183. return bitrate_table[3 + (layer >> 1)][bitRateIndex];
  1184. }
  1185. GF_EXPORT
  1186. u16 gf_mp3_frame_size(u32 hdr)
  1187. {
  1188. u8 version = gf_mp3_version(hdr);
  1189. u8 layer = gf_mp3_layer(hdr);
  1190. u32 pad = ( (hdr >> 9) & 0x1) ? 1 : 0;
  1191. u32 bitrate = gf_mp3_bit_rate(hdr);
  1192. u32 samplerate = gf_mp3_sampling_rate(hdr);
  1193. u32 frameSize = 0;
  1194. if (!samplerate || !bitrate) return 0;
  1195. if (layer==1) {
  1196. frameSize = (( 12 * bitrate / samplerate) + pad) * 4;
  1197. } else {
  1198. u32 slots_per_frame = 144;
  1199. if ((layer == 3) && !(version & 1)) slots_per_frame = 72;
  1200. frameSize = (slots_per_frame * bitrate / samplerate) + pad;
  1201. }
  1202. return (u16) frameSize;
  1203. }
  1204. GF_EXPORT
  1205. u32 gf_mp3_get_next_header(FILE* in)
  1206. {
  1207. u8 b, state = 0;
  1208. u32 dropped = 0;
  1209. unsigned char bytes[4];
  1210. bytes[0] = bytes[1] = bytes[2] = bytes[3] = 0;
  1211. while (1) {
  1212. if (fread(&b, 1, 1, in) == 0) return 0;
  1213. if (state==3) {
  1214. bytes[state] = b;
  1215. return GF_4CC(bytes[0], bytes[1], bytes[2], bytes[3]);
  1216. }
  1217. if (state==2) {
  1218. if (((b & 0xF0) == 0) || ((b & 0xF0) == 0xF0) || ((b & 0x0C) == 0x0C)) {
  1219. if (bytes[1] == 0xFF) state = 1;
  1220. else state = 0;
  1221. } else {
  1222. bytes[state] = b;
  1223. state = 3;
  1224. }
  1225. }
  1226. if (state==1) {
  1227. if (((b & 0xE0) == 0xE0) && ((b & 0x18) != 0x08) && ((b & 0x06) != 0)) {
  1228. bytes[state] = b;
  1229. state = 2;
  1230. } else {
  1231. state = 0;
  1232. }
  1233. }
  1234. if (state==0) {
  1235. if (b == 0xFF) {
  1236. bytes[state] = b;
  1237. state = 1;
  1238. } else {
  1239. if ((dropped == 0) && ((b & 0xE0) == 0xE0) && ((b & 0x18) != 0x08) && ((b & 0x06) != 0)) {
  1240. bytes[0] = (u8) 0xFF;
  1241. bytes[1] = b;
  1242. state = 2;
  1243. } else {
  1244. dropped++;
  1245. }
  1246. }
  1247. }
  1248. }
  1249. return 0;
  1250. }
  1251. GF_EXPORT
  1252. u32 gf_mp3_get_next_header_mem(const char *buffer, u32 size, u32 *pos)
  1253. {
  1254. u32 cur;
  1255. u8 b, state = 0;
  1256. u32 dropped = 0;
  1257. unsigned char bytes[4];
  1258. bytes[0] = bytes[1] = bytes[2] = bytes[3] = 0;
  1259. cur = 0;
  1260. *pos = 0;
  1261. while (cur<size) {
  1262. b = (u8) buffer[cur];
  1263. cur++;
  1264. if (state==3) {
  1265. u32 val;
  1266. bytes[state] = b;
  1267. val = GF_4CC(bytes[0], bytes[1], bytes[2], bytes[3]);
  1268. if (gf_mp3_frame_size(val)) {
  1269. *pos = dropped;
  1270. return val;
  1271. }
  1272. state = 0;
  1273. dropped = cur;
  1274. }
  1275. if (state==2) {
  1276. if (((b & 0xF0) == 0) || ((b & 0xF0) == 0xF0) || ((b & 0x0C) == 0x0C)) {
  1277. if (bytes[1] == 0xFF) {
  1278. state = 1;
  1279. dropped+=1;
  1280. } else {
  1281. state = 0;
  1282. dropped = cur;
  1283. }
  1284. } else {
  1285. bytes[state] = b;
  1286. state = 3;
  1287. }
  1288. }
  1289. if (state==1) {
  1290. if (((b & 0xE0) == 0xE0) && ((b & 0x18) != 0x08) && ((b & 0x06) != 0)) {
  1291. bytes[state] = b;
  1292. state = 2;
  1293. } else {
  1294. state = 0;
  1295. dropped = cur;
  1296. }
  1297. }
  1298. if (state==0) {
  1299. if (b == 0xFF) {
  1300. bytes[state] = b;
  1301. state = 1;
  1302. } else {
  1303. dropped++;
  1304. }
  1305. }
  1306. }
  1307. return 0;
  1308. }
  1309. #endif /*GPAC_DISABLE_AV_PARSERS*/
  1310. GF_EXPORT
  1311. const char *gf_avc_get_profile_name(u8 video_prof)
  1312. {
  1313. switch (video_prof) {
  1314. case 0x42: return "Baseline";
  1315. case 0x4D: return "Main";
  1316. case 0x53: return "Scalable Baseline";
  1317. case 0x56: return "Scalable High";
  1318. case 0x58: return "Extended";
  1319. case 0x64: return "High";
  1320. case 0x6E: return "High 10";
  1321. case 0x7A: return "High 4:2:2";
  1322. case 0x90: return "High 4:4:4";
  1323. default: return "Unknown";
  1324. }
  1325. }
  1326. #ifndef GPAC_DISABLE_AV_PARSERS
  1327. static u8 avc_golomb_bits[256] = {
  1328. 8, 7, 6, 6, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 3,
  1329. 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2,
  1330. 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
  1331. 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1,
  1332. 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  1333. 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  1334. 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
  1335. 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0,
  1336. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  1337. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  1338. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  1339. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  1340. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  1341. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  1342. 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
  1343. 0
  1344. };
  1345. static u32 bs_get_ue(GF_BitStream *bs)
  1346. {
  1347. u8 coded;
  1348. u32 bits = 0, read = 0;
  1349. while (1) {
  1350. read = gf_bs_peek_bits(bs, 8, 0);
  1351. if (read) break;
  1352. //check whether we still have bits once the peek is done since we may have less than 8 bits available
  1353. if (!gf_bs_available(bs)) {
  1354. GF_LOG(GF_LOG_ERROR, GF_LOG_CODING, ("[AVC/HEVC] Not enough bits in bitstream !!\n"));
  1355. return 0;
  1356. }
  1357. gf_bs_read_int(bs, 8);
  1358. bits += 8;
  1359. }
  1360. coded = avc_golomb_bits[read];
  1361. gf_bs_read_int(bs, coded);
  1362. bits += coded;
  1363. return gf_bs_read_int(bs, bits + 1) - 1;
  1364. }
  1365. static s32 bs_get_se(GF_BitStream *bs)
  1366. {
  1367. u32 v = bs_get_ue(bs);
  1368. if ((v & 0x1) == 0) return (s32) (0 - (v>>1));
  1369. return (v + 1) >> 1;
  1370. }
  1371. u32 gf_media_nalu_is_start_code(GF_BitStream *bs)
  1372. {
  1373. u8 s1, s2, s3, s4;
  1374. Bool is_sc = 0;
  1375. u64 pos = gf_bs_get_position(bs);
  1376. s1 = gf_bs_read_int(bs, 8);
  1377. s2 = gf_bs_read_int(bs, 8);
  1378. if (!s1 && !s2) {
  1379. s3 = gf_bs_read_int(bs, 8);
  1380. if (s3==0x01) is_sc = 3;
  1381. else if (!s3) {
  1382. s4 = gf_bs_read_int(bs, 8);
  1383. if (s4==0x01) is_sc = 4;
  1384. }
  1385. }
  1386. gf_bs_seek(bs, pos+is_sc);
  1387. return is_sc;
  1388. }
  1389. /*read that amount of data at each IO access rather than fetching byte by byte...*/
  1390. #define AVC_CACHE_SIZE 4096
  1391. GF_EXPORT
  1392. u32 gf_media_nalu_next_start_code_bs(GF_BitStream *bs)
  1393. {
  1394. u32 v, bpos;
  1395. char avc_cache[AVC_CACHE_SIZE];
  1396. u64 end, cache_start, load_size;
  1397. u64 start = gf_bs_get_position(bs);
  1398. if (start<3) return 0;
  1399. load_size = 0;
  1400. bpos = 0;
  1401. cache_start = 0;
  1402. end = 0;
  1403. v = 0xffffffff;
  1404. while (!end) {
  1405. /*refill cache*/
  1406. if (bpos == (u32) load_size) {
  1407. if (!gf_bs_available(bs)) break;
  1408. load_size = gf_bs_available(bs);
  1409. if (load_size>AVC_CACHE_SIZE) load_size=AVC_CACHE_SIZE;
  1410. bpos = 0;
  1411. cache_start = gf_bs_get_position(bs);
  1412. gf_bs_read_data(bs, avc_cache, (u32) load_size);
  1413. }
  1414. v = ( (v<<8) & 0xFFFFFF00) | ((u32) avc_cache[bpos]);
  1415. bpos++;
  1416. if (v == 0x00000001) end = cache_start+bpos-4;
  1417. else if ( (v & 0x00FFFFFF) == 0x00000001) end = cache_start+bpos-3;
  1418. }
  1419. gf_bs_seek(bs, start);
  1420. if (!end) end = gf_bs_get_size(bs);
  1421. return (u32) (end-start);
  1422. }
  1423. GF_EXPORT
  1424. u32 gf_media_nalu_next_start_code(u8 *data, u32 data_len, u32 *sc_size)
  1425. {
  1426. u32 v, bpos;
  1427. u32 end;
  1428. bpos = 0;
  1429. end = 0;
  1430. v = 0xffffffff;
  1431. while (!end) {
  1432. /*refill cache*/
  1433. if (bpos == (u32) data_len)
  1434. break;
  1435. v = ( (v<<8) & 0xFFFFFF00) | ((u32) data[bpos]);
  1436. bpos++;
  1437. if (v == 0x00000001) {
  1438. end = bpos-4;
  1439. *sc_size = 4;
  1440. return end;
  1441. }
  1442. else if ( (v & 0x00FFFFFF) == 0x00000001) {
  1443. end = bpos-3;
  1444. *sc_size = 3;
  1445. return end;
  1446. }
  1447. }
  1448. if (!end) end = data_len;
  1449. return (u32) (end);
  1450. }
  1451. Bool gf_media_avc_slice_is_intra(AVCState *avc)
  1452. {
  1453. switch (avc->s_info.slice_type) {
  1454. case GF_AVC_TYPE_I:
  1455. case GF_AVC_TYPE2_I:
  1456. case GF_AVC_TYPE_SI:
  1457. case GF_AVC_TYPE2_SI:
  1458. return 1;
  1459. default:
  1460. return 0;
  1461. }
  1462. }
  1463. Bool gf_media_avc_slice_is_IDR(AVCState *avc)
  1464. {
  1465. if (avc->sei.recovery_point.valid)
  1466. {
  1467. avc->sei.recovery_point.valid = 0;
  1468. return 1;
  1469. }
  1470. if (avc->s_info.nal_unit_type != GF_AVC_NALU_IDR_SLICE)
  1471. return 0;
  1472. return gf_media_avc_slice_is_intra(avc);
  1473. }
  1474. static const struct { u32 w, h; } avc_sar[14] =
  1475. {
  1476. { 0, 0 }, { 1, 1 }, { 12, 11 }, { 10, 11 },
  1477. { 16, 11 }, { 40, 33 }, { 24, 11 }, { 20, 11 },
  1478. { 32, 11 }, { 80, 33 }, { 18, 11 }, { 15, 11 },
  1479. { 64, 33 }, { 160,99 },
  1480. };
  1481. /*ISO 14496-10 (N11084) E.1.2*/
  1482. static void avc_parse_hrd_parameters(GF_BitStream *bs, AVC_HRD *hrd)
  1483. {
  1484. int i, cpb_cnt_minus1;
  1485. cpb_cnt_minus1 = bs_get_ue(bs); /*cpb_cnt_minus1*/
  1486. if (cpb_cnt_minus1 > 31)
  1487. GF_LOG(GF_LOG_WARNING, GF_LOG_CODING, ("[avc-h264] invalid cpb_cnt_minus1 value: %d (expected in [0;31])\n", cpb_cnt_minus1));
  1488. gf_bs_read_int(bs, 4); /*bit_rate_scale*/
  1489. gf_bs_read_int(bs, 4); /*cpb_size_scale*/
  1490. /*for( SchedSelIdx = 0; SchedSelIdx <= cpb_cnt_minus1; SchedSelIdx++ ) {*/
  1491. for (i=0; i<=cpb_cnt_minus1; i++) {
  1492. bs_get_ue(bs); /*bit_rate_value_minus1[ SchedSelIdx ]*/
  1493. bs_get_ue(bs); /*cpb_size_value_minus1[ SchedSelIdx ]*/
  1494. gf_bs_read_int(bs, 1); /*cbr_flag[ SchedSelIdx ]*/
  1495. }
  1496. gf_bs_read_int(bs, 5); /*initial_cpb_removal_delay_length_minus1*/
  1497. hrd->cpb_removal_delay_length_minus1 = gf_bs_read_int(bs, 5); /*cpb_removal_delay_length_minus1*/
  1498. hrd->dpb_output_delay_length_minus1 = gf_bs_read_int(bs, 5); /*dpb_output_delay_length_minus1*/
  1499. hrd->time_offset_length = gf_bs_read_int(bs, 5); /*time_offset_length*/
  1500. return;
  1501. }
  1502. /*returns the nal_size without emulation prevention bytes*/
  1503. static u32 avc_emulation_bytes_add_count(char *buffer, u32 nal_size)
  1504. {
  1505. u32 i = 0, emulation_bytes_count = 0;
  1506. u8 num_zero = 0;
  1507. while (i < nal_size) {
  1508. /*ISO 14496-10: "Within the NAL unit, any four-byte sequence that starts with 0x000003
  1509. other than the following sequences shall not occur at any byte-aligned position:
  1510. \96 0x00000300
  1511. \96 0x00000301
  1512. \96 0x00000302
  1513. \96 0x00000303"
  1514. */
  1515. if (num_zero == 2 && buffer[i] < 0x04) {
  1516. /*emulation code found*/
  1517. num_zero = 0;
  1518. emulation_bytes_count++;
  1519. } else {
  1520. if (!buffer[i])
  1521. num_zero++;
  1522. else
  1523. num_zero = 0;
  1524. }
  1525. i++;
  1526. }
  1527. return emulation_bytes_count;
  1528. }
  1529. static u32 avc_add_emulation_bytes(const char *buffer_src, char *buffer_dst, u32 nal_size)
  1530. {
  1531. u32 i = 0, emulation_bytes_count = 0;
  1532. u8 num_zero = 0;
  1533. while (i < nal_size) {
  1534. /*ISO 14496-10: "Within the NAL unit, any four-byte sequence that starts with 0x000003
  1535. other than the following sequences shall not occur at any byte-aligned position:
  1536. 0x00000300
  1537. 0x00000301
  1538. 0x00000302
  1539. 0x00000303"
  1540. */
  1541. if (num_zero == 2 && buffer_src[i] < 0x04) {
  1542. /*add emulation code*/
  1543. num_zero = 0;
  1544. buffer_dst[i+emulation_bytes_count] = 0x03;
  1545. emulation_bytes_count++;
  1546. if (!buffer_src[i])
  1547. num_zero = 1;
  1548. } else {
  1549. if (!buffer_src[i])
  1550. num_zero++;
  1551. else
  1552. num_zero = 0;
  1553. }
  1554. buffer_dst[i+emulation_bytes_count] = buffer_src[i];
  1555. i++;
  1556. }
  1557. return nal_size+emulation_bytes_count;
  1558. }
  1559. #ifdef GPAC_UNUSED_FUNC
  1560. /*returns the nal_size without emulation prevention bytes*/
  1561. static u32 avc_emulation_bytes_remove_count(unsigned char *buffer, u32 nal_size)
  1562. {
  1563. u32 i = 0, emulation_bytes_count = 0;
  1564. u8 num_zero = 0;
  1565. while (i < nal_size)
  1566. {
  1567. /*ISO 14496-10: "Within the NAL unit, any four-byte sequence that starts with 0x000003
  1568. other than the following sequences shall not occur at any byte-aligned position:
  1569. \96 0x00000300
  1570. \96 0x00000301
  1571. \96 0x00000302
  1572. \96 0x00000303"
  1573. */
  1574. if (num_zero == 2
  1575. && buffer[i] == 0x03
  1576. && i+1 < nal_size /*next byte is readable*/
  1577. && buffer[i+1] < 0x04)
  1578. {
  1579. /*emulation code found*/
  1580. num_zero = 0;
  1581. emulation_bytes_count++;
  1582. i++;
  1583. }
  1584. if (!buffer[i])
  1585. num_zero++;
  1586. else
  1587. num_zero = 0;
  1588. i++;
  1589. }
  1590. return emulation_bytes_count;
  1591. }
  1592. #endif /*GPAC_UNUSED_FUNC*/
  1593. /*nal_size is updated to allow better error detection*/
  1594. static u32 avc_remove_emulation_bytes(const char *buffer_src, char *buffer_dst, u32 nal_size)
  1595. {
  1596. u32 i = 0, emulation_bytes_count = 0;
  1597. u8 num_zero = 0;
  1598. while (i < nal_size)
  1599. {
  1600. /*ISO 14496-10: "Within the NAL unit, any four-byte sequence that starts with 0x000003
  1601. other than the following sequences shall not occur at any byte-aligned position:
  1602. 0x00000300
  1603. 0x00000301
  1604. 0x00000302
  1605. 0x00000303"
  1606. */
  1607. if (num_zero == 2
  1608. && buffer_src[i] == 0x03
  1609. && i+1 < nal_size /*next byte is readable*/
  1610. && buffer_src[i+1] < 0x04)
  1611. {
  1612. /*emulation code found*/
  1613. num_zero = 0;
  1614. emulation_bytes_count++;
  1615. i++;
  1616. }
  1617. buffer_dst[i-emulation_bytes_count] = buffer_src[i];
  1618. if (!buffer_src[i])
  1619. num_zero++;
  1620. else
  1621. num_zero = 0;
  1622. i++;
  1623. }
  1624. return nal_size-emulation_bytes_count;
  1625. }
  1626. GF_EXPORT
  1627. s32 gf_media_avc_read_sps(const char *sps_data, u32 sps_size, AVCState *avc, u32 subseq_sps, u32 *vui_flag_pos)
  1628. {
  1629. AVC_SPS *sps;
  1630. u32 ChromaArrayType = 0;
  1631. s32 mb_width, mb_height, sps_id = -1;
  1632. u32 profile_idc, level_idc, pcomp, i, chroma_format_idc, cl, cr, ct, cb, luma_bd, chroma_bd;
  1633. GF_BitStream *bs;
  1634. char *sps_data_without_emulation_bytes = NULL;
  1635. u32 sps_data_without_emulation_bytes_size = 0;
  1636. /*SPS still contains emulation bytes*/
  1637. sps_data_without_emulation_bytes = gf_malloc(sps_size*sizeof(char));
  1638. sps_data_without_emulation_bytes_size = avc_remove_emulation_bytes(sps_data, sps_data_without_emulation_bytes, sps_size);
  1639. bs = gf_bs_new(sps_data_without_emulation_bytes, sps_data_without_emulation_bytes_size, GF_BITSTREAM_READ);
  1640. if (!bs) {
  1641. sps_id = -1;
  1642. goto exit;
  1643. }
  1644. if (vui_flag_pos) *vui_flag_pos = 0;
  1645. /*nal hdr*/ gf_bs_read_int(bs, 8);
  1646. profile_idc = gf_bs_read_int(bs, 8);
  1647. pcomp = gf_bs_read_int(bs, 8);
  1648. /*sanity checks*/
  1649. if (pcomp & 0x3)
  1650. goto exit;
  1651. level_idc = gf_bs_read_int(bs, 8);
  1652. /*SubsetSps is used to be sure that AVC SPS are not going to be scratched
  1653. by subset SPS. According to the SVC standard, subset SPS can have the same sps_id
  1654. than its base layer, but it does not refer to the same SPS. */
  1655. sps_id = bs_get_ue(bs) + GF_SVC_SSPS_ID_SHIFT * subseq_sps;
  1656. if (sps_id >=32) {
  1657. sps_id = -1;
  1658. goto exit;
  1659. }
  1660. chroma_format_idc = luma_bd = chroma_bd = 0;
  1661. sps = &avc->sps[sps_id];
  1662. sps->state |= subseq_sps ? AVC_SUBSPS_PARSED : AVC_SPS_PARSED;
  1663. /*High Profile and SVC*/
  1664. switch (profile_idc) {
  1665. case 100:
  1666. case 110:
  1667. case 122:
  1668. case 244:
  1669. case 44:
  1670. /*sanity checks: note1 from 7.4.2.1.1 of iso/iec 14496-10-N11084*/
  1671. if (pcomp & 0xE0)
  1672. goto exit;
  1673. case 83:
  1674. case 86:
  1675. case 118:
  1676. case 128:
  1677. chroma_format_idc = bs_get_ue(bs);
  1678. ChromaArrayType = chroma_format_idc;
  1679. if (chroma_format_idc == 3) {
  1680. u8 separate_colour_plane_flag = gf_bs_read_int(bs, 1);
  1681. /*
  1682. Depending on the value of separate_colour_plane_flag, the value of the variable ChromaArrayType is assigned as follows.
  1683. \96 If separate_colour_plane_flag is equal to 0, ChromaArrayType is set equal to chroma_format_idc.
  1684. \96 Otherwise (separate_colour_plane_flag is equal to 1), ChromaArrayType is set equal to 0.
  1685. */
  1686. if (separate_colour_plane_flag) ChromaArrayType = 0;
  1687. }
  1688. luma_bd = bs_get_ue(bs);
  1689. chroma_bd = bs_get_ue(bs);
  1690. /*qpprime_y_zero_transform_bypass_flag = */ gf_bs_read_int(bs, 1);
  1691. /*seq_scaling_matrix_present_flag*/
  1692. if (gf_bs_read_int(bs, 1)) {
  1693. u32 k;
  1694. for (k=0; k<8; k++) {
  1695. if (gf_bs_read_int(bs, 1)) {
  1696. u32 z, last = 8, next = 8;
  1697. u32 sl = k<6 ? 16 : 64;
  1698. for (z=0; z<sl; z++) {
  1699. if (next) {
  1700. s32 delta = bs_get_se(bs);
  1701. next = (last + delta + 256) % 256;
  1702. }
  1703. last = next ? next : last;
  1704. }
  1705. }
  1706. }
  1707. }
  1708. break;
  1709. default :
  1710. ChromaArrayType = chroma_format_idc = 1;
  1711. break;
  1712. }
  1713. sps->profile_idc = profile_idc;
  1714. sps->level_idc = level_idc;
  1715. sps->prof_compat = pcomp;
  1716. sps->log2_max_frame_num = bs_get_ue(bs) + 4;
  1717. sps->poc_type = bs_get_ue(bs);
  1718. sps->chroma_format = chroma_format_idc;
  1719. sps->luma_bit_depth_m8 = luma_bd;
  1720. sps->chroma_bit_depth_m8 = chroma_bd;
  1721. if (sps->poc_type == 0) {
  1722. sps->log2_max_poc_lsb = bs_get_ue(bs) + 4;
  1723. } else if(sps->poc_type == 1) {
  1724. sps->delta_pic_order_always_zero_flag = gf_bs_read_int(bs, 1);
  1725. sps->offset_for_non_ref_pic = bs_get_se(bs);
  1726. sps->offset_for_top_to_bottom_field = bs_get_se(bs);
  1727. sps->poc_cycle_length = bs_get_ue(bs);
  1728. for(i=0; i<sps->poc_cycle_length; i++) sps->offset_for_ref_frame[i] = bs_get_se(bs);
  1729. }
  1730. if (sps->poc_type > 2) {
  1731. sps_id = -1;
  1732. goto exit;
  1733. }
  1734. bs_get_ue(bs); /*ref_frame_count*/
  1735. gf_bs_read_int(bs, 1); /*gaps_in_frame_num_allowed_flag*/
  1736. mb_width = bs_get_ue(bs) + 1;
  1737. mb_height= bs_get_ue(bs) + 1;
  1738. sps->frame_mbs_only_flag = gf_bs_read_int(bs, 1);
  1739. sps->width = mb_width * 16;
  1740. sps->height = (2-sps->frame_mbs_only_flag) * mb_height * 16;
  1741. /*mb_adaptive_frame_field_flag*/
  1742. if (!sps->frame_mbs_only_flag) gf_bs_read_int(bs, 1);
  1743. gf_bs_read_int(bs, 1); /*direct_8x8_inference_flag*/
  1744. cl = cr = ct = cb = 0;
  1745. if (gf_bs_read_int(bs, 1)) /*crop*/ {
  1746. int CropUnitX;
  1747. int CropUnitY;
  1748. if (ChromaArrayType == 0) {
  1749. CropUnitX = 1;
  1750. CropUnitY = 2 - sps->frame_mbs_only_flag;
  1751. } else {
  1752. static const int SubWidthC [4] = { 0, 2, 2, 1 };
  1753. static const int SubHeightC[4] = { 0, 2, 1, 1 };
  1754. CropUnitX = SubWidthC [chroma_format_idc];
  1755. CropUnitY = SubHeightC[chroma_format_idc] * (2 - sps->frame_mbs_only_flag);
  1756. }
  1757. cl = bs_get_ue(bs); /*crop_left*/
  1758. cr = bs_get_ue(bs); /*crop_right*/
  1759. ct = bs_get_ue(bs); /*crop_top*/
  1760. cb = bs_get_ue(bs); /*crop_bottom*/
  1761. sps->width = 16*mb_width - CropUnitX*(cl + cr);
  1762. sps->height -= CropUnitY*(ct + cb);
  1763. }
  1764. if (vui_flag_pos) {
  1765. *vui_flag_pos = (u32) gf_bs_get_bit_offset(bs);
  1766. }
  1767. /*vui_parameters_present_flag*/
  1768. if (gf_bs_read_int(bs, 1)) {
  1769. /*aspect_ratio_info_present_flag*/
  1770. if (gf_bs_read_int(bs, 1)) {
  1771. s32 aspect_ratio_idc = gf_bs_read_int(bs, 8);
  1772. if (aspect_ratio_idc == 255) {
  1773. sps->vui.par_num = gf_bs_read_int(bs, 16); /*AR num*/
  1774. sps->vui.par_den = gf_bs_read_int(bs, 16); /*AR den*/
  1775. } else if (aspect_ratio_idc<14) {
  1776. sps->vui.par_num = avc_sar[aspect_ratio_idc].w;
  1777. sps->vui.par_den = avc_sar[aspect_ratio_idc].h;
  1778. }
  1779. }
  1780. if(gf_bs_read_int(bs, 1)) /* overscan_info_present_flag */
  1781. gf_bs_read_int(bs, 1); /* overscan_appropriate_flag */
  1782. if (gf_bs_read_int(bs, 1)){ /* video_signal_type_present_flag */
  1783. gf_bs_read_int(bs, 3); /* video_format */
  1784. gf_bs_read_int(bs, 1); /* video_full_range_flag */
  1785. if (gf_bs_read_int(bs, 1)){ /* colour_description_present_flag */
  1786. gf_bs_read_int(bs, 8); /* colour_primaries */
  1787. gf_bs_read_int(bs, 8); /* transfer_characteristics */
  1788. gf_bs_read_int(bs, 8); /* matrix_coefficients */
  1789. }
  1790. }
  1791. if (gf_bs_read_int(bs, 1)) { /* chroma_location_info_present_flag */
  1792. bs_get_ue(bs); /* chroma_sample_location_type_top_field */
  1793. bs_get_ue(bs); /* chroma_sample_location_type_bottom_field */
  1794. }
  1795. sps->vui.timing_info_present_flag = gf_bs_read_int(bs, 1);
  1796. if (sps->vui.timing_info_present_flag) {
  1797. sps->vui.num_units_in_tick = gf_bs_read_int(bs, 32);
  1798. sps->vui.time_scale = gf_bs_read_int(bs, 32);
  1799. sps->vui.fixed_frame_rate_flag = gf_bs_read_int(bs, 1);
  1800. }
  1801. sps->vui.nal_hrd_parameters_present_flag = gf_bs_read_int(bs, 1);
  1802. if (sps->vui.nal_hrd_parameters_present_flag)
  1803. avc_parse_hrd_parameters(bs, &sps->vui.hrd);
  1804. sps->vui.vcl_hrd_parameters_present_flag = gf_bs_read_int(bs, 1);
  1805. if (sps->vui.vcl_hrd_parameters_present_flag)
  1806. avc_parse_hrd_parameters(bs, &sps->vui.hrd);
  1807. if (sps->vui.nal_hrd_parameters_present_flag || sps->vui.vcl_hrd_parameters_present_flag)
  1808. gf_bs_read_int(bs, 1); /*low_delay_hrd_flag*/
  1809. sps->vui.pic_struct_present_flag = gf_bs_read_int(bs, 1);
  1810. }
  1811. /*end of seq_parameter_set_data*/
  1812. if (subseq_sps) {
  1813. if ((profile_idc==83) || (profile_idc==86)) {
  1814. u8 extended_spatial_scalability_idc;
  1815. /*parsing seq_parameter_set_svc_extension*/
  1816. /*inter_layer_deblocking_filter_control_present_flag=*/ gf_bs_read_int(bs, 1);
  1817. extended_spatial_scalability_idc = gf_bs_read_int(bs, 2);
  1818. if (ChromaArrayType == 1 || ChromaArrayType == 2) {
  1819. /*chroma_phase_x_plus1_flag*/ gf_bs_read_int(bs, 1);
  1820. }
  1821. if( ChromaArrayType == 1 ) {
  1822. /*chroma_phase_y_plus1*/ gf_bs_read_int(bs, 2);
  1823. }
  1824. if (extended_spatial_scalability_idc == 1) {
  1825. if( ChromaArrayType > 0 ) {
  1826. /*seq_ref_layer_chroma_phase_x_plus1_flag*/gf_bs_read_int(bs, 1);
  1827. /*seq_ref_layer_chroma_phase_y_plus1*/gf_bs_read_int(bs, 2);
  1828. }
  1829. /*seq_scaled_ref_layer_left_offset*/ bs_get_se(bs);
  1830. /*seq_scaled_ref_layer_top_offset*/bs_get_se(bs);
  1831. /*seq_scaled_ref_layer_right_offset*/bs_get_se(bs);
  1832. /*seq_scaled_ref_layer_bottom_offset*/bs_get_se(bs);
  1833. }
  1834. if (/*seq_tcoeff_level_prediction_flag*/gf_bs_read_int(bs, 1)) {
  1835. /*adaptive_tcoeff_level_prediction_flag*/ gf_bs_read_int(bs, 1);
  1836. }
  1837. /*slice_header_restriction_flag*/gf_bs_read_int(bs, 1);
  1838. /*svc_vui_parameters_present*/
  1839. if (gf_bs_read_int(bs, 1)) {
  1840. u32 i, vui_ext_num_entries_minus1;
  1841. vui_ext_num_entries_minus1 = bs_get_ue(bs);
  1842. for (i=0; i <= vui_ext_num_entries_minus1; i++) {
  1843. u8 vui_ext_nal_hrd_parameters_present_flag, vui_ext_vcl_hrd_parameters_present_flag, vui_ext_timing_info_present_flag;
  1844. /*u8 vui_ext_dependency_id =*/ gf_bs_read_int(bs, 3);
  1845. /*u8 vui_ext_quality_id =*/ gf_bs_read_int(bs, 4);
  1846. /*u8 vui_ext_temporal_id =*/ gf_bs_read_int(bs, 3);
  1847. vui_ext_timing_info_present_flag = gf_bs_read_int(bs, 1);
  1848. if (vui_ext_timing_info_present_flag) {
  1849. /*u32 vui_ext_num_units_in_tick = */gf_bs_read_int(bs, 32);
  1850. /*u32 vui_ext_time_scale = */gf_bs_read_int(bs, 32);
  1851. /*u8 vui_ext_fixed_frame_rate_flag = */gf_bs_read_int(bs, 1);
  1852. }
  1853. vui_ext_nal_hrd_parameters_present_flag = gf_bs_read_int(bs, 1);
  1854. if (vui_ext_nal_hrd_parameters_present_flag) {
  1855. //hrd_parameters( )
  1856. }
  1857. vui_ext_vcl_hrd_parameters_present_flag = gf_bs_read_int(bs, 1);
  1858. if (vui_ext_vcl_hrd_parameters_present_flag) {
  1859. //hrd_parameters( )
  1860. }
  1861. if ( vui_ext_nal_hrd_parameters_present_flag || vui_ext_vcl_hrd_parameters_present_flag) {
  1862. /*vui_ext_low_delay_hrd_flag*/gf_bs_read_int(bs, 1);
  1863. }
  1864. /*vui_ext_pic_struct_present_flag*/gf_bs_read_int(bs, 1);
  1865. }
  1866. }
  1867. }
  1868. else if ((profile_idc==118) || (profile_idc==128)) {
  1869. GF_LOG(GF_LOG_WARNING, GF_LOG_CODING, ("[avc-h264] MVC not supported - skipping parsing end of Subset SPS\n"));
  1870. goto exit;
  1871. }
  1872. if (gf_bs_read_int(bs, 1)) {
  1873. GF_LOG(GF_LOG_WARNING, GF_LOG_CODING, ("[avc-h264] skipping parsing end of Subset SPS (additional_extension2)\n"));
  1874. goto exit;
  1875. }
  1876. }
  1877. exit:
  1878. gf_bs_del(bs);
  1879. gf_free(sps_data_without_emulation_bytes);
  1880. return sps_id;
  1881. }
  1882. GF_EXPORT
  1883. s32 gf_media_avc_read_pps(const char *pps_data, u32 pps_size, AVCState *avc)
  1884. {
  1885. GF_BitStream *bs;
  1886. char *pps_data_without_emulation_bytes = NULL;
  1887. u32 pps_data_without_emulation_bytes_size = 0;
  1888. s32 pps_id;
  1889. AVC_PPS *pps;
  1890. /*PPS still contains emulation bytes*/
  1891. pps_data_without_emulation_bytes = gf_malloc(pps_size*sizeof(char));
  1892. pps_data_without_emulation_bytes_size = avc_remove_emulation_bytes(pps_data, pps_data_without_emulation_bytes, pps_size);
  1893. bs = gf_bs_new(pps_data_without_emulation_bytes, pps_data_without_emulation_bytes_size, GF_BITSTREAM_READ);
  1894. if (!bs) {
  1895. pps_id = -1;
  1896. goto exit;
  1897. }
  1898. /*nal hdr*/gf_bs_read_u8(bs);
  1899. pps_id = bs_get_ue(bs);
  1900. if (pps_id>=255) {
  1901. pps_id = -1;
  1902. goto exit;
  1903. }
  1904. pps = &avc->pps[pps_id];
  1905. if (!pps->status) pps->status = 1;
  1906. pps->sps_id = bs_get_ue(bs);
  1907. if (pps->sps_id >= 32) {
  1908. pps->sps_id = 0;
  1909. pps_id = -1;
  1910. goto exit;
  1911. }
  1912. /*sps_id may be refer to regular SPS or subseq sps, depending on the coded slice refering to the pps*/
  1913. if (!avc->sps[pps->sps_id].state && !avc->sps[pps->sps_id + GF_SVC_SSPS_ID_SHIFT].state) {
  1914. pps_id = -1;
  1915. goto exit;
  1916. }
  1917. avc->sps_active_idx = pps->sps_id; /*set active sps*/
  1918. /*pps->cabac = */gf_bs_read_int(bs, 1);
  1919. pps->pic_order_present= gf_bs_read_int(bs, 1);
  1920. pps->slice_group_count= bs_get_ue(bs) + 1;
  1921. if (pps->slice_group_count > 1 ) /*pps->mb_slice_group_map_type = */bs_get_ue(bs);
  1922. /*pps->ref_count[0]= */bs_get_ue(bs) /*+ 1*/;
  1923. /*pps->ref_count[1]= */bs_get_ue(bs) /*+ 1*/;
  1924. /*
  1925. if ((pps->ref_count[0] > 32) || (pps->ref_count[1] > 32)) goto exit;
  1926. */
  1927. /*pps->weighted_pred = */gf_bs_read_int(bs, 1);
  1928. /*pps->weighted_bipred_idc = */gf_bs_read_int(bs, 2);
  1929. /*pps->init_qp = */bs_get_se(bs) /*+ 26*/;
  1930. /*pps->init_qs= */bs_get_se(bs) /*+ 26*/;
  1931. /*pps->chroma_qp_index_offset = */bs_get_se(bs);
  1932. /*pps->deblocking_filter_parameters_present = */gf_bs_read_int(bs, 1);
  1933. /*pps->constrained_intra_pred = */gf_bs_read_int(bs, 1);
  1934. pps->redundant_pic_cnt_present = gf_bs_read_int(bs, 1);
  1935. exit:
  1936. gf_bs_del(bs);
  1937. gf_free(pps_data_without_emulation_bytes);
  1938. return pps_id;
  1939. }
  1940. s32 gf_media_avc_read_sps_ext(const char *spse_data, u32 spse_size)
  1941. {
  1942. GF_BitStream *bs;
  1943. char *spse_data_without_emulation_bytes = NULL;
  1944. u32 spse_data_without_emulation_bytes_size = 0;
  1945. s32 sps_id;
  1946. /*PPS still contains emulation bytes*/
  1947. spse_data_without_emulation_bytes = gf_malloc(spse_size*sizeof(char));
  1948. spse_data_without_emulation_bytes_size = avc_remove_emulation_bytes(spse_data, spse_data_without_emulation_bytes, spse_size);
  1949. bs = gf_bs_new(spse_data_without_emulation_bytes, spse_data_without_emulation_bytes_size, GF_BITSTREAM_READ);
  1950. /*nal header*/gf_bs_read_u8(bs);
  1951. sps_id = bs_get_ue(bs);
  1952. gf_bs_del(bs);
  1953. gf_free(spse_data_without_emulation_bytes);
  1954. return sps_id;
  1955. }
  1956. static s32 SVC_ReadNal_header_extension(GF_BitStream *bs, SVC_NALUHeader *NalHeader)
  1957. {
  1958. gf_bs_read_int(bs, 1); //reserved_one_bits
  1959. NalHeader->idr_pic_flag = gf_bs_read_int(bs, 1); //idr_flag
  1960. NalHeader->priority_id = gf_bs_read_int(bs, 6); //priority_id
  1961. gf_bs_read_int(bs, 1); //no_inter_layer_pred_flag
  1962. NalHeader->dependency_id = gf_bs_read_int(bs, 3); //DependencyId
  1963. NalHeader->quality_id = gf_bs_read_int(bs, 4); //quality_id
  1964. NalHeader->temporal_id = gf_bs_read_int(bs, 3); //temporal_id
  1965. gf_bs_read_int(bs, 1); //use_ref_base_pic_flag
  1966. gf_bs_read_int(bs, 1); //discardable_flag
  1967. gf_bs_read_int(bs, 1); //output_flag
  1968. gf_bs_read_int(bs, 2); //reserved_three_2bits
  1969. return 1;
  1970. }
  1971. static s32 avc_parse_slice(GF_BitStream *bs, AVCState *avc, Bool svc_idr_flag, AVCSliceInfo *si)
  1972. {
  1973. s32 pps_id;
  1974. /*s->current_picture.reference= h->nal_ref_idc != 0;*/
  1975. /*first_mb_in_slice = */bs_get_ue(bs);
  1976. si->slice_type = bs_get_ue(bs);
  1977. if (si->slice_type > 9) return -1;
  1978. pps_id = bs_get_ue(bs);
  1979. if (pps_id>255) return -1;
  1980. si->pps = &avc->pps[pps_id];
  1981. if (!si->pps->slice_group_count) return -2;
  1982. si->sps = &avc->sps[si->pps->sps_id];
  1983. if (!si->sps->log2_max_frame_num) return -2;
  1984. si->frame_num = gf_bs_read_int(bs, si->sps->log2_max_frame_num);
  1985. si->field_pic_flag = 0;
  1986. si->bottom_field_flag = 0;
  1987. if (!si->sps->frame_mbs_only_flag) {
  1988. si->field_pic_flag = gf_bs_read_int(bs, 1);
  1989. if (si->field_pic_flag)
  1990. si->bottom_field_flag = gf_bs_read_int(bs, 1);
  1991. }
  1992. if ((si->nal_unit_type==GF_AVC_NALU_IDR_SLICE) || svc_idr_flag)
  1993. si->idr_pic_id = bs_get_ue(bs);
  1994. if (si->sps->poc_type==0) {
  1995. si->poc_lsb = gf_bs_read_int(bs, si->sps->log2_max_poc_lsb);
  1996. if (si->pps->pic_order_present && !si->field_pic_flag) {
  1997. si->delta_poc_bottom = bs_get_se(bs);
  1998. }
  1999. } else if ((si->sps->poc_type==1) && !si->sps->delta_pic_order_always_zero_flag) {
  2000. si->delta_poc[0] = bs_get_se(bs);
  2001. if ((si->pps->pic_order_present==1) && !si->field_pic_flag)
  2002. si->delta_poc[1] = bs_get_se(bs);
  2003. }
  2004. if (si->pps->redundant_pic_cnt_present) {
  2005. si->redundant_pic_cnt = bs_get_ue(bs);
  2006. }
  2007. return 0;
  2008. }
  2009. static s32 svc_parse_slice(GF_BitStream *bs, AVCState *avc, AVCSliceInfo *si)
  2010. {
  2011. s32 pps_id;
  2012. /*s->current_picture.reference= h->nal_ref_idc != 0;*/
  2013. /*first_mb_in_slice = */bs_get_ue(bs);
  2014. si->slice_type = bs_get_ue(bs);
  2015. if (si->slice_type > 9) return -1;
  2016. pps_id = bs_get_ue(bs);
  2017. if (pps_id>255)
  2018. return -1;
  2019. si->pps = &avc->pps[pps_id];
  2020. si->pps->id = pps_id;
  2021. if (!si->pps->slice_group_count)
  2022. return -2;
  2023. si->sps = &avc->sps[si->pps->sps_id + GF_SVC_SSPS_ID_SHIFT];
  2024. if (!si->sps->log2_max_frame_num)
  2025. return -2;
  2026. si->frame_num = gf_bs_read_int(bs, si->sps->log2_max_frame_num);
  2027. si->field_pic_flag = 0;
  2028. if (si->sps->frame_mbs_only_flag) {
  2029. /*s->picture_structure= PICT_FRAME;*/
  2030. } else {
  2031. si->field_pic_flag = gf_bs_read_int(bs, 1);
  2032. if (si->field_pic_flag) si->bottom_field_flag = gf_bs_read_int(bs, 1);
  2033. }
  2034. if (si->nal_unit_type == GF_AVC_NALU_IDR_SLICE || si ->NalHeader.idr_pic_flag)
  2035. si->idr_pic_id = bs_get_ue(bs);
  2036. if (si->sps->poc_type==0) {
  2037. si->poc_lsb = gf_bs_read_int(bs, si->sps->log2_max_poc_lsb);
  2038. if (si->pps->pic_order_present && !si->field_pic_flag) {
  2039. si->delta_poc_bottom = bs_get_se(bs);
  2040. }
  2041. } else if ((si->sps->poc_type==1) && !si->sps->delta_pic_order_always_zero_flag) {
  2042. si->delta_poc[0] = bs_get_se(bs);
  2043. if ((si->pps->pic_order_present==1) && !si->field_pic_flag)
  2044. si->delta_poc[1] = bs_get_se(bs);
  2045. }
  2046. if (si->pps->redundant_pic_cnt_present) {
  2047. si->redundant_pic_cnt = bs_get_ue(bs);
  2048. }
  2049. return 0;
  2050. }
  2051. static s32 avc_parse_recovery_point_sei(GF_BitStream *bs, AVCState *avc)
  2052. {
  2053. AVCSeiRecoveryPoint *rp = &avc->sei.recovery_point;
  2054. rp->frame_cnt = bs_get_ue(bs);
  2055. rp->exact_match_flag = gf_bs_read_int(bs, 1);
  2056. rp->broken_link_flag = gf_bs_read_int(bs, 1);
  2057. rp->changing_slice_group_idc = gf_bs_read_int(bs, 2);
  2058. rp->valid = 1;
  2059. return 0;
  2060. }
  2061. /*for interpretation see ISO 14496-10 N.11084, table D-1*/
  2062. static s32 avc_parse_pic_timing_sei(GF_BitStream *bs, AVCState *avc)
  2063. {
  2064. int i;
  2065. int sps_id = avc->sps_active_idx;
  2066. const char NumClockTS[] = {1, 1, 1, 2, 2, 3, 3, 2, 3};
  2067. AVCSeiPicTiming *pt = &avc->sei.pic_timing;
  2068. if (sps_id < 0) {
  2069. /*sps_active_idx equals -1 when no sps has been detected. In this case SEI should not be decoded.*/
  2070. assert(0);
  2071. return 1;
  2072. }
  2073. if (avc->sps[sps_id].vui.nal_hrd_parameters_present_flag || avc->sps[sps_id].vui.vcl_hrd_parameters_present_flag) { /*CpbDpbDelaysPresentFlag, see 14496-10(2003) E.11*/
  2074. gf_bs_read_int(bs, 1+avc->sps[sps_id].vui.hrd.cpb_removal_delay_length_minus1); /*cpb_removal_delay*/
  2075. gf_bs_read_int(bs, 1+avc->sps[sps_id].vui.hrd.dpb_output_delay_length_minus1); /*dpb_output_delay*/
  2076. }
  2077. /*ISO 14496-10 (2003), D.8.2: we need to get pic_struct in order to know if we display top field first or bottom field first*/
  2078. if (avc->sps[sps_id].vui.pic_struct_present_flag) {
  2079. pt->pic_struct = gf_bs_read_int(bs, 4);
  2080. if (pt->pic_struct > 8) {
  2081. GF_LOG(GF_LOG_ERROR, GF_LOG_CODING, ("[avc-h264] invalid pic_struct value %d\n", pt->pic_struct));
  2082. return 1;
  2083. }
  2084. for (i=0; i<NumClockTS[pt->pic_struct]; i++) {
  2085. if (gf_bs_read_int(bs, 1)) {/*clock_timestamp_flag[i]*/
  2086. Bool full_timestamp_flag;
  2087. gf_bs_read_int(bs, 2); /*ct_type*/
  2088. gf_bs_read_int(bs, 1); /*nuit_field_based_flag*/
  2089. gf_bs_read_int(bs, 5); /*counting_type*/
  2090. full_timestamp_flag = gf_bs_read_int(bs, 1);/*full_timestamp_flag*/
  2091. gf_bs_read_int(bs, 1); /*discontinuity_flag*/
  2092. gf_bs_read_int(bs, 1); /*cnt_dropped_flag*/
  2093. gf_bs_read_int(bs, 8); /*n_frames*/
  2094. if (full_timestamp_flag) {
  2095. gf_bs_read_int(bs, 6); /*seconds_value*/
  2096. gf_bs_read_int(bs, 6); /*minutes_value*/
  2097. gf_bs_read_int(bs, 5); /*hours_value*/
  2098. } else {
  2099. if (gf_bs_read_int(bs, 1)) { /*seconds_flag*/
  2100. gf_bs_read_int(bs, 6); /*seconds_value*/
  2101. if (gf_bs_read_int(bs, 1)) { /*minutes_flag*/
  2102. gf_bs_read_int(bs, 6); /*minutes_value*/
  2103. if (gf_bs_read_int(bs, 1)) { /*hours_flag*/
  2104. gf_bs_read_int(bs, 5); /*hours_value*/
  2105. }
  2106. }
  2107. }
  2108. if (avc->sps[sps_id].vui.hrd.time_offset_length > 0)
  2109. gf_bs_read_int(bs, avc->sps[sps_id].vui.hrd.time_offset_length); /*time_offset*/
  2110. }
  2111. }
  2112. }
  2113. }
  2114. return 0;
  2115. }
  2116. static void avc_compute_poc(AVCSliceInfo *si)
  2117. {
  2118. enum {
  2119. AVC_PIC_FRAME,
  2120. AVC_PIC_FIELD_TOP,
  2121. AVC_PIC_FIELD_BOTTOM,
  2122. } pic_type;
  2123. s32 field_poc[2] = {0,0};
  2124. s32 max_frame_num = 1 << (si->sps->log2_max_frame_num);
  2125. /* picture type */
  2126. if (si->sps->frame_mbs_only_flag || !si->field_pic_flag) pic_type = AVC_PIC_FRAME;
  2127. else if (si->bottom_field_flag) pic_type = AVC_PIC_FIELD_BOTTOM;
  2128. else pic_type = AVC_PIC_FIELD_TOP;
  2129. /* frame_num_offset */
  2130. if (si->nal_unit_type == GF_AVC_NALU_IDR_SLICE) {
  2131. si->poc_lsb_prev = 0;
  2132. si->poc_msb_prev = 0;
  2133. si->frame_num_offset = 0;
  2134. } else {
  2135. if (si->frame_num < si->frame_num_prev)
  2136. si->frame_num_offset = si->frame_num_offset_prev + max_frame_num;
  2137. else
  2138. si->frame_num_offset = si->frame_num_offset_prev;
  2139. }
  2140. /*ISO 14496-10 N.11084 8.2.1.1*/
  2141. if (si->sps->poc_type==0)
  2142. {
  2143. const u32 max_poc_lsb = 1 << (si->sps->log2_max_poc_lsb);
  2144. /*ISO 14496-10 N.11084 eq (8-3)*/
  2145. if ((si->poc_lsb < si->poc_lsb_prev) &&
  2146. (si->poc_lsb_prev - si->poc_lsb >= max_poc_lsb / 2) )
  2147. si->poc_msb = si->poc_msb_prev + max_poc_lsb;
  2148. else if ((si->poc_lsb > si->poc_lsb_prev) &&
  2149. (si->poc_lsb - si->poc_lsb_prev > max_poc_lsb / 2))
  2150. si->poc_msb = si->poc_msb_prev - max_poc_lsb;
  2151. else
  2152. si->poc_msb = si->poc_msb_prev;
  2153. /*ISO 14496-10 N.11084 eq (8-4)*/
  2154. if (pic_type != AVC_PIC_FIELD_BOTTOM)
  2155. field_poc[0] = si->poc_msb + si->poc_lsb;
  2156. /*ISO 14496-10 N.11084 eq (8-5)*/
  2157. if (pic_type != AVC_PIC_FIELD_TOP) {
  2158. if (!si->field_pic_flag)
  2159. field_poc[1] = field_poc[0] + si->delta_poc_bottom;
  2160. else
  2161. field_poc[1] = si->poc_msb + si->poc_lsb;
  2162. }
  2163. }
  2164. /*ISO 14496-10 N.11084 8.2.1.2*/
  2165. else if (si->sps->poc_type==1)
  2166. {
  2167. u32 i;
  2168. s32 abs_frame_num, expected_delta_per_poc_cycle, expected_poc;
  2169. if (si->sps->poc_cycle_length)
  2170. abs_frame_num = si->frame_num_offset + si->frame_num;
  2171. else
  2172. abs_frame_num = 0;
  2173. if (!si->nal_ref_idc && (abs_frame_num > 0)) abs_frame_num--;
  2174. expected_delta_per_poc_cycle = 0;
  2175. for (i=0; i < si->sps->poc_cycle_length; i++)
  2176. expected_delta_per_poc_cycle += si->sps->offset_for_ref_frame[i];
  2177. if (abs_frame_num > 0) {
  2178. const u32 poc_cycle_cnt = ( abs_frame_num - 1 ) / si->sps->poc_cycle_length;
  2179. const u32 frame_num_in_poc_cycle = ( abs_frame_num - 1 ) % si->sps->poc_cycle_length;
  2180. expected_poc = poc_cycle_cnt * expected_delta_per_poc_cycle;
  2181. for (i = 0; i<=frame_num_in_poc_cycle; i++)
  2182. expected_poc += si->sps->offset_for_ref_frame[i];
  2183. } else {
  2184. expected_poc = 0;
  2185. }
  2186. if (!si->nal_ref_idc) expected_poc += si->sps->offset_for_non_ref_pic;
  2187. field_poc[0] = expected_poc + si->delta_poc[0];
  2188. field_poc[1] = field_poc[0] + si->sps->offset_for_top_to_bottom_field;
  2189. if (pic_type == AVC_PIC_FRAME) field_poc[1] += si->delta_poc[1];
  2190. }
  2191. /*ISO 14496-10 N.11084 8.2.1.3*/
  2192. else if (si->sps->poc_type== 2)
  2193. {
  2194. int poc;
  2195. if (si->nal_unit_type == GF_AVC_NALU_IDR_SLICE) {
  2196. poc = 0;
  2197. } else {
  2198. const int abs_frame_num = si->frame_num_offset + si->frame_num;
  2199. poc = 2 * abs_frame_num;
  2200. if (!si->nal_ref_idc) poc -= 1;
  2201. }
  2202. field_poc[0] = poc;
  2203. field_poc[1] = poc;
  2204. }
  2205. /*ISO 14496-10 N.11084 eq (8-1)*/
  2206. if (pic_type == AVC_PIC_FRAME)
  2207. si->poc = MIN(field_poc[0], field_poc[1] );
  2208. else if (pic_type == AVC_PIC_FIELD_TOP)
  2209. si->poc = field_poc[0];
  2210. else
  2211. si->poc = field_poc[1];
  2212. }
  2213. GF_EXPORT
  2214. s32 gf_media_avc_parse_nalu(GF_BitStream *bs, u32 nal_hdr, AVCState *avc)
  2215. {
  2216. u8 idr_flag;
  2217. s32 slice, ret;
  2218. AVCSliceInfo n_state;
  2219. slice = 0;
  2220. memcpy(&n_state, &avc->s_info, sizeof(AVCSliceInfo));
  2221. n_state.nal_unit_type = nal_hdr & 0x1F;
  2222. n_state.nal_ref_idc = (nal_hdr>>5) & 0x3;
  2223. idr_flag = 0;
  2224. ret = 0;
  2225. switch (n_state.nal_unit_type) {
  2226. case GF_AVC_NALU_ACCESS_UNIT:
  2227. case GF_AVC_NALU_END_OF_SEQ:
  2228. case GF_AVC_NALU_END_OF_STREAM:
  2229. ret = 1;
  2230. break;
  2231. case GF_AVC_NALU_SVC_SLICE:
  2232. SVC_ReadNal_header_extension(bs, &n_state.NalHeader);
  2233. slice = 1;
  2234. // slice buffer - read the info and compare.
  2235. ret = svc_parse_slice(bs, avc, &n_state);
  2236. if (avc->s_info.nal_ref_idc) {
  2237. n_state.poc_lsb_prev = avc->s_info.poc_lsb;
  2238. n_state.poc_msb_prev = avc->s_info.poc_msb;
  2239. }
  2240. if (slice)
  2241. avc_compute_poc(&n_state);
  2242. if (avc->s_info.poc != n_state.poc) {
  2243. memcpy(&avc -> s_info, &n_state, sizeof(AVCSliceInfo));
  2244. return 1;
  2245. }
  2246. memcpy(&avc -> s_info, &n_state, sizeof(AVCSliceInfo));
  2247. return 0;
  2248. case GF_AVC_NALU_SVC_PREFIX_NALU:
  2249. SVC_ReadNal_header_extension(bs, &n_state.NalHeader);
  2250. return 0;
  2251. case GF_AVC_NALU_NON_IDR_SLICE:
  2252. case GF_AVC_NALU_DP_A_SLICE:
  2253. case GF_AVC_NALU_DP_B_SLICE:
  2254. case GF_AVC_NALU_DP_C_SLICE:
  2255. case GF_AVC_NALU_IDR_SLICE:
  2256. slice = 1;
  2257. /* slice buffer - read the info and compare.*/
  2258. ret = avc_parse_slice(bs, avc, idr_flag, &n_state);
  2259. if (ret<0) return ret;
  2260. ret = 0;
  2261. if (
  2262. ((avc->s_info.nal_unit_type > GF_AVC_NALU_IDR_SLICE) || (avc->s_info.nal_unit_type < GF_AVC_NALU_NON_IDR_SLICE))
  2263. && (avc->s_info.nal_unit_type != GF_AVC_NALU_SVC_SLICE)
  2264. ) {
  2265. break;
  2266. }
  2267. if (avc->s_info.frame_num != n_state.frame_num) { ret = 1; break; }
  2268. if (avc->s_info.field_pic_flag != n_state.field_pic_flag) { ret = 1; break; }
  2269. if ((avc->s_info.nal_ref_idc != n_state.nal_ref_idc) &&
  2270. (!avc->s_info.nal_ref_idc || !n_state.nal_ref_idc)) {
  2271. ret = 1;
  2272. break;
  2273. }
  2274. assert(avc->s_info.sps);
  2275. if (avc->s_info.sps->poc_type == n_state.sps->poc_type) {
  2276. if (!avc->s_info.sps->poc_type) {
  2277. if (!n_state.bottom_field_flag && (avc->s_info.poc_lsb != n_state.poc_lsb)) {
  2278. ret = 1;
  2279. break;
  2280. }
  2281. if (avc->s_info.delta_poc_bottom != n_state.delta_poc_bottom) {
  2282. ret = 1;
  2283. break;
  2284. }
  2285. } else if (avc->s_info.sps->poc_type==1) {
  2286. if (avc->s_info.delta_poc[0] != n_state.delta_poc[0]) {
  2287. ret =1;
  2288. break;
  2289. }
  2290. if (avc->s_info.delta_poc[1] != n_state.delta_poc[1]) {
  2291. ret = 1;
  2292. break;
  2293. }
  2294. }
  2295. }
  2296. if (n_state.nal_unit_type == GF_AVC_NALU_IDR_SLICE) {
  2297. if (avc->s_info.nal_unit_type != GF_AVC_NALU_IDR_SLICE) { /*IdrPicFlag differs in value*/
  2298. ret = 1;
  2299. break;
  2300. }
  2301. else if (avc->s_info.idr_pic_id != n_state.idr_pic_id) { /*both IDR and idr_pic_id differs*/
  2302. ret = 1;
  2303. break;
  2304. }
  2305. }
  2306. break;
  2307. case GF_AVC_NALU_SEQ_PARAM:
  2308. case GF_AVC_NALU_PIC_PARAM:
  2309. case GF_AVC_NALU_SVC_SUBSEQ_PARAM:
  2310. case GF_AVC_NALU_FILLER_DATA:
  2311. return 0;
  2312. default:
  2313. if (avc->s_info.nal_unit_type <= GF_AVC_NALU_IDR_SLICE) ret = 1;
  2314. //To detect change of AU when multiple sps and pps in stream
  2315. else if ((nal_hdr & 0x1F) == GF_AVC_NALU_SEI && avc -> s_info .nal_unit_type == GF_AVC_NALU_SVC_SLICE)
  2316. ret = 1;
  2317. else if ((nal_hdr & 0x1F) == GF_AVC_NALU_SEQ_PARAM && avc -> s_info .nal_unit_type == GF_AVC_NALU_SVC_SLICE)
  2318. ret = 1;
  2319. else
  2320. ret = 0;
  2321. break;
  2322. }
  2323. /* save _prev values */
  2324. if (ret && avc->s_info.sps) {
  2325. n_state.frame_num_offset_prev = avc->s_info.frame_num_offset;
  2326. if ((avc->s_info.sps->poc_type != 2) || (avc->s_info.nal_ref_idc != 0))
  2327. n_state.frame_num_prev = avc->s_info.frame_num;
  2328. if (avc->s_info.nal_ref_idc) {
  2329. n_state.poc_lsb_prev = avc->s_info.poc_lsb;
  2330. n_state.poc_msb_prev = avc->s_info.poc_msb;
  2331. }
  2332. }
  2333. if (slice) avc_compute_poc(&n_state);
  2334. memcpy(&avc->s_info, &n_state, sizeof(AVCSliceInfo));
  2335. return ret;
  2336. }
  2337. u32 gf_media_avc_reformat_sei(char *buffer, u32 nal_size, AVCState *avc)
  2338. {
  2339. u32 ptype, psize, hdr, written, var;
  2340. u64 start;
  2341. char *new_buffer;
  2342. GF_BitStream *bs;
  2343. char *sei_without_emulation_bytes = NULL;
  2344. u32 sei_without_emulation_bytes_size = 0;
  2345. hdr = buffer[0];
  2346. if ((hdr & 0x1F) != GF_AVC_NALU_SEI) return 0;
  2347. /*PPS still contains emulation bytes*/
  2348. sei_without_emulation_bytes = gf_malloc(nal_size + 1/*for SEI null string termination*/);
  2349. sei_without_emulation_bytes_size = avc_remove_emulation_bytes(buffer, sei_without_emulation_bytes, nal_size);
  2350. bs = gf_bs_new(sei_without_emulation_bytes, sei_without_emulation_bytes_size, GF_BITSTREAM_READ);
  2351. gf_bs_read_int(bs, 8);
  2352. new_buffer = (char*)gf_malloc(sizeof(char)*nal_size);
  2353. new_buffer[0] = (char) hdr;
  2354. written = 1;
  2355. /*parse SEI*/
  2356. while (gf_bs_available(bs)) {
  2357. Bool do_copy;
  2358. ptype = 0;
  2359. while (gf_bs_peek_bits(bs, 8, 0)==0xFF) {
  2360. gf_bs_read_int(bs, 8);
  2361. ptype += 255;
  2362. }
  2363. ptype += gf_bs_read_int(bs, 8);
  2364. psize = 0;
  2365. while (gf_bs_peek_bits(bs, 8, 0)==0xFF) {
  2366. gf_bs_read_int(bs, 8);
  2367. psize += 255;
  2368. }
  2369. psize += gf_bs_read_int(bs, 8);
  2370. start = gf_bs_get_position(bs);
  2371. do_copy = 1;
  2372. switch (ptype) {
  2373. /*remove SEI messages forbidden in MP4*/
  2374. case 3: /*filler data*/
  2375. case 10: /*sub_seq info*/
  2376. case 11: /*sub_seq_layer char*/
  2377. case 12: /*sub_seq char*/
  2378. do_copy = 0;
  2379. break;
  2380. case 5: /*user unregistered */
  2381. {
  2382. char prev;
  2383. assert(start+psize+1 < nal_size+1);
  2384. prev = sei_without_emulation_bytes[start+psize+1];
  2385. sei_without_emulation_bytes[start+psize+1] = 0;
  2386. GF_LOG(GF_LOG_DEBUG, GF_LOG_CODING, ("[avc-h264] SEI user message %s\n", sei_without_emulation_bytes+start+16));
  2387. sei_without_emulation_bytes[start+psize+1] = prev;
  2388. }
  2389. break;
  2390. case 6: /*recovery point*/
  2391. {
  2392. GF_BitStream *rp_bs = gf_bs_new(sei_without_emulation_bytes + start, psize, GF_BITSTREAM_READ);
  2393. avc_parse_recovery_point_sei(rp_bs, avc);
  2394. gf_bs_del(rp_bs);
  2395. }
  2396. break;
  2397. case 1: /*pic_timing*/
  2398. {
  2399. GF_BitStream *pt_bs = gf_bs_new(sei_without_emulation_bytes + start, psize, GF_BITSTREAM_READ);
  2400. avc_parse_pic_timing_sei(pt_bs, avc);
  2401. gf_bs_del(pt_bs);
  2402. }
  2403. break;
  2404. case 0: /*buffering period*/
  2405. case 2: /*pan scan rect*/
  2406. case 4: /*user registered ITU t35*/
  2407. case 7: /*def_rec_pic_marking_repetition*/
  2408. case 8: /*spare_pic*/
  2409. case 9: /*scene info*/
  2410. case 13: /*full frame freeze*/
  2411. case 14: /*full frame freeze release*/
  2412. case 15: /*full frame snapshot*/
  2413. case 16: /*progressive refinement segment start*/
  2414. case 17: /*progressive refinement segment end*/
  2415. case 18: /*motion constrained slice group*/
  2416. break;
  2417. default: /*reserved*/
  2418. do_copy = 0;
  2419. break;
  2420. }
  2421. if (do_copy) {
  2422. var = ptype;
  2423. while (var>=255) {
  2424. new_buffer[written] = (char) 0xff;
  2425. written++;
  2426. var-=255;
  2427. }
  2428. new_buffer[written] = (char) var;
  2429. written++;
  2430. var = psize;
  2431. while (var>=255) {
  2432. new_buffer[written] = (char) 0xff;
  2433. written++; var-=255;
  2434. }
  2435. new_buffer[written] = (char) var;
  2436. written++;
  2437. memcpy(new_buffer+written, sei_without_emulation_bytes+start, sizeof(char) * psize);
  2438. written += psize;
  2439. }
  2440. gf_bs_skip_bytes(bs, (u64) psize);
  2441. gf_bs_align(bs);
  2442. if (gf_bs_available(bs)<=2) {
  2443. if (gf_bs_peek_bits(bs, 8, 0)==0x80) {
  2444. new_buffer[written] = (char) 0x80;
  2445. written += 1;
  2446. }
  2447. break;
  2448. }
  2449. }
  2450. gf_bs_del(bs);
  2451. gf_free(sei_without_emulation_bytes);
  2452. if (written) {
  2453. var = avc_emulation_bytes_add_count(new_buffer, written);
  2454. if (var) {
  2455. if (written+var<=nal_size) {
  2456. written = avc_add_emulation_bytes(new_buffer, buffer, written);
  2457. } else {
  2458. written = 0;
  2459. }
  2460. } else {
  2461. if (written<=nal_size) {
  2462. memcpy(buffer, new_buffer, sizeof(char)*written);
  2463. } else {
  2464. written = 0;
  2465. }
  2466. }
  2467. }
  2468. gf_free(new_buffer);
  2469. /*if only hdr written ignore*/
  2470. return (written>1) ? written : 0;
  2471. }
  2472. #ifndef GPAC_DISABLE_ISOM
  2473. static u8 avc_get_sar_idx(u32 w, u32 h)
  2474. {
  2475. u32 i;
  2476. for (i=0; i<14; i++) {
  2477. if ((avc_sar[i].w==w) && (avc_sar[i].h==h)) return i;
  2478. }
  2479. return 0xFF;
  2480. }
  2481. GF_Err gf_media_avc_change_par(GF_AVCConfig *avcc, s32 ar_n, s32 ar_d)
  2482. {
  2483. GF_BitStream *orig, *mod;
  2484. AVCState avc;
  2485. u32 i, bit_offset, flag;
  2486. s32 idx;
  2487. GF_AVCConfigSlot *slc;
  2488. orig = NULL;
  2489. memset(&avc, 0, sizeof(AVCState));
  2490. avc.sps_active_idx = -1;
  2491. i=0;
  2492. while ((slc = (GF_AVCConfigSlot *)gf_list_enum(avcc->sequenceParameterSets, &i))) {
  2493. char *no_emulation_buf = NULL;
  2494. u32 no_emulation_buf_size = 0, emulation_bytes = 0;
  2495. idx = gf_media_avc_read_sps(slc->data, slc->size, &avc, 0, &bit_offset);
  2496. if (idx<0) {
  2497. if ( orig )
  2498. gf_bs_del(orig);
  2499. continue;
  2500. }
  2501. /*SPS still contains emulation bytes*/
  2502. no_emulation_buf = gf_malloc((slc->size-1)*sizeof(char));
  2503. no_emulation_buf_size = avc_remove_emulation_bytes(slc->data+1, no_emulation_buf, slc->size-1);
  2504. orig = gf_bs_new(no_emulation_buf, no_emulation_buf_size, GF_BITSTREAM_READ);
  2505. gf_bs_read_data(orig, no_emulation_buf, no_emulation_buf_size);
  2506. gf_bs_seek(orig, 0);
  2507. mod = gf_bs_new(NULL, 0, GF_BITSTREAM_WRITE);
  2508. /*copy over till vui flag*/
  2509. assert(bit_offset>=8);
  2510. while (bit_offset-8/*bit_offset doesn't take care of the first byte (NALU type)*/) {
  2511. flag = gf_bs_read_int(orig, 1);
  2512. gf_bs_write_int(mod, flag, 1);
  2513. bit_offset--;
  2514. }
  2515. /*check VUI*/
  2516. flag = gf_bs_read_int(orig, 1);
  2517. gf_bs_write_int(mod, 1, 1); /*vui_parameters_present_flag*/
  2518. if (flag) {
  2519. /*aspect_ratio_info_present_flag*/
  2520. if (gf_bs_read_int(orig, 1)) {
  2521. s32 aspect_ratio_idc = gf_bs_read_int(orig, 8);
  2522. if (aspect_ratio_idc == 255) {
  2523. gf_bs_read_int(orig, 16); /*AR num*/
  2524. gf_bs_read_int(orig, 16); /*AR den*/
  2525. }
  2526. }
  2527. }
  2528. if ((ar_d<0) || (ar_n<0)) {
  2529. /*no AR signaled*/
  2530. gf_bs_write_int(mod, 0, 1);
  2531. } else {
  2532. u32 sarx;
  2533. gf_bs_write_int(mod, 1, 1);
  2534. sarx = avc_get_sar_idx((u32) ar_n, (u32) ar_d);
  2535. gf_bs_write_int(mod, sarx, 8);
  2536. if (sarx==0xFF) {
  2537. gf_bs_write_int(mod, ar_n, 16);
  2538. gf_bs_write_int(mod, ar_d, 16);
  2539. }
  2540. }
  2541. /*no VUI in input bitstream, set all vui flags to 0*/
  2542. if (!flag) {
  2543. gf_bs_write_int(mod, 0, 1); /*overscan_info_present_flag */
  2544. gf_bs_write_int(mod, 0, 1); /*video_signal_type_present_flag */
  2545. gf_bs_write_int(mod, 0, 1); /*chroma_location_info_present_flag */
  2546. gf_bs_write_int(mod, 0, 1); /*timing_info_present_flag*/
  2547. gf_bs_write_int(mod, 0, 1); /*nal_hrd_parameters_present*/
  2548. gf_bs_write_int(mod, 0, 1); /*vcl_hrd_parameters_present*/
  2549. gf_bs_write_int(mod, 0, 1); /*pic_struct_present*/
  2550. gf_bs_write_int(mod, 0, 1); /*bitstream_restriction*/
  2551. }
  2552. /*finally copy over remaining*/
  2553. while (gf_bs_bits_available(orig)) {
  2554. flag = gf_bs_read_int(orig, 1);
  2555. gf_bs_write_int(mod, flag, 1);
  2556. }
  2557. gf_bs_del(orig);
  2558. orig = NULL;
  2559. gf_free(no_emulation_buf);
  2560. /*set anti-emulation*/
  2561. gf_bs_get_content(mod, (char **) &no_emulation_buf, &flag);
  2562. emulation_bytes = avc_emulation_bytes_add_count(no_emulation_buf, flag);
  2563. if (flag+emulation_bytes+1>slc->size)
  2564. slc->data = (char*)gf_realloc(slc->data, flag+emulation_bytes+1);
  2565. slc->size = avc_add_emulation_bytes(no_emulation_buf, slc->data+1, flag)+1;
  2566. gf_bs_del(mod);
  2567. gf_free(no_emulation_buf);
  2568. }
  2569. return GF_OK;
  2570. }
  2571. GF_Err gf_media_avc_change_colorprop(GF_AVCConfig *avcc, s32 fullrange, s32 vidformat, s32 colorprim, s32 transfer, s32 colmatrix)
  2572. {
  2573. GF_BitStream *orig, *mod;
  2574. AVCState avc;
  2575. u32 i, bit_offset, flag;
  2576. s32 idx;
  2577. GF_AVCConfigSlot *slc;
  2578. orig = NULL;
  2579. memset(&avc, 0, sizeof(AVCState));
  2580. avc.sps_active_idx = -1;
  2581. i=0;
  2582. while ((slc = (GF_AVCConfigSlot *)gf_list_enum(avcc->sequenceParameterSets, &i))) {
  2583. char *no_emulation_buf = NULL;
  2584. u32 no_emulation_buf_size = 0, emulation_bytes = 0;
  2585. idx = gf_media_avc_read_sps(slc->data, slc->size, &avc, 0, &bit_offset);
  2586. if (idx<0) {
  2587. if ( orig )
  2588. gf_bs_del(orig);
  2589. continue;
  2590. }
  2591. /*SPS still contains emulation bytes*/
  2592. no_emulation_buf = gf_malloc((slc->size-1)*sizeof(char));
  2593. no_emulation_buf_size = avc_remove_emulation_bytes(slc->data+1, no_emulation_buf, slc->size-1);
  2594. orig = gf_bs_new(no_emulation_buf, no_emulation_buf_size, GF_BITSTREAM_READ);
  2595. gf_bs_read_data(orig, no_emulation_buf, no_emulation_buf_size);
  2596. gf_bs_seek(orig, 0);
  2597. mod = gf_bs_new(NULL, 0, GF_BITSTREAM_WRITE);
  2598. /*copy over till vui flag*/
  2599. assert(bit_offset>=8);
  2600. while (bit_offset-8/*bit_offset doesn't take care of the first byte (NALU type)*/) {
  2601. flag = gf_bs_read_int(orig, 1);
  2602. gf_bs_write_int(mod, flag, 1);
  2603. bit_offset--;
  2604. }
  2605. /*check VUI*/
  2606. flag = gf_bs_read_int(orig, 1);
  2607. gf_bs_write_int(mod, 1, 1); /*vui_parameters_present_flag*/
  2608. if (flag) { /* VUI found in input bitstream */
  2609. u32 flag2 = gf_bs_read_int(orig, 1); /*aspect_ratio_info_present_flag*/
  2610. gf_bs_write_int(mod, flag2, 1); /*just copy*/
  2611. if (flag2) {
  2612. s32 aspect_ratio_idc = gf_bs_read_int(orig, 8); /*aspect_ratio_idc*/
  2613. gf_bs_write_int(mod, aspect_ratio_idc, 8); /*just copy*/
  2614. if (aspect_ratio_idc == 255) {
  2615. u32 ar_n, ar_d;
  2616. ar_n = gf_bs_read_int(orig, 16); /*sar_width*/
  2617. gf_bs_write_int(mod, ar_n, 16); /*just copy*/
  2618. ar_d = gf_bs_read_int(orig, 16); /*sar_height*/
  2619. gf_bs_write_int(mod, ar_d, 16); /*just copy*/
  2620. }
  2621. }
  2622. /*overscan_info_present_flag */
  2623. flag2 = gf_bs_read_int(orig, 1);
  2624. gf_bs_write_int(mod, flag2, 1);
  2625. if(flag2) {
  2626. u32 flag3 = gf_bs_read_int(orig, 1);
  2627. gf_bs_write_int(mod, flag3, 1);
  2628. }
  2629. } else { /* no VUI in input bitstream, create one */
  2630. gf_bs_write_int(mod, 0, 1); /*aspect_ratio_present_flag*/
  2631. gf_bs_write_int(mod, 0, 1); /*overscan_info_present_flag*/
  2632. }
  2633. /*video signal type related flags */
  2634. {
  2635. u32 video_signal_type_present_flag = 0;
  2636. u32 video_format = 5;
  2637. u32 video_full_range_flag = 0;
  2638. u32 colour_description_present_flag = 0;
  2639. u32 colour_primaries = 2;
  2640. u32 transfer_characteristics = 2;
  2641. u32 matrix_coefficients = 2;
  2642. /* read all video signal related flags first */
  2643. video_signal_type_present_flag = gf_bs_read_int(orig, 1);
  2644. if(video_signal_type_present_flag) {
  2645. video_format = gf_bs_read_int(orig, 3);
  2646. video_full_range_flag = gf_bs_read_int(orig, 1);
  2647. colour_description_present_flag = gf_bs_read_int(orig, 1);
  2648. if(colour_description_present_flag) {
  2649. colour_primaries = gf_bs_read_int(orig, 8);
  2650. transfer_characteristics = gf_bs_read_int(orig, 8);
  2651. matrix_coefficients = gf_bs_read_int(orig, 8);
  2652. }
  2653. }
  2654. /* correct the values of each flags, depending on those from input stream */
  2655. /* and those specified in command line */
  2656. if(fullrange==0 && vidformat==5 && colorprim==2 && transfer==2 && colmatrix==2) {
  2657. video_signal_type_present_flag = 0; /* no signal */
  2658. } else {
  2659. video_signal_type_present_flag = 1;
  2660. video_format = (vidformat < 0 ? video_format : vidformat);
  2661. video_full_range_flag = (fullrange < 0 ? video_full_range_flag : fullrange);
  2662. if(colorprim==2 && transfer==2 && colmatrix==2) {
  2663. colour_description_present_flag = 0;
  2664. } else {
  2665. colour_description_present_flag = 1;
  2666. colour_primaries = (colorprim < 0 ? colour_primaries : colorprim);
  2667. transfer_characteristics = (transfer < 0 ? transfer_characteristics : transfer );
  2668. matrix_coefficients = (colmatrix < 0 ? matrix_coefficients : colmatrix);
  2669. }
  2670. if(colour_primaries==2 && transfer_characteristics==2 && matrix_coefficients==2) {
  2671. colour_description_present_flag = 0;
  2672. if(video_format==5 && video_full_range_flag==0)
  2673. video_signal_type_present_flag = 0;
  2674. }
  2675. }
  2676. /* write to output bitstream */
  2677. gf_bs_write_int(mod, video_signal_type_present_flag, 1);
  2678. if(video_signal_type_present_flag) {
  2679. gf_bs_write_int(mod, video_format, 3);
  2680. gf_bs_write_int(mod, video_full_range_flag, 1);
  2681. gf_bs_write_int(mod, colour_description_present_flag, 1);
  2682. if(colour_description_present_flag) {
  2683. gf_bs_write_int(mod, colour_primaries, 8);
  2684. gf_bs_write_int(mod, transfer_characteristics, 8);
  2685. gf_bs_write_int(mod, matrix_coefficients, 8);
  2686. }
  2687. }
  2688. }
  2689. if (!flag) {
  2690. gf_bs_write_int(mod, 0, 1); /*overscan_info_present_flag */
  2691. gf_bs_write_int(mod, 0, 1); /*video_signal_type_present_flag */
  2692. gf_bs_write_int(mod, 0, 1); /*chroma_location_info_present_flag */
  2693. gf_bs_write_int(mod, 0, 1); /*timing_info_present_flag*/
  2694. gf_bs_write_int(mod, 0, 1); /*nal_hrd_parameters_present*/
  2695. gf_bs_write_int(mod, 0, 1); /*vcl_hrd_parameters_present*/
  2696. gf_bs_write_int(mod, 0, 1); /*pic_struct_present*/
  2697. gf_bs_write_int(mod, 0, 1); /*bitstream_restriction*/
  2698. }
  2699. /*finally copy over remaining*/
  2700. while (gf_bs_bits_available(orig)) {
  2701. flag = gf_bs_read_int(orig, 1);
  2702. gf_bs_write_int(mod, flag, 1);
  2703. }
  2704. gf_bs_del(orig);
  2705. orig = NULL;
  2706. gf_free(no_emulation_buf);
  2707. /*set anti-emulation*/
  2708. gf_bs_get_content(mod, (char **) &no_emulation_buf, &flag);
  2709. emulation_bytes = avc_emulation_bytes_add_count(no_emulation_buf, flag);
  2710. if (flag+emulation_bytes+1>slc->size)
  2711. slc->data = (char*)gf_realloc(slc->data, flag+emulation_bytes+1);
  2712. slc->size = avc_add_emulation_bytes(no_emulation_buf, slc->data+1, flag)+1;
  2713. gf_bs_del(mod);
  2714. gf_free(no_emulation_buf);
  2715. }
  2716. return GF_OK;
  2717. }
  2718. #endif
  2719. GF_EXPORT
  2720. GF_Err gf_avc_get_sps_info(char *sps_data, u32 sps_size, u32 *sps_id, u32 *width, u32 *height, s32 *par_n, s32 *par_d)
  2721. {
  2722. AVCState avc;
  2723. s32 idx;
  2724. memset(&avc, 0, sizeof(AVCState));
  2725. avc.sps_active_idx = -1;
  2726. idx = gf_media_avc_read_sps(sps_data, sps_size, &avc, 0, NULL);
  2727. if (idx<0) {
  2728. return GF_NON_COMPLIANT_BITSTREAM;
  2729. }
  2730. if (sps_id) *sps_id = idx;
  2731. if (width) *width = avc.sps[idx].width;
  2732. if (height) *height = avc.sps[idx].height;
  2733. if (par_n) *par_n = avc.sps[idx].vui.par_num ? avc.sps[idx].vui.par_num : (u32) -1;
  2734. if (par_d) *par_d = avc.sps[idx].vui.par_den ? avc.sps[idx].vui.par_den : (u32) -1;
  2735. return GF_OK;
  2736. }
  2737. GF_EXPORT
  2738. GF_Err gf_avc_get_pps_info(char *pps_data, u32 pps_size, u32 *pps_id, u32 *sps_id)
  2739. {
  2740. GF_BitStream *bs;
  2741. char *pps_data_without_emulation_bytes = NULL;
  2742. u32 pps_data_without_emulation_bytes_size = 0;
  2743. GF_Err e = GF_OK;
  2744. /*PPS still contains emulation bytes*/
  2745. pps_data_without_emulation_bytes = gf_malloc(pps_size*sizeof(char));
  2746. pps_data_without_emulation_bytes_size = avc_remove_emulation_bytes(pps_data, pps_data_without_emulation_bytes, pps_size);
  2747. bs = gf_bs_new(pps_data_without_emulation_bytes, pps_data_without_emulation_bytes_size, GF_BITSTREAM_READ);
  2748. if (!bs) {
  2749. e = GF_NON_COMPLIANT_BITSTREAM;
  2750. goto exit;
  2751. }
  2752. /*nal hdr*/ gf_bs_read_int(bs, 8);
  2753. *pps_id = bs_get_ue(bs);
  2754. *sps_id = bs_get_ue(bs);
  2755. exit:
  2756. gf_bs_del(bs);
  2757. gf_free(pps_data_without_emulation_bytes);
  2758. return e;
  2759. }
  2760. #ifndef GPAC_DISABLE_HEVC
  2761. /**********
  2762. HEVC parsing
  2763. **********/
  2764. Bool gf_media_hevc_slice_is_intra(HEVCState *hevc)
  2765. {
  2766. switch (hevc->s_info.nal_unit_type) {
  2767. case GF_HEVC_NALU_SLICE_BLA_W_LP:
  2768. case GF_HEVC_NALU_SLICE_BLA_W_DLP:
  2769. case GF_HEVC_NALU_SLICE_BLA_N_LP:
  2770. case GF_HEVC_NALU_SLICE_IDR_W_DLP:
  2771. case GF_HEVC_NALU_SLICE_IDR_N_LP:
  2772. case GF_HEVC_NALU_SLICE_CRA:
  2773. return 1;
  2774. default:
  2775. return 0;
  2776. }
  2777. }
  2778. Bool gf_media_hevc_slice_is_IDR(HEVCState *hevc)
  2779. {
  2780. if (hevc->sei.recovery_point.valid)
  2781. {
  2782. hevc->sei.recovery_point.valid = 0;
  2783. return 1;
  2784. }
  2785. switch (hevc->s_info.nal_unit_type) {
  2786. case GF_HEVC_NALU_SLICE_IDR_W_DLP:
  2787. case GF_HEVC_NALU_SLICE_IDR_N_LP:
  2788. return 1;
  2789. default:
  2790. return 0;
  2791. }
  2792. }
  2793. static Bool parse_short_term_ref_pic_set(GF_BitStream *bs, HEVC_SPS *sps, u32 idx_rps)
  2794. {
  2795. u32 i;
  2796. Bool inter_ref_pic_set_prediction_flag = 0;
  2797. if (idx_rps != 0)
  2798. inter_ref_pic_set_prediction_flag = gf_bs_read_int(bs, 1);
  2799. if (inter_ref_pic_set_prediction_flag ) {
  2800. HEVC_ReferencePictureSets *ref_ps, *rps;
  2801. u32 delta_idx_minus1 = 0;
  2802. u32 ref_idx;
  2803. u32 delta_rps_sign;
  2804. u32 abs_delta_rps_minus1, nb_ref_pics;
  2805. s32 deltaRPS;
  2806. u32 k = 0, k0 = 0, k1 = 0;
  2807. if (idx_rps == sps->num_short_term_ref_pic_sets)
  2808. delta_idx_minus1 = bs_get_ue(bs);
  2809. assert(delta_idx_minus1 <= idx_rps - 1);
  2810. ref_idx = idx_rps - 1 - delta_idx_minus1;
  2811. delta_rps_sign = gf_bs_read_int(bs, 1);
  2812. abs_delta_rps_minus1 = bs_get_ue(bs);
  2813. deltaRPS = (1 - (delta_rps_sign<<1)) * (abs_delta_rps_minus1 + 1);
  2814. rps = &sps->rps[idx_rps];
  2815. ref_ps = &sps->rps[ref_idx];
  2816. nb_ref_pics = ref_ps->num_negative_pics + ref_ps->num_positive_pics;
  2817. for (i=0; i<=nb_ref_pics; i++) {
  2818. s32 ref_idc;
  2819. s32 used_by_curr_pic_flag = gf_bs_read_int(bs, 1);
  2820. ref_idc = used_by_curr_pic_flag ? 1 : 0;
  2821. if ( !used_by_curr_pic_flag ) {
  2822. used_by_curr_pic_flag = gf_bs_read_int(bs, 1);
  2823. ref_idc = used_by_curr_pic_flag << 1;
  2824. }
  2825. if ((ref_idc==1) || (ref_idc== 2)) {
  2826. s32 deltaPOC = deltaRPS;
  2827. if (i < nb_ref_pics)
  2828. deltaPOC += ref_ps->delta_poc[i];
  2829. rps->delta_poc[k] = deltaPOC;
  2830. if (deltaPOC < 0) k0++;
  2831. else k1++;
  2832. k++;
  2833. }
  2834. }
  2835. rps->num_negative_pics = k0;
  2836. rps->num_positive_pics = k1;
  2837. } else {
  2838. s32 prev = 0, poc = 0;
  2839. sps->rps[idx_rps].num_negative_pics = bs_get_ue(bs);
  2840. sps->rps[idx_rps].num_positive_pics = bs_get_ue(bs);
  2841. for (i=0; i<sps->rps[idx_rps].num_negative_pics; i++) {
  2842. u32 delta_poc_s0_minus1 = bs_get_ue(bs);
  2843. poc = prev - delta_poc_s0_minus1 - 1;
  2844. prev = poc;
  2845. sps->rps[idx_rps].delta_poc[i] = poc;
  2846. /*used_by_curr_pic_s1_flag[ i ] = */gf_bs_read_int(bs, 1);
  2847. }
  2848. for (i=0; i<sps->rps[idx_rps].num_positive_pics; i++) {
  2849. u32 delta_poc_s1_minus1 = bs_get_ue(bs);
  2850. poc = prev + delta_poc_s1_minus1 + 1;
  2851. prev = poc;
  2852. sps->rps[idx_rps].delta_poc[i] = poc;
  2853. /*used_by_curr_pic_s1_flag[ i ] = */gf_bs_read_int(bs, 1);
  2854. }
  2855. }
  2856. return 1;
  2857. }
  2858. #define PARSE_FULL_HEADER 0
  2859. static s32 hevc_parse_slice_segment(GF_BitStream *bs, HEVCState *hevc, HEVCSliceInfo *si)
  2860. {
  2861. #if PARSE_FULL_HEADER
  2862. u32 i, j;
  2863. #endif
  2864. HEVC_PPS *pps;
  2865. HEVC_SPS *sps;
  2866. s32 pps_id;
  2867. Bool RapPicFlag = 0;
  2868. Bool IDRPicFlag = 0;
  2869. si->first_slice_segment_in_pic_flag = gf_bs_read_int(bs, 1);
  2870. switch (si->nal_unit_type) {
  2871. case GF_HEVC_NALU_SLICE_IDR_W_DLP:
  2872. case GF_HEVC_NALU_SLICE_IDR_N_LP:
  2873. IDRPicFlag = 1;
  2874. RapPicFlag = 1;
  2875. break;
  2876. case GF_HEVC_NALU_SLICE_BLA_W_LP:
  2877. case GF_HEVC_NALU_SLICE_BLA_W_DLP:
  2878. case GF_HEVC_NALU_SLICE_BLA_N_LP:
  2879. case GF_HEVC_NALU_SLICE_CRA:
  2880. RapPicFlag = 1;
  2881. break;
  2882. }
  2883. if (RapPicFlag) {
  2884. /*Bool no_output_of_prior_pics_flag = */gf_bs_read_int(bs, 1);
  2885. }
  2886. pps_id = bs_get_ue(bs);
  2887. if (pps_id>=64) return -1;
  2888. pps = &hevc->pps[pps_id];
  2889. sps = &hevc->sps[pps->sps_id];
  2890. si->sps = sps;
  2891. si->pps = pps;
  2892. if (!si->first_slice_segment_in_pic_flag && pps->dependent_slice_segments_enabled_flag) {
  2893. si->dependent_slice_segment_flag = gf_bs_read_int(bs, 1);
  2894. } else {
  2895. si->dependent_slice_segment_flag = 0;
  2896. }
  2897. if (!si->first_slice_segment_in_pic_flag) {
  2898. si->slice_segment_address = gf_bs_read_int(bs, sps->bitsSliceSegmentAddress);
  2899. } else {
  2900. si->slice_segment_address = 0;
  2901. }
  2902. if( !si->dependent_slice_segment_flag ) {
  2903. #if PARSE_FULL_HEADER
  2904. Bool deblocking_filter_override_flag=0;
  2905. Bool slice_temporal_mvp_enabled_flag = 0;
  2906. Bool slice_sao_luma_flag=0;
  2907. Bool slice_sao_chroma_flag=0;
  2908. Bool slice_deblocking_filter_disabled_flag=0;
  2909. #endif
  2910. //"slice_reserved_undetermined_flag[]"
  2911. gf_bs_read_int(bs, pps->num_extra_slice_header_bits);
  2912. si->slice_type = bs_get_ue(bs);
  2913. if(pps->output_flag_present_flag)
  2914. /*pic_output_flag = */gf_bs_read_int(bs, 1);
  2915. if (sps->separate_colour_plane_flag == 1)
  2916. /*colour_plane_id = */gf_bs_read_int(bs, 2);
  2917. if (IDRPicFlag) {
  2918. si->poc_lsb = 0;
  2919. } else {
  2920. si->poc_lsb = gf_bs_read_int(bs, sps->log2_max_pic_order_cnt_lsb);
  2921. #if !PARSE_FULL_HEADER
  2922. }
  2923. }
  2924. #else
  2925. if (/*short_term_ref_pic_set_sps_flag =*/gf_bs_read_int(bs, 1) == 0) {
  2926. Bool ret = parse_short_term_ref_pic_set(bs, sps, sps->num_short_term_ref_pic_sets );
  2927. if (!ret) return 0;
  2928. } else if( sps->num_short_term_ref_pic_sets > 1 ) {
  2929. u32 numbits = 0;
  2930. s32 short_term_ref_pic_set_idx;
  2931. while ( (u32) (1 << numbits) < sps->num_short_term_ref_pic_sets)
  2932. numbits++;
  2933. if (numbits > 0)
  2934. short_term_ref_pic_set_idx = gf_bs_read_int(bs, numbits);
  2935. else
  2936. short_term_ref_pic_set_idx = 0;
  2937. }
  2938. if (sps->long_term_ref_pics_present_flag ) {
  2939. u8 DeltaPocMsbCycleLt[32];
  2940. u32 num_long_term_sps = 0;
  2941. u32 num_long_term_pics = 0;
  2942. if (sps->num_long_term_ref_pic_sps > 0 ) {
  2943. num_long_term_sps = bs_get_ue(bs);
  2944. }
  2945. num_long_term_pics = bs_get_ue(bs);
  2946. for (i = 0; i < num_long_term_sps + num_long_term_pics; i++ ) {
  2947. if( i < num_long_term_sps ) {
  2948. u8 lt_idx_sps = 0;
  2949. if (sps->num_long_term_ref_pic_sps > 1)
  2950. lt_idx_sps = gf_bs_read_int(bs, gf_get_bit_size(sps->num_long_term_ref_pic_sps) );
  2951. } else {
  2952. /*PocLsbLt[ i ] = */ gf_bs_read_int(bs, sps->log2_max_pic_order_cnt_lsb);
  2953. /*UsedByCurrPicLt[ i ] = */ gf_bs_read_int(bs, 1);
  2954. }
  2955. if (/*delta_poc_msb_present_flag[ i ] = */ gf_bs_read_int(bs, 1) ) {
  2956. if( i == 0 || i == num_long_term_sps )
  2957. DeltaPocMsbCycleLt[i] = bs_get_ue(bs);
  2958. else
  2959. DeltaPocMsbCycleLt[i] = bs_get_ue(bs) + DeltaPocMsbCycleLt[i-1];
  2960. }
  2961. }
  2962. }
  2963. if (sps->temporal_mvp_enable_flag)
  2964. slice_temporal_mvp_enabled_flag = gf_bs_read_int(bs, 1);
  2965. }
  2966. if (sps->sample_adaptive_offset_enabled_flag) {
  2967. slice_sao_luma_flag = gf_bs_read_int(bs, 1);
  2968. slice_sao_chroma_flag = gf_bs_read_int(bs, 1);
  2969. }
  2970. if (si->slice_type == GF_HEVC_TYPE_P || si->slice_type == GF_HEVC_TYPE_B) {
  2971. //u32 NumPocTotalCurr;
  2972. u32 num_ref_idx_l0_active, num_ref_idx_l1_active;
  2973. num_ref_idx_l0_active = pps->num_ref_idx_l0_default_active;
  2974. num_ref_idx_l1_active = 0;
  2975. if (si->slice_type == GF_HEVC_TYPE_B)
  2976. num_ref_idx_l1_active = pps->num_ref_idx_l1_default_active;
  2977. if ( /*num_ref_idx_active_override_flag =*/gf_bs_read_int(bs, 1) ) {
  2978. num_ref_idx_l0_active = 1 + bs_get_ue(bs);
  2979. if (si->slice_type == GF_HEVC_TYPE_B)
  2980. num_ref_idx_l1_active = 1 + bs_get_ue(bs);
  2981. }
  2982. // if (pps->lists_modification_present_flag && NumPocTotalCurr > 1) {
  2983. if (pps->lists_modification_present_flag ) {
  2984. GF_LOG(GF_LOG_INFO, GF_LOG_CODING, ("[hehv] ref_pic_lists_modification( ) not implemented\n"));
  2985. return 0;
  2986. }
  2987. if (si->slice_type == GF_HEVC_TYPE_B)
  2988. /*mvd_l1_zero_flag=*/gf_bs_read_int(bs, 1);
  2989. if (pps->cabac_init_present_flag)
  2990. /*cabac_init_flag=*/gf_bs_read_int(bs, 1);
  2991. if (slice_temporal_mvp_enabled_flag) {
  2992. Bool collocated_from_l0_flag = 0;
  2993. if (si->slice_type == GF_HEVC_TYPE_B)
  2994. collocated_from_l0_flag = gf_bs_read_int(bs, 1);
  2995. if ( (collocated_from_l0_flag && num_ref_idx_l0_active-1 > 0 )
  2996. || ( !collocated_from_l0_flag && num_ref_idx_l1_active-1 > 0 )
  2997. ) {
  2998. /*collocated_ref_idx=*/bs_get_ue(bs);
  2999. }
  3000. }
  3001. if ( (pps->weighted_pred_flag && si->slice_type == GF_HEVC_TYPE_P )
  3002. || ( pps->weighted_bipred_flag && si->slice_type == GF_HEVC_TYPE_B)
  3003. ) {
  3004. GF_LOG(GF_LOG_INFO, GF_LOG_CODING, ("[hehv] pred_weight_table not implemented\n"));
  3005. return 0;
  3006. }
  3007. /*five_minus_max_num_merge_cand=*/bs_get_ue(bs);
  3008. }
  3009. /*slice_qp_delta = */bs_get_se(bs);
  3010. if( pps->slice_chroma_qp_offsets_present_flag ) {
  3011. /*slice_cb_qp_offset=*/bs_get_se(bs);
  3012. /*slice_cr_qp_offset=*/bs_get_se(bs);
  3013. }
  3014. if ( pps->deblocking_filter_override_enabled_flag ) {
  3015. deblocking_filter_override_flag = gf_bs_read_int(bs, 1);
  3016. }
  3017. if (deblocking_filter_override_flag) {
  3018. slice_deblocking_filter_disabled_flag = gf_bs_read_int(bs, 1);
  3019. if ( !slice_deblocking_filter_disabled_flag) {
  3020. /*slice_beta_offset_div2=*/ bs_get_se(bs);
  3021. /*slice_tc_offset_div2=*/bs_get_se(bs);
  3022. }
  3023. }
  3024. if( pps->loop_filter_across_slices_enabled_flag
  3025. && ( slice_sao_luma_flag || slice_sao_chroma_flag || !slice_deblocking_filter_disabled_flag )
  3026. ) {
  3027. /*slice_loop_filter_across_slices_enabled_flag = */gf_bs_read_int(bs, 1);
  3028. }
  3029. }
  3030. if (pps->tiles_enabled_flag || pps->entropy_coding_sync_enabled_flag ) {
  3031. u32 num_entry_point_offsets = bs_get_ue(bs);
  3032. if ( num_entry_point_offsets > 0) {
  3033. u32 offset = bs_get_ue(bs) + 1;
  3034. u32 segments = offset >> 4;
  3035. s32 remain = (offset & 15);
  3036. for (i=0; i<num_entry_point_offsets; i++) {
  3037. u32 res = 0;
  3038. for (j=0; j<segments; j++) {
  3039. res <<= 16;
  3040. res += gf_bs_read_int(bs, 16);
  3041. }
  3042. if (remain) {
  3043. res <<= remain;
  3044. res += gf_bs_read_int(bs, remain);
  3045. }
  3046. // entry_point_offset = val + 1; // +1; // +1 to get the size
  3047. }
  3048. }
  3049. }
  3050. #endif //PARSE_FULL_HEADER
  3051. return 0;
  3052. }
  3053. static void hevc_compute_poc(HEVCSliceInfo *si)
  3054. {
  3055. u32 max_poc_lsb = 1 << (si->sps->log2_max_pic_order_cnt_lsb);
  3056. /*POC reset for IDR frames, NOT for CRA*/
  3057. switch (si->nal_unit_type) {
  3058. case GF_HEVC_NALU_SLICE_IDR_W_DLP:
  3059. case GF_HEVC_NALU_SLICE_IDR_N_LP:
  3060. si->poc_lsb_prev = 0;
  3061. si->poc_msb_prev = 0;
  3062. break;
  3063. }
  3064. if ((si->poc_lsb < si->poc_lsb_prev) && ( si->poc_lsb_prev - si->poc_lsb >= max_poc_lsb / 2) )
  3065. si->poc_msb = si->poc_msb_prev + max_poc_lsb;
  3066. else if ((si->poc_lsb > si->poc_lsb_prev) && (si->poc_lsb - si->poc_lsb_prev > max_poc_lsb / 2))
  3067. si->poc_msb = si->poc_msb_prev - max_poc_lsb;
  3068. else
  3069. si->poc_msb = si->poc_msb_prev;
  3070. switch (si->nal_unit_type) {
  3071. case GF_HEVC_NALU_SLICE_BLA_W_LP:
  3072. case GF_HEVC_NALU_SLICE_BLA_W_DLP:
  3073. case GF_HEVC_NALU_SLICE_BLA_N_LP:
  3074. si->poc_msb = 0;
  3075. break;
  3076. }
  3077. si->poc = si->poc_msb + si->poc_lsb;
  3078. }
  3079. void profile_tier_level(GF_BitStream *bs, Bool ProfilePresentFlag, u8 MaxNumSubLayersMinus1, HEVC_ProfileTierLevel *ptl)
  3080. {
  3081. u32 i;
  3082. if (ProfilePresentFlag) {
  3083. ptl->profile_space = gf_bs_read_int(bs, 2);
  3084. ptl->tier_flag = gf_bs_read_int(bs, 1);
  3085. ptl->profile_idc = gf_bs_read_int(bs, 5);
  3086. ptl->profile_compatibility_flag = gf_bs_read_int(bs, 32);
  3087. ptl->general_progressive_source_flag = gf_bs_read_int(bs, 1);
  3088. ptl->general_interlaced_source_flag = gf_bs_read_int(bs, 1);
  3089. ptl->general_non_packed_constraint_flag = gf_bs_read_int(bs, 1);
  3090. ptl->general_frame_only_constraint_flag = gf_bs_read_int(bs, 1);
  3091. ptl->general_reserved_44bits = gf_bs_read_long_int(bs, 44);
  3092. }
  3093. ptl->level_idc = gf_bs_read_int(bs, 8);
  3094. for (i=0; i<MaxNumSubLayersMinus1; i++) {
  3095. ptl->sub_ptl[i].profile_present_flag = gf_bs_read_int(bs, 1);
  3096. ptl->sub_ptl[i].level_present_flag = gf_bs_read_int(bs, 1);
  3097. if (ProfilePresentFlag && ptl->sub_ptl[i].profile_present_flag) {
  3098. ptl->sub_ptl[i].profile_space = gf_bs_read_int(bs, 2);
  3099. ptl->sub_ptl[i].tier_flag = gf_bs_read_int(bs, 1);
  3100. ptl->sub_ptl[i].profile_idc = gf_bs_read_int(bs, 5);
  3101. ptl->sub_ptl[i].profile_compatibility_flag = gf_bs_read_int(bs, 32);
  3102. /*sub_layer_reserved_zero_16bits*/gf_bs_read_int(bs, 16);
  3103. }
  3104. if (ptl->sub_ptl[i].level_present_flag)
  3105. ptl->sub_ptl[i].level_idc = gf_bs_read_int(bs, 8);
  3106. }
  3107. }
  3108. void bit_rate_pic_rate_info(GF_BitStream *bs, u8 level_low, u8 level_high, HEVC_VPS *vps)
  3109. {
  3110. u8 i;
  3111. for (i=level_low; i<=level_high; i++) {
  3112. Bool bit_rate_info_present_flag = gf_bs_read_int(bs, 1);
  3113. Bool pic_rate_info_present_flag = gf_bs_read_int(bs, 1);
  3114. if (bit_rate_info_present_flag) {
  3115. vps->rates[i].avg_bit_rate = gf_bs_read_int(bs, 16);
  3116. vps->rates[i].max_bit_rate = gf_bs_read_int(bs, 16);
  3117. }
  3118. if (pic_rate_info_present_flag) {
  3119. vps->rates[i].constand_pic_rate_idc = gf_bs_read_int(bs, 2);
  3120. vps->rates[i].avg_pic_rate = gf_bs_read_int(bs, 16);
  3121. }
  3122. }
  3123. }
  3124. s32 gf_media_hevc_read_vps(char *data, u32 size, HEVCState *hevc)
  3125. {
  3126. GF_BitStream *bs;
  3127. char *data_without_emulation_bytes = NULL;
  3128. u32 data_without_emulation_bytes_size = 0;
  3129. s32 vps_id = -1;
  3130. HEVC_VPS *vps;
  3131. /*still contains emulation bytes*/
  3132. data_without_emulation_bytes = gf_malloc(size*sizeof(char));
  3133. data_without_emulation_bytes_size = avc_remove_emulation_bytes(data, data_without_emulation_bytes, size);
  3134. bs = gf_bs_new(data_without_emulation_bytes, data_without_emulation_bytes_size, GF_BITSTREAM_READ);
  3135. if (!bs) goto exit;
  3136. gf_bs_read_u16(bs);
  3137. vps_id = gf_bs_read_int(bs, 4);
  3138. if (vps_id>=16) goto exit;
  3139. vps = &hevc->vps[vps_id];
  3140. if (!vps->state) {
  3141. vps->id = vps_id;
  3142. vps->state = 1;
  3143. }
  3144. /* vps_reserved_three_2bits = */ gf_bs_read_int(bs, 2);
  3145. /* vps_reserved_zero_6bits = */ gf_bs_read_int(bs, 6);
  3146. vps->max_sub_layer = gf_bs_read_int(bs, 3) + 1;
  3147. vps->temporal_id_nesting = gf_bs_read_int(bs, 1);
  3148. /* vps_reserved_ffff_16bits = */ gf_bs_read_int(bs, 16);
  3149. profile_tier_level(bs, 1, vps->max_sub_layer-1, &vps->ptl);
  3150. bit_rate_pic_rate_info(bs, 0, vps->max_sub_layer-1, vps);
  3151. //and we don't care about the rest for now
  3152. exit:
  3153. gf_bs_del(bs);
  3154. gf_free(data_without_emulation_bytes);
  3155. return vps_id;
  3156. }
  3157. static const struct { u32 w, h; } hevc_sar[17] =
  3158. {
  3159. { 0, 0 }, { 1, 1 }, { 12, 11 }, { 10, 11 },
  3160. { 16, 11 }, { 40, 33 }, { 24, 11 }, { 20, 11 },
  3161. { 32, 11 }, { 80, 33 }, { 18, 11 }, { 15, 11 },
  3162. { 64, 33 }, { 160,99 }, { 4,3}, { 3,2}, { 2,1}
  3163. };
  3164. static s32 gf_media_hevc_read_sps_ex(char *data, u32 size, HEVCState *hevc, u32 *vui_flag_pos)
  3165. {
  3166. GF_BitStream *bs;
  3167. char *data_without_emulation_bytes = NULL;
  3168. u32 data_without_emulation_bytes_size = 0;
  3169. s32 vps_id, sps_id = -1;
  3170. u8 max_sub_layers_minus1, flag;
  3171. u8 layer_id/*, temporal_id*/;
  3172. Bool update_rep_format_flag;
  3173. u32 i, nb_CTUs, depth;
  3174. u32 log2_diff_max_min_luma_coding_block_size;
  3175. u32 log2_min_transform_block_size, log2_min_luma_coding_block_size;
  3176. Bool sps_sub_layer_ordering_info_present_flag;
  3177. HEVC_SPS *sps;
  3178. HEVC_ProfileTierLevel ptl;
  3179. if (vui_flag_pos) *vui_flag_pos = 0;
  3180. /*still contains emulation bytes*/
  3181. data_without_emulation_bytes = gf_malloc(size*sizeof(char));
  3182. data_without_emulation_bytes_size = avc_remove_emulation_bytes(data, data_without_emulation_bytes, size);
  3183. bs = gf_bs_new(data_without_emulation_bytes, data_without_emulation_bytes_size, GF_BITSTREAM_READ);
  3184. if (!bs) goto exit;
  3185. gf_bs_read_int(bs, 7);
  3186. layer_id = gf_bs_read_int(bs, 6);
  3187. /*temporal_id = */gf_bs_read_int(bs, 3);
  3188. vps_id = gf_bs_read_int(bs, 4);
  3189. if (vps_id>=16) goto exit;
  3190. memset(&ptl, 0, sizeof(ptl));
  3191. //fixme with latest shvc syntax !!
  3192. // if (layer_id == 0)
  3193. {
  3194. max_sub_layers_minus1 = gf_bs_read_int(bs, 3);
  3195. /*temporal_id_nesting_flag = */gf_bs_read_int(bs, 1);
  3196. profile_tier_level(bs, 1, max_sub_layers_minus1, &ptl);
  3197. }
  3198. sps_id = bs_get_ue(bs);
  3199. if (sps_id>=16) goto exit;
  3200. //fixme with latest shvc syntax !!
  3201. if (layer_id) sps_id=1;
  3202. sps = &hevc->sps[sps_id];
  3203. if (!sps->state) {
  3204. sps->state = 1;
  3205. sps->id = sps_id;
  3206. sps->vps_id = vps_id;
  3207. }
  3208. sps->ptl = ptl;
  3209. if (layer_id > 0) {
  3210. // update_rep_format_flag = gf_bs_read_int(bs, 1);
  3211. update_rep_format_flag = 1;
  3212. } else {
  3213. update_rep_format_flag = 1;
  3214. }
  3215. if (update_rep_format_flag) {
  3216. sps->chroma_format_idc = bs_get_ue(bs);
  3217. if (sps->chroma_format_idc==3)
  3218. sps->separate_colour_plane_flag = gf_bs_read_int(bs, 1);
  3219. sps->width = bs_get_ue(bs);
  3220. sps->height = bs_get_ue(bs);
  3221. }
  3222. if (gf_bs_read_int(bs, 1)) {
  3223. sps->cw_left = bs_get_ue(bs);
  3224. sps->cw_right = bs_get_ue(bs);
  3225. sps->cw_top = bs_get_ue(bs);
  3226. sps->cw_bottom = bs_get_ue(bs);
  3227. }
  3228. if (update_rep_format_flag) {
  3229. sps->bit_depth_luma = 8 + bs_get_ue(bs);
  3230. sps->bit_depth_chroma = 8 + bs_get_ue(bs);
  3231. }
  3232. sps->log2_max_pic_order_cnt_lsb = 4 + bs_get_ue(bs);
  3233. sps_sub_layer_ordering_info_present_flag = gf_bs_read_int(bs, 1);
  3234. if (sps_sub_layer_ordering_info_present_flag ) {
  3235. for(i=0; i<=max_sub_layers_minus1; i++) {
  3236. /*max_dec_pic_buffering = */ bs_get_ue(bs);
  3237. /*num_reorder_pics = */ bs_get_ue(bs);
  3238. /*max_latency_increase = */ bs_get_ue(bs);
  3239. }
  3240. }
  3241. log2_min_luma_coding_block_size = 3 + bs_get_ue(bs);
  3242. log2_diff_max_min_luma_coding_block_size = bs_get_ue(bs);
  3243. sps->max_CU_width = ( 1<<(log2_min_luma_coding_block_size + log2_diff_max_min_luma_coding_block_size) );
  3244. sps->max_CU_height = ( 1<<(log2_min_luma_coding_block_size + log2_diff_max_min_luma_coding_block_size) );
  3245. log2_min_transform_block_size = 2 + bs_get_ue(bs);
  3246. /*log2_max_transform_block_size = log2_min_transform_block_size + */bs_get_ue(bs);
  3247. depth = 0;
  3248. /*u32 max_transform_hierarchy_depth_inter = */bs_get_ue(bs);
  3249. /*u32 max_transform_hierarchy_depth_intra = */bs_get_ue(bs);
  3250. while( (u32) ( sps->max_CU_width >> log2_diff_max_min_luma_coding_block_size ) > (u32) ( 1 << ( log2_min_transform_block_size + depth ) ) )
  3251. {
  3252. depth++;
  3253. }
  3254. sps->max_CU_depth = log2_diff_max_min_luma_coding_block_size + depth;
  3255. nb_CTUs = ((sps->width + sps->max_CU_width -1) / sps->max_CU_width) * ((sps->height + sps->max_CU_height-1) / sps->max_CU_height);
  3256. sps->bitsSliceSegmentAddress = 0;
  3257. while (nb_CTUs > (u32) (1 << sps->bitsSliceSegmentAddress)) {
  3258. sps->bitsSliceSegmentAddress++;
  3259. }
  3260. if (/*scaling_list_enable_flag = */ gf_bs_read_int(bs, 1)) {
  3261. if (/*sps_scaling_list_data_present_flag=*/gf_bs_read_int(bs, 1) ) {
  3262. //scaling_list_data( )
  3263. }
  3264. }
  3265. /*asymmetric_motion_partitions_enabled_flag= */ gf_bs_read_int(bs, 1);
  3266. sps->sample_adaptive_offset_enabled_flag = gf_bs_read_int(bs, 1);
  3267. if (/*pcm_enabled_flag= */ gf_bs_read_int(bs, 1) ) {
  3268. /*pcm_sample_bit_depth_luma_minus1=*/gf_bs_read_int(bs, 4);
  3269. /*pcm_sample_bit_depth_chroma_minus1=*/gf_bs_read_int(bs, 4);
  3270. /*log2_min_pcm_luma_coding_block_size_minus3= */ bs_get_ue(bs);
  3271. /*log2_diff_max_min_pcm_luma_coding_block_size = */ bs_get_ue(bs);
  3272. /*pcm_loop_filter_disable_flag=*/gf_bs_read_int(bs, 1);
  3273. }
  3274. sps->num_short_term_ref_pic_sets = bs_get_ue(bs);
  3275. for (i=0;i<sps->num_short_term_ref_pic_sets; i++) {
  3276. Bool ret = parse_short_term_ref_pic_set(bs, sps, i);
  3277. /*cannot parse short_term_ref_pic_set, skip VUI parsing*/
  3278. if (!ret) goto exit;
  3279. }
  3280. if ( (sps->long_term_ref_pics_present_flag = gf_bs_read_int(bs, 1)) ) {
  3281. sps->num_long_term_ref_pic_sps = bs_get_ue(bs);
  3282. for (i=0; i<sps->num_long_term_ref_pic_sps; i++) {
  3283. /*lt_ref_pic_poc_lsb_sps=*/gf_bs_read_int(bs, sps->log2_max_pic_order_cnt_lsb);
  3284. /*used_by_curr_pic_lt_sps_flag*/gf_bs_read_int(bs, 1);
  3285. }
  3286. }
  3287. sps->temporal_mvp_enable_flag = gf_bs_read_int(bs, 1);
  3288. /*strong_intra_smoothing_enable_flag*/gf_bs_read_int(bs, 1);
  3289. if (vui_flag_pos)
  3290. *vui_flag_pos = (u32) gf_bs_get_bit_offset(bs);
  3291. /*fixme - move to latest syntax*/
  3292. if (layer_id>0) goto exit;
  3293. if (/*vui_parameters_present_flag*/gf_bs_read_int(bs, 1)) {
  3294. sps->aspect_ratio_info_present_flag = gf_bs_read_int(bs, 1);
  3295. if (sps->aspect_ratio_info_present_flag) {
  3296. sps->sar_idc = gf_bs_read_int(bs, 8);
  3297. if (sps->sar_idc == 255) {
  3298. sps->sar_width = gf_bs_read_int(bs, 16);
  3299. sps->sar_height = gf_bs_read_int(bs, 16);
  3300. } else if (sps->sar_idc<17) {
  3301. sps->sar_width = hevc_sar[sps->sar_idc].w;
  3302. sps->sar_height = hevc_sar[sps->sar_idc].h;
  3303. }
  3304. }
  3305. if (/*overscan_info_present = */ gf_bs_read_int(bs, 1))
  3306. /*overscan_appropriate = */ gf_bs_read_int(bs, 1);
  3307. /*video_signal_type_present_flag = */flag = gf_bs_read_int(bs, 1);
  3308. if (flag) {
  3309. /*video_format = */gf_bs_read_int(bs, 1);
  3310. /*video_full_range_flag = */gf_bs_read_int(bs, 1);
  3311. if (/*colour_description_present_flag = */gf_bs_read_int(bs, 1)) {
  3312. /*colour_primaries = */ gf_bs_read_int(bs, 8);
  3313. /* transfer_characteristic = */ gf_bs_read_int(bs, 8);
  3314. /* matrix_coeffs = */ gf_bs_read_int(bs, 8);
  3315. }
  3316. }
  3317. if (/*chroma_loc_info_present_flag = */ gf_bs_read_int(bs, 1)) {
  3318. /*chroma_sample_loc_type_top_field = */ bs_get_ue(bs);
  3319. /*chroma_sample_loc_type_bottom_field = */bs_get_ue(bs);
  3320. }
  3321. /*neutra_chroma_indication_flag = */gf_bs_read_int(bs, 1);
  3322. /*field_seq_flag = */gf_bs_read_int(bs, 1);
  3323. /*frame_field_info_present_flag = */gf_bs_read_int(bs, 1);
  3324. if (/*default_display_window_flag=*/gf_bs_read_int(bs, 1)) {
  3325. /*left_offset = */bs_get_ue(bs);
  3326. /*right_offset = */bs_get_ue(bs);
  3327. /*top_offset = */bs_get_ue(bs);
  3328. /*bottom_offset = */bs_get_ue(bs);
  3329. }
  3330. sps->has_timing_info = gf_bs_read_int(bs, 1);
  3331. if (sps->has_timing_info ) {
  3332. sps->num_units_in_tick = gf_bs_read_int(bs, 32);
  3333. sps->time_scale = gf_bs_read_int(bs, 32);
  3334. sps->poc_proportional_to_timing_flag = gf_bs_read_int(bs, 1);
  3335. if (sps->poc_proportional_to_timing_flag)
  3336. sps->num_ticks_poc_diff_one_minus1 = bs_get_ue(bs);
  3337. if (/*hrd_parameters_present_flag=*/gf_bs_read_int(bs, 1) ) {
  3338. GF_LOG(GF_LOG_INFO, GF_LOG_CODING, ("[hehv] HRD param parsing not implemented\n"));
  3339. }
  3340. }
  3341. if (/*bitstream_restriction_flag=*/gf_bs_read_int(bs, 1)) {
  3342. /*tiles_fixed_structure_flag = */gf_bs_read_int(bs, 1);
  3343. /*motion_vectors_over_pic_boundaries_flag = */gf_bs_read_int(bs, 1);
  3344. /*restricted_ref_pic_lists_flag = */gf_bs_read_int(bs, 1);
  3345. /*min_spatial_segmentation_idc = */bs_get_ue(bs);
  3346. /*max_bytes_per_pic_denom = */bs_get_ue(bs);
  3347. /*max_bits_per_min_cu_denom = */bs_get_ue(bs);
  3348. /*log2_max_mv_length_horizontal = */bs_get_ue(bs);
  3349. /*log2_max_mv_length_vertical = */bs_get_ue(bs);
  3350. }
  3351. }
  3352. if (/*sps_extension_flag*/gf_bs_read_int(bs, 1)) {
  3353. while (gf_bs_available(bs)) {
  3354. /*sps_extension_data_flag */ gf_bs_read_int(bs, 1);
  3355. }
  3356. }
  3357. exit:
  3358. gf_bs_del(bs);
  3359. gf_free(data_without_emulation_bytes);
  3360. return sps_id;
  3361. }
  3362. GF_EXPORT
  3363. s32 gf_media_hevc_read_sps(char *data, u32 size, HEVCState *hevc)
  3364. {
  3365. return gf_media_hevc_read_sps_ex(data, size, hevc, NULL);
  3366. }
  3367. GF_EXPORT
  3368. s32 gf_media_hevc_read_pps(char *data, u32 size, HEVCState *hevc)
  3369. {
  3370. u32 i;
  3371. GF_BitStream *bs;
  3372. char *data_without_emulation_bytes = NULL;
  3373. u32 data_without_emulation_bytes_size = 0;
  3374. s32 pps_id = -1;
  3375. HEVC_PPS *pps;
  3376. /*still contains emulation bytes*/
  3377. data_without_emulation_bytes = gf_malloc(size*sizeof(char));
  3378. data_without_emulation_bytes_size = avc_remove_emulation_bytes(data, data_without_emulation_bytes, size);
  3379. bs = gf_bs_new(data_without_emulation_bytes, data_without_emulation_bytes_size, GF_BITSTREAM_READ);
  3380. if (!bs) goto exit;
  3381. gf_bs_read_u16(bs);
  3382. pps_id = bs_get_ue(bs);
  3383. if (pps_id>=64) goto exit;
  3384. pps = &hevc->pps[pps_id];
  3385. if (!pps->state) {
  3386. pps->id = pps_id;
  3387. pps->state = 1;
  3388. }
  3389. pps->sps_id = bs_get_ue(bs);
  3390. hevc->sps_active_idx = pps->sps_id; /*set active sps*/
  3391. pps->dependent_slice_segments_enabled_flag = gf_bs_read_int(bs, 1);
  3392. pps->output_flag_present_flag = gf_bs_read_int(bs, 1);
  3393. pps->num_extra_slice_header_bits = gf_bs_read_int(bs, 3);
  3394. /*sign_data_hiding_flag = */gf_bs_read_int(bs, 1);
  3395. pps->cabac_init_present_flag = gf_bs_read_int(bs, 1);
  3396. pps->num_ref_idx_l0_default_active = 1 + bs_get_ue(bs);
  3397. pps->num_ref_idx_l1_default_active = 1 + bs_get_ue(bs);
  3398. /*pic_init_qp_minus26 = */bs_get_se(bs);
  3399. /*constrained_intra_pred_flag = */gf_bs_read_int(bs, 1);
  3400. /*transform_skip_enabled_flag = */gf_bs_read_int(bs, 1);
  3401. if (/*cu_qp_delta_enabled_flag = */gf_bs_read_int(bs, 1) )
  3402. /*diff_cu_qp_delta_depth = */bs_get_ue(bs);
  3403. /*pic_cb_qp_offset = */bs_get_se(bs);
  3404. /*pic_cr_qp_offset = */bs_get_se(bs);
  3405. pps->slice_chroma_qp_offsets_present_flag = gf_bs_read_int(bs, 1);
  3406. pps->weighted_pred_flag = gf_bs_read_int(bs, 1);
  3407. pps->weighted_bipred_flag = gf_bs_read_int(bs, 1);
  3408. /*transquant_bypass_enable_flag = */gf_bs_read_int(bs, 1);
  3409. pps->tiles_enabled_flag = gf_bs_read_int(bs, 1);
  3410. pps->entropy_coding_sync_enabled_flag = gf_bs_read_int(bs, 1);
  3411. if (pps->tiles_enabled_flag) {
  3412. pps->num_tile_columns = 1 + bs_get_ue(bs);
  3413. pps->num_tile_rows = 1 + bs_get_ue(bs);
  3414. pps->uniform_spacing_flag = gf_bs_read_int(bs, 1);
  3415. if (!pps->uniform_spacing_flag ) {
  3416. for (i=0; i<pps->num_tile_columns; i++) {
  3417. pps->column_width[i] = 1 + bs_get_ue(bs);
  3418. }
  3419. for (i=0; i<pps->num_tile_rows; i++) {
  3420. pps->row_height[i] = bs_get_ue(bs);
  3421. }
  3422. }
  3423. pps->loop_filter_across_tiles_enabled_flag = gf_bs_read_int(bs, 1);
  3424. }
  3425. pps->loop_filter_across_slices_enabled_flag = gf_bs_read_int(bs, 1);
  3426. if( /*deblocking_filter_control_present_flag = */gf_bs_read_int(bs, 1) ) {
  3427. pps->deblocking_filter_override_enabled_flag = gf_bs_read_int(bs, 1);
  3428. if (! /*pic_disable_deblocking_filter_flag= */gf_bs_read_int(bs, 1) ) {
  3429. /*beta_offset_div2 = */bs_get_se(bs);
  3430. /*tc_offset_div2 = */bs_get_se(bs);
  3431. }
  3432. }
  3433. if (/*pic_scaling_list_data_present_flag = */gf_bs_read_int(bs, 1) ) {
  3434. //scaling_list_data( )
  3435. GF_LOG(GF_LOG_WARNING, GF_LOG_CODING, ("[HEVC] Parsing of scaling_list_data is not yet supported, stopping scaning of PPS (slice_segment_header_extension_present won't be checked ...\n"));
  3436. goto exit;
  3437. }
  3438. pps->lists_modification_present_flag = gf_bs_read_int(bs, 1);
  3439. /*log2_parallel_merge_level_minus2 = */bs_get_ue(bs);
  3440. pps->slice_segment_header_extension_present_flag = gf_bs_read_int(bs, 1);
  3441. if ( /*pps_extension_flag= */gf_bs_read_int(bs, 1) ) {
  3442. while (gf_bs_available(bs) ) {
  3443. /*pps_extension_data_flag */ gf_bs_read_int(bs, 1);
  3444. }
  3445. }
  3446. exit:
  3447. gf_bs_del(bs);
  3448. gf_free(data_without_emulation_bytes);
  3449. return pps_id;
  3450. }
  3451. s32 gf_media_hevc_parse_nalu(GF_BitStream *bs, HEVCState *hevc, u8 *nal_unit_type, u8 *temporal_id, u8 *layer_id)
  3452. {
  3453. u32 reserved;
  3454. s32 slice, ret;
  3455. HEVCSliceInfo n_state;
  3456. slice = 0;
  3457. memcpy(&n_state, &hevc->s_info, sizeof(HEVCSliceInfo));
  3458. reserved = gf_bs_read_int(bs, 1);
  3459. if (reserved) return -1;
  3460. *nal_unit_type = n_state.nal_unit_type = gf_bs_read_int(bs, 6);
  3461. *layer_id = gf_bs_read_int(bs, 6);
  3462. *temporal_id = n_state.temporal_id = gf_bs_read_int(bs, 3);
  3463. ret = 0;
  3464. switch (n_state.nal_unit_type) {
  3465. case GF_HEVC_NALU_ACCESS_UNIT:
  3466. case GF_HEVC_NALU_END_OF_SEQ:
  3467. case GF_HEVC_NALU_END_OF_STREAM:
  3468. ret = 1;
  3469. break;
  3470. /*slice_layer_rbsp*/
  3471. // case GF_HEVC_NALU_SLICE_STSA_N:
  3472. // case GF_HEVC_NALU_SLICE_STSA_R:
  3473. // case GF_HEVC_NALU_SLICE_RADL_N:
  3474. // case GF_HEVC_NALU_SLICE_RADL_R:
  3475. // case GF_HEVC_NALU_SLICE_RASL_N:
  3476. // case GF_HEVC_NALU_SLICE_RASL_R:
  3477. // break;
  3478. /*slice_segment_layer_rbsp*/
  3479. case GF_HEVC_NALU_SLICE_TRAIL_N:
  3480. case GF_HEVC_NALU_SLICE_TRAIL_R:
  3481. case GF_HEVC_NALU_SLICE_TSA_N:
  3482. case GF_HEVC_NALU_SLICE_TSA_R:
  3483. case GF_HEVC_NALU_SLICE_STSA_N:
  3484. case GF_HEVC_NALU_SLICE_STSA_R:
  3485. case GF_HEVC_NALU_SLICE_BLA_W_LP:
  3486. case GF_HEVC_NALU_SLICE_BLA_W_DLP:
  3487. case GF_HEVC_NALU_SLICE_BLA_N_LP:
  3488. case GF_HEVC_NALU_SLICE_IDR_W_DLP:
  3489. case GF_HEVC_NALU_SLICE_IDR_N_LP:
  3490. case GF_HEVC_NALU_SLICE_CRA:
  3491. case GF_HEVC_NALU_SLICE_RADL_N:
  3492. case GF_HEVC_NALU_SLICE_RADL_R:
  3493. case GF_HEVC_NALU_SLICE_RASL_N:
  3494. case GF_HEVC_NALU_SLICE_RASL_R:
  3495. slice = 1;
  3496. //fixme with latest SHVC syntax
  3497. if (*layer_id) return 0;
  3498. /* slice - read the info and compare.*/
  3499. ret = hevc_parse_slice_segment(bs, hevc, &n_state);
  3500. if (ret<0) return ret;
  3501. hevc_compute_poc(&n_state);
  3502. ret = 0;
  3503. if (hevc->s_info.poc != n_state.poc) {
  3504. ret=1;
  3505. break;
  3506. }
  3507. break;
  3508. case GF_HEVC_NALU_SEQ_PARAM:
  3509. case GF_HEVC_NALU_PIC_PARAM:
  3510. case GF_HEVC_NALU_VID_PARAM:
  3511. return 0;
  3512. default:
  3513. break;
  3514. }
  3515. /* save _prev values */
  3516. if (ret && hevc->s_info.sps) {
  3517. n_state.frame_num_offset_prev = hevc->s_info.frame_num_offset;
  3518. n_state.frame_num_prev = hevc->s_info.frame_num;
  3519. n_state.poc_lsb_prev = hevc->s_info.poc_lsb;
  3520. n_state.poc_msb_prev = hevc->s_info.poc_msb;
  3521. }
  3522. if (slice) hevc_compute_poc(&n_state);
  3523. memcpy(&hevc->s_info, &n_state, sizeof(HEVCSliceInfo));
  3524. return ret;
  3525. }
  3526. static u8 hevc_get_sar_idx(u32 w, u32 h)
  3527. {
  3528. u32 i;
  3529. for (i=0; i<14; i++) {
  3530. if ((avc_sar[i].w==w) && (avc_sar[i].h==h)) return i;
  3531. }
  3532. return 0xFF;
  3533. }
  3534. GF_Err gf_media_hevc_change_par(GF_HEVCConfig *hvcc, s32 ar_n, s32 ar_d)
  3535. {
  3536. GF_BitStream *orig, *mod;
  3537. HEVCState hevc;
  3538. u32 i, bit_offset, flag, nal_hdr_size;
  3539. s32 idx;
  3540. GF_HEVCParamArray *spss;
  3541. GF_AVCConfigSlot *slc;
  3542. orig = NULL;
  3543. memset(&hevc, 0, sizeof(HEVCState));
  3544. hevc.sps_active_idx = -1;
  3545. nal_hdr_size=2;
  3546. i=0;
  3547. spss = NULL;
  3548. while ((spss = (GF_HEVCParamArray *)gf_list_enum(hvcc->param_array, &i))) {
  3549. if (spss->type==GF_HEVC_NALU_SEQ_PARAM)
  3550. break;
  3551. spss = NULL;
  3552. }
  3553. if (!spss) return GF_NON_COMPLIANT_BITSTREAM;
  3554. i=0;
  3555. while ((slc = (GF_AVCConfigSlot *)gf_list_enum(spss->nalus, &i))) {
  3556. char *no_emulation_buf = NULL;
  3557. u32 no_emulation_buf_size = 0, emulation_bytes = 0;
  3558. idx = gf_media_hevc_read_sps_ex(slc->data, slc->size, &hevc, &bit_offset);
  3559. if (idx<0) {
  3560. if ( orig )
  3561. gf_bs_del(orig);
  3562. continue;
  3563. }
  3564. /*SPS still contains emulation bytes*/
  3565. no_emulation_buf = gf_malloc((slc->size - nal_hdr_size)*sizeof(char));
  3566. no_emulation_buf_size = avc_remove_emulation_bytes(slc->data + nal_hdr_size, no_emulation_buf, slc->size - nal_hdr_size);
  3567. orig = gf_bs_new(no_emulation_buf, no_emulation_buf_size, GF_BITSTREAM_READ);
  3568. gf_bs_read_data(orig, no_emulation_buf, no_emulation_buf_size);
  3569. gf_bs_seek(orig, 0);
  3570. mod = gf_bs_new(NULL, 0, GF_BITSTREAM_WRITE);
  3571. /*copy over till vui flag*/
  3572. assert(bit_offset >= 8 * nal_hdr_size);
  3573. while (bit_offset - 8 * nal_hdr_size/*bit_offset doesn't take care of the first two byte (NALU hdr)*/) {
  3574. flag = gf_bs_read_int(orig, 1);
  3575. gf_bs_write_int(mod, flag, 1);
  3576. bit_offset--;
  3577. }
  3578. /*check VUI*/
  3579. flag = gf_bs_read_int(orig, 1);
  3580. gf_bs_write_int(mod, 1, 1); /*vui_parameters_present_flag*/
  3581. if (flag) {
  3582. /*aspect_ratio_info_present_flag*/
  3583. if (gf_bs_read_int(orig, 1)) {
  3584. s32 aspect_ratio_idc = gf_bs_read_int(orig, 8);
  3585. if (aspect_ratio_idc == 255) {
  3586. gf_bs_read_int(orig, 16); /*AR num*/
  3587. gf_bs_read_int(orig, 16); /*AR den*/
  3588. }
  3589. }
  3590. }
  3591. if ((ar_d<0) || (ar_n<0)) {
  3592. /*no AR signaled*/
  3593. gf_bs_write_int(mod, 0, 1);
  3594. } else {
  3595. u32 sarx;
  3596. gf_bs_write_int(mod, 1, 1);
  3597. sarx = hevc_get_sar_idx((u32) ar_n, (u32) ar_d);
  3598. gf_bs_write_int(mod, sarx, 8);
  3599. if (sarx==0xFF) {
  3600. gf_bs_write_int(mod, ar_n, 16);
  3601. gf_bs_write_int(mod, ar_d, 16);
  3602. }
  3603. }
  3604. /*no VUI in input bitstream, set all vui flags to 0*/
  3605. if (!flag) {
  3606. gf_bs_write_int(mod, 0, 1); /*overscan_info_present_flag */
  3607. gf_bs_write_int(mod, 0, 1); /*video_signal_type_present_flag */
  3608. gf_bs_write_int(mod, 0, 1); /*chroma_location_info_present_flag */
  3609. gf_bs_write_int(mod, 0, 1); /*neutra_chroma_indication_flag */;
  3610. gf_bs_write_int(mod, 0, 1); /*field_seq_flag */;
  3611. gf_bs_write_int(mod, 0, 1); /*frame_field_info_present_flag*/;
  3612. gf_bs_write_int(mod, 0, 1); /*default_display_window_flag*/;
  3613. gf_bs_write_int(mod, 0, 1); /*timing_info_present_flag*/
  3614. gf_bs_write_int(mod, 0, 1); /*bitstream_restriction*/
  3615. }
  3616. /*finally copy over remaining*/
  3617. while (gf_bs_bits_available(orig)) {
  3618. flag = gf_bs_read_int(orig, 1);
  3619. gf_bs_write_int(mod, flag, 1);
  3620. }
  3621. gf_bs_del(orig);
  3622. orig = NULL;
  3623. gf_free(no_emulation_buf);
  3624. /*set anti-emulation*/
  3625. gf_bs_get_content(mod, (char **) &no_emulation_buf, &no_emulation_buf_size);
  3626. emulation_bytes = avc_emulation_bytes_add_count(no_emulation_buf, no_emulation_buf_size);
  3627. if (no_emulation_buf_size + emulation_bytes + nal_hdr_size > slc->size)
  3628. slc->data = (char*)gf_realloc(slc->data, no_emulation_buf_size + emulation_bytes + nal_hdr_size);
  3629. slc->size = avc_add_emulation_bytes(no_emulation_buf, slc->data + nal_hdr_size, no_emulation_buf_size) + nal_hdr_size;
  3630. gf_bs_del(mod);
  3631. gf_free(no_emulation_buf);
  3632. }
  3633. return GF_OK;
  3634. }
  3635. GF_EXPORT
  3636. GF_Err gf_hevc_get_sps_info(char *sps_data, u32 sps_size, u32 *sps_id, u32 *width, u32 *height, s32 *par_n, s32 *par_d)
  3637. {
  3638. HEVCState hevc;
  3639. s32 idx;
  3640. memset(&hevc, 0, sizeof(HEVCState));
  3641. hevc.sps_active_idx = -1;
  3642. idx = gf_media_hevc_read_sps(sps_data, sps_size, &hevc);
  3643. if (idx<0) {
  3644. return GF_NON_COMPLIANT_BITSTREAM;
  3645. }
  3646. if (sps_id) *sps_id = idx;
  3647. if (width) *width = hevc.sps[idx].width;
  3648. if (height) *height = hevc.sps[idx].height;
  3649. if (par_n) *par_n = hevc.sps[idx].aspect_ratio_info_present_flag ? hevc.sps[idx].sar_width : (u32) -1;
  3650. if (par_d) *par_d = hevc.sps[idx].aspect_ratio_info_present_flag ? hevc.sps[idx].sar_height : (u32) -1;
  3651. return GF_OK;
  3652. }
  3653. #endif //GPAC_DISABLE_HEVC
  3654. static u32 AC3_FindSyncCode(u8 *buf, u32 buflen)
  3655. {
  3656. u32 end = buflen - 6;
  3657. u32 offset = 0;
  3658. while (offset <= end) {
  3659. if (buf[offset] == 0x0b && buf[offset + 1] == 0x77) {
  3660. return offset;
  3661. }
  3662. offset++;
  3663. }
  3664. return buflen;
  3665. }
  3666. static Bool AC3_FindSyncCodeBS(GF_BitStream *bs)
  3667. {
  3668. u8 b1;
  3669. u64 pos = gf_bs_get_position(bs);
  3670. u64 end = gf_bs_get_size(bs) - 6;
  3671. pos += 1;
  3672. b1 = gf_bs_read_u8(bs);
  3673. while (pos <= end) {
  3674. u8 b2 = gf_bs_read_u8(bs);
  3675. if ((b1 == 0x0b) && (b2==0x77)) {
  3676. gf_bs_seek(bs, pos-1);
  3677. return 1;
  3678. }
  3679. pos++;
  3680. }
  3681. return 0;
  3682. }
  3683. static const u32 ac3_sizecod_to_bitrate[] = {
  3684. 32000, 40000, 48000, 56000, 64000, 80000, 96000,
  3685. 112000, 128000, 160000, 192000, 224000, 256000,
  3686. 320000, 384000, 448000, 512000, 576000, 640000
  3687. };
  3688. static const u32 ac3_sizecod2_to_framesize[] = {
  3689. 96, 120, 144, 168, 192, 240, 288, 336, 384, 480, 576, 672,
  3690. 768, 960, 1152, 1344, 1536, 1728, 1920
  3691. };
  3692. static const u32 ac3_sizecod1_to_framesize[] = {
  3693. 69, 87, 104, 121, 139, 174, 208, 243, 278, 348, 417, 487,
  3694. 557, 696, 835, 975, 1114, 1253, 1393
  3695. };
  3696. static const u32 ac3_sizecod0_to_framesize[] = {
  3697. 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 448,
  3698. 512, 640, 768, 896, 1024, 1152, 1280
  3699. };
  3700. static const u32 ac3_mod_to_chans[] = {
  3701. 2, 1, 2, 3, 3, 4, 4, 5
  3702. };
  3703. GF_EXPORT
  3704. u32 gf_ac3_get_channels(u32 acmod)
  3705. {
  3706. u32 nb_ch;
  3707. nb_ch = ac3_mod_to_chans[acmod];
  3708. return nb_ch;
  3709. }
  3710. GF_EXPORT
  3711. u32 gf_ac3_get_bitrate(u32 brcode)
  3712. {
  3713. return ac3_sizecod_to_bitrate[brcode];
  3714. }
  3715. Bool gf_ac3_parser(u8 *buf, u32 buflen, u32 *pos, GF_AC3Header *hdr, Bool full_parse)
  3716. {
  3717. u32 fscod, frmsizecod, bsid, ac3_mod, freq, framesize;
  3718. if (buflen < 6) return 0;
  3719. (*pos) = AC3_FindSyncCode(buf, buflen);
  3720. if (*pos >= buflen) return 0;
  3721. buf += (*pos);
  3722. fscod = (buf[4] >> 6) & 0x3;
  3723. frmsizecod = (buf[4] & 0x3f);
  3724. bsid = (buf[5] >> 3) & 0x1f;
  3725. ac3_mod = (buf[6] >> 5) & 0x7;
  3726. if (bsid >= 12) return 0;
  3727. if (full_parse && hdr) memset(hdr, 0, sizeof(GF_AC3Header));
  3728. if (hdr) {
  3729. hdr->bitrate = ac3_sizecod_to_bitrate[frmsizecod / 2];
  3730. if (bsid > 8) hdr->bitrate = hdr->bitrate >> (bsid - 8);
  3731. }
  3732. switch (fscod) {
  3733. case 0:
  3734. freq = 48000;
  3735. framesize = ac3_sizecod0_to_framesize[frmsizecod / 2] * 2;
  3736. break;
  3737. case 1:
  3738. freq = 44100;
  3739. framesize = (ac3_sizecod1_to_framesize[frmsizecod / 2] + (frmsizecod & 0x1)) * 2;
  3740. break;
  3741. case 2:
  3742. freq = 32000;
  3743. framesize = ac3_sizecod2_to_framesize[frmsizecod / 2] * 2;
  3744. break;
  3745. default:
  3746. return 0;
  3747. }
  3748. if (hdr) {
  3749. u16 maskbit, b67;
  3750. hdr->sample_rate = freq;
  3751. hdr->framesize = framesize;
  3752. hdr->channels = ac3_mod_to_chans[ac3_mod];
  3753. maskbit = 0x100;
  3754. if ((ac3_mod & 0x1) && (ac3_mod != 1)) maskbit >>= 2;
  3755. if (ac3_mod & 0x4) maskbit >>= 2;
  3756. if (ac3_mod == 0x2) maskbit += 2;
  3757. b67 = (buf[6] << 8) | buf[7];
  3758. if ((b67 & maskbit) != 0) hdr->channels += 1;
  3759. }
  3760. return 1;
  3761. }
  3762. GF_EXPORT
  3763. Bool gf_ac3_parser_bs(GF_BitStream *bs, GF_AC3Header *hdr, Bool full_parse)
  3764. {
  3765. u32 fscod, frmsizecod, bsid, ac3_mod, freq, framesize, bsmod;
  3766. u64 pos;
  3767. if (!hdr || (gf_bs_available(bs) < 6)) return 0;
  3768. if (!AC3_FindSyncCodeBS(bs)) return 0;
  3769. pos = gf_bs_get_position(bs);
  3770. gf_bs_read_u32(bs);
  3771. fscod = gf_bs_read_int(bs, 2);
  3772. frmsizecod = gf_bs_read_int(bs, 6);
  3773. bsid = gf_bs_read_int(bs, 5);
  3774. bsmod = gf_bs_read_int(bs, 3);
  3775. ac3_mod = gf_bs_read_int(bs, 3);
  3776. if (bsid >= 12) return 0;
  3777. //memset(hdr, 0, sizeof(GF_AC3Header));
  3778. hdr->bitrate = ac3_sizecod_to_bitrate[frmsizecod / 2];
  3779. if (bsid > 8) hdr->bitrate = hdr->bitrate >> (bsid - 8);
  3780. switch (fscod) {
  3781. case 0:
  3782. freq = 48000;
  3783. framesize = ac3_sizecod0_to_framesize[frmsizecod / 2] * 2;
  3784. break;
  3785. case 1:
  3786. freq = 44100;
  3787. framesize = (ac3_sizecod1_to_framesize[frmsizecod / 2] + (frmsizecod & 0x1)) * 2;
  3788. break;
  3789. case 2:
  3790. freq = 32000;
  3791. framesize = ac3_sizecod2_to_framesize[frmsizecod / 2] * 2;
  3792. break;
  3793. default:
  3794. return 0;
  3795. }
  3796. hdr->sample_rate = freq;
  3797. hdr->framesize = framesize;
  3798. if (full_parse) {
  3799. hdr->bsid = bsid;
  3800. hdr->bsmod = bsmod;
  3801. hdr->acmod = ac3_mod;
  3802. hdr->lfon = 0;
  3803. hdr->fscod = fscod;
  3804. hdr->brcode = frmsizecod / 2;
  3805. }
  3806. hdr->channels = ac3_mod_to_chans[ac3_mod];
  3807. if ((ac3_mod & 0x1) && (ac3_mod != 1)) gf_bs_read_int(bs, 2);
  3808. if (ac3_mod & 0x4) gf_bs_read_int(bs, 2);
  3809. if (ac3_mod == 0x2) gf_bs_read_int(bs, 2);
  3810. /*LFEon*/
  3811. if (gf_bs_read_int(bs, 1)) {
  3812. hdr->channels += 1;
  3813. hdr->lfon = 1;
  3814. }
  3815. gf_bs_seek(bs, pos);
  3816. return 1;
  3817. }
  3818. #endif /*GPAC_DISABLE_AV_PARSERS*/
  3819. #if !defined(GPAC_DISABLE_AV_PARSERS) && !defined (GPAC_DISABLE_OGG)
  3820. /*
  3821. Vorbis parser
  3822. */
  3823. static u32 vorbis_book_maptype1_quantvals(u32 entries, u32 dim)
  3824. {
  3825. u32 vals = (u32) floor(pow(entries, 1.0/dim));
  3826. while(1) {
  3827. u32 acc=1;
  3828. u32 acc1=1;
  3829. u32 i;
  3830. for (i=0;i<dim;i++) {
  3831. acc*=vals;
  3832. acc1*=vals+1;
  3833. }
  3834. if(acc<=entries && acc1>entries) return (vals);
  3835. else {
  3836. if (acc>entries) vals--;
  3837. else vals++;
  3838. }
  3839. }
  3840. }
  3841. u32 _ilog_(u32 v)
  3842. {
  3843. u32 ret=0;
  3844. while(v) {
  3845. ret++;
  3846. v>>=1;
  3847. }
  3848. return(ret);
  3849. }
  3850. static u32 ilog(u32 v)
  3851. {
  3852. u32 ret=0;
  3853. if(v) --v;
  3854. while(v) {
  3855. ret++;
  3856. v>>=1;
  3857. }
  3858. return (ret);
  3859. }
  3860. static u32 icount(u32 v)
  3861. {
  3862. u32 ret=0;
  3863. while(v) {
  3864. ret += v&1;
  3865. v>>=1;
  3866. }
  3867. return(ret);
  3868. }
  3869. GF_EXPORT
  3870. Bool gf_vorbis_parse_header(GF_VorbisParser *vp, char *data, u32 data_len)
  3871. {
  3872. u32 pack_type, i, j, k, times, nb_part, nb_books, nb_modes;
  3873. char szNAME[8];
  3874. oggpack_buffer opb;
  3875. oggpack_readinit(&opb, (u8*)data, data_len);
  3876. pack_type = oggpack_read(&opb, 8);
  3877. i=0;
  3878. while (i<6) { szNAME[i] = oggpack_read(&opb, 8); i++;}
  3879. szNAME[i] = 0;
  3880. if (strcmp(szNAME, "vorbis")) return vp->is_init = 0;
  3881. switch (pack_type) {
  3882. case 0x01:
  3883. vp->version = oggpack_read(&opb, 32);
  3884. if (vp->version!=0) return 0;
  3885. vp->channels = oggpack_read(&opb, 8);
  3886. vp->sample_rate = oggpack_read(&opb, 32);
  3887. vp->max_r = oggpack_read(&opb, 32);
  3888. vp->avg_r = oggpack_read(&opb, 32);
  3889. vp->low_r = oggpack_read(&opb, 32);
  3890. vp->min_block = 1<<oggpack_read(&opb, 4);
  3891. vp->max_block = 1<<oggpack_read(&opb, 4);
  3892. if (vp->sample_rate < 1) return vp->is_init = 0;
  3893. if (vp->channels < 1) return vp->is_init = 0;
  3894. if (vp->min_block<8) return vp->is_init = 0;
  3895. if (vp->max_block < vp->min_block) return vp->is_init = 0;
  3896. if (oggpack_read(&opb, 1) != 1) return vp->is_init = 0;
  3897. vp->is_init = 1;
  3898. return 1;
  3899. case 0x03:
  3900. /*trash comments*/
  3901. vp->is_init ++;
  3902. return 1;
  3903. case 0x05:
  3904. /*need at least bitstream header to make sure we're parsing the right thing*/
  3905. if (!vp->is_init) return 0;
  3906. break;
  3907. default:
  3908. vp->is_init = 0;
  3909. return 0;
  3910. }
  3911. /*OK parse codebook*/
  3912. nb_books = oggpack_read(&opb, 8) + 1;
  3913. /*skip vorbis static books*/
  3914. for (i=0; i<nb_books; i++) {
  3915. u32 j, map_type, qb, qq;
  3916. u32 entries, dim;
  3917. oggpack_read(&opb, 24);
  3918. dim = oggpack_read(&opb, 16);
  3919. entries = oggpack_read(&opb, 24);
  3920. if ( (s32) entries < 0) entries = 0;
  3921. if (oggpack_read(&opb, 1) == 0) {
  3922. if (oggpack_read(&opb, 1)) {
  3923. for (j=0; j<entries; j++) {
  3924. if (oggpack_read(&opb, 1)) {
  3925. oggpack_read(&opb, 5);
  3926. }
  3927. }
  3928. } else {
  3929. for (j=0; j<entries; j++)
  3930. oggpack_read(&opb, 5);
  3931. }
  3932. } else {
  3933. oggpack_read(&opb, 5);
  3934. for (j=0; j<entries;) {
  3935. u32 num = oggpack_read(&opb, _ilog_(entries-j));
  3936. for (k=0; k<num && j<entries; k++, j++) {
  3937. }
  3938. }
  3939. }
  3940. switch ((map_type=oggpack_read(&opb, 4))) {
  3941. case 0: break;
  3942. case 1:
  3943. case 2:
  3944. oggpack_read(&opb, 32);
  3945. oggpack_read(&opb, 32);
  3946. qq = oggpack_read(&opb, 4)+1;
  3947. oggpack_read(&opb, 1);
  3948. if (map_type==1) qb = vorbis_book_maptype1_quantvals(entries, dim);
  3949. else if (map_type==2) qb = entries * dim;
  3950. else qb = 0;
  3951. for (j=0;j<qb;j++) oggpack_read(&opb, qq);
  3952. break;
  3953. }
  3954. }
  3955. times = oggpack_read(&opb, 6)+1;
  3956. for (i=0;i<times;i++) oggpack_read(&opb, 16);
  3957. times = oggpack_read(&opb, 6)+1;
  3958. for (i=0;i<times;i++) {
  3959. u32 type = oggpack_read(&opb, 16);
  3960. if (type) {
  3961. u32 *parts, *class_dims, count, rangebits;
  3962. u32 max_class = 0;
  3963. nb_part = oggpack_read(&opb, 5);
  3964. parts = (u32*)gf_malloc(sizeof(u32) * nb_part);
  3965. for (j=0;j<nb_part;j++) {
  3966. parts[j] = oggpack_read(&opb, 4);
  3967. if (max_class<parts[j]) max_class = parts[j];
  3968. }
  3969. class_dims = (u32*)gf_malloc(sizeof(u32) * (max_class+1));
  3970. for (j=0; j<max_class+1;j++) {
  3971. u32 class_sub;
  3972. class_dims[j] = oggpack_read(&opb, 3) + 1;
  3973. class_sub = oggpack_read(&opb, 2);
  3974. if (class_sub) oggpack_read(&opb, 8);
  3975. for (k=0; k < (u32) (1<<class_sub); k++) oggpack_read(&opb, 8);
  3976. }
  3977. oggpack_read(&opb, 2);
  3978. rangebits=oggpack_read(&opb, 4);
  3979. count = 0;
  3980. for (j=0,k=0;j<nb_part;j++) {
  3981. count+=class_dims[parts[j]];
  3982. for (;k<count;k++) oggpack_read(&opb, rangebits);
  3983. }
  3984. gf_free(parts);
  3985. gf_free(class_dims);
  3986. } else {
  3987. u32 j, nb_books;
  3988. oggpack_read(&opb, 8+16+16+6+8);
  3989. nb_books = oggpack_read(&opb, 4)+1;
  3990. for (j=0; j<nb_books; j++) oggpack_read(&opb, 8);
  3991. }
  3992. }
  3993. times = oggpack_read(&opb, 6)+1;
  3994. for (i=0;i<times;i++) {
  3995. u32 acc = 0;
  3996. oggpack_read(&opb, 16);/*type*/
  3997. oggpack_read(&opb, 24);
  3998. oggpack_read(&opb,24);
  3999. oggpack_read(&opb,24);
  4000. nb_part = oggpack_read(&opb, 6)+1;
  4001. oggpack_read(&opb, 8);
  4002. for (j=0; j<nb_part;j++) {
  4003. u32 cascade = oggpack_read(&opb, 3);
  4004. if (oggpack_read(&opb, 1)) cascade |= (oggpack_read(&opb, 5)<<3);
  4005. acc += icount(cascade);
  4006. }
  4007. for (j=0;j<acc;j++) oggpack_read(&opb, 8);
  4008. }
  4009. times = oggpack_read(&opb, 6)+1;
  4010. for (i=0; i<times; i++) {
  4011. u32 sub_maps = 1;
  4012. oggpack_read(&opb, 16);
  4013. if (oggpack_read(&opb, 1)) sub_maps = oggpack_read(&opb, 4)+1;
  4014. if (oggpack_read(&opb, 1)) {
  4015. u32 nb_steps = oggpack_read(&opb, 8)+1;
  4016. for (j=0;j<nb_steps;j++) {
  4017. oggpack_read(&opb, ilog(vp->channels));
  4018. oggpack_read(&opb, ilog(vp->channels));
  4019. }
  4020. }
  4021. oggpack_read(&opb, 2);
  4022. if (sub_maps>1) {
  4023. for(j=0; j<vp->channels; j++) oggpack_read(&opb, 4);
  4024. }
  4025. for (j=0;j<sub_maps;j++) {
  4026. oggpack_read(&opb, 8);
  4027. oggpack_read(&opb, 8);
  4028. oggpack_read(&opb, 8);
  4029. }
  4030. }
  4031. nb_modes = oggpack_read(&opb, 6)+1;
  4032. for (i=0; i<nb_modes; i++) {
  4033. vp->mode_flag[i] = oggpack_read(&opb, 1);
  4034. oggpack_read(&opb, 16);
  4035. oggpack_read(&opb, 16);
  4036. oggpack_read(&opb, 8);
  4037. }
  4038. vp->modebits = 0;
  4039. j = nb_modes;
  4040. while(j>1) {
  4041. vp->modebits++;
  4042. j>>=1;
  4043. }
  4044. return 1;
  4045. }
  4046. GF_EXPORT
  4047. u32 gf_vorbis_check_frame(GF_VorbisParser *vp, char *data, u32 data_length)
  4048. {
  4049. s32 block_size;
  4050. oggpack_buffer opb;
  4051. if (!vp->is_init) return 0;
  4052. oggpack_readinit(&opb, (unsigned char*)data, data_length);
  4053. /*not audio*/
  4054. if (oggpack_read(&opb, 1) !=0) return 0;
  4055. block_size = oggpack_read(&opb, vp->modebits);
  4056. if (block_size == -1) return 0;
  4057. return ((vp->mode_flag[block_size]) ? vp->max_block : vp->min_block) / (2);
  4058. }
  4059. #endif /*!defined(GPAC_DISABLE_AV_PARSERS) && !defined (GPAC_DISABLE_OGG)*/