@@ -503,7 +503,35 @@ AP4_Ac4Parser::FindFrame(AP4_Ac4Frame& frame)
503503 frame.m_Info .m_Ac4Dsi .d .v1 .ac4_bitrate_dsi .bit_rate = 0 ; // unknown, fixed value now
504504 frame.m_Info .m_Ac4Dsi .d .v1 .ac4_bitrate_dsi .bit_rate_precision = 0xffffffff ; // unknown, fixed value now
505505 frame.m_Info .m_Ac4Dsi .d .v1 .n_presentations = ac4_header.m_NPresentations ;
506- frame.m_Info .m_Ac4Dsi .d .v1 .presentations = ac4_header.m_PresentationV1 ;
506+
507+ if (ac4_header.m_PresentationV1 ) {
508+ assert (ac4_header.m_PresentationV1 != NULL );
509+ frame.m_Info .m_Ac4Dsi .d .v1 .presentations = new AP4_Dac4Atom::Ac4Dsi::PresentationV1[ac4_header.m_NPresentations ];
510+ AP4_CopyMemory (frame.m_Info .m_Ac4Dsi .d .v1 .presentations ,
511+ ac4_header.m_PresentationV1 ,
512+ sizeof (AP4_Dac4Atom::Ac4Dsi::PresentationV1) * ac4_header.m_NPresentations );
513+ for (unsigned int pres_idx = 0 ; pres_idx < ac4_header.m_NPresentations ; pres_idx++) {
514+ assert (ac4_header.m_PresentationV1 [pres_idx].d .v1 .substream_groups != NULL );
515+ int n_substream_group = ac4_header.m_PresentationV1 [pres_idx].d .v1 .n_substream_groups ;
516+ frame.m_Info .m_Ac4Dsi .d .v1 .presentations [pres_idx].d .v1 .substream_groups = new AP4_Dac4Atom::Ac4Dsi::SubStreamGroupV1[n_substream_group];
517+ frame.m_Info .m_Ac4Dsi .d .v1 .presentations [pres_idx].d .v1 .substream_group_indexs = new AP4_UI32[n_substream_group];
518+ AP4_CopyMemory (frame.m_Info .m_Ac4Dsi .d .v1 .presentations [pres_idx].d .v1 .substream_group_indexs ,
519+ ac4_header.m_PresentationV1 [pres_idx].d .v1 .substream_group_indexs ,
520+ sizeof (AP4_UI32)*n_substream_group);
521+ AP4_CopyMemory (frame.m_Info .m_Ac4Dsi .d .v1 .presentations [pres_idx].d .v1 .substream_groups ,
522+ ac4_header.m_PresentationV1 [pres_idx].d .v1 .substream_groups ,
523+ sizeof (AP4_Dac4Atom::Ac4Dsi::SubStreamGroupV1)*n_substream_group);
524+ for (unsigned int sg_idx = 0 ; sg_idx < n_substream_group; sg_idx++) {
525+ assert (ac4_header.m_PresentationV1 [pres_idx].d .v1 .substream_groups [sg_idx].d .v1 .substreams != NULL );
526+ int n_substreams = ac4_header.m_PresentationV1 [pres_idx].d .v1 .substream_groups [sg_idx].d .v1 .n_substreams ;
527+ frame.m_Info .m_Ac4Dsi .d .v1 .presentations [pres_idx].d .v1 .substream_groups [sg_idx].d .v1 .substreams
528+ = new AP4_Dac4Atom::Ac4Dsi::SubStream[n_substreams];
529+ AP4_CopyMemory (frame.m_Info .m_Ac4Dsi .d .v1 .presentations [pres_idx].d .v1 .substream_groups [sg_idx].d .v1 .substreams ,
530+ ac4_header.m_PresentationV1 [pres_idx].d .v1 .substream_groups [sg_idx].d .v1 .substreams ,
531+ sizeof (AP4_Dac4Atom::Ac4Dsi::SubStream) * n_substreams);
532+ }
533+ }
534+ }
507535
508536 /* set the frame source */
509537 frame.m_Source = &m_Bits;
0 commit comments