void avi_reader_c::set_avc_nal_size_size(mpeg4_p10_es_video_packetizer_c *ptzr) { m_avc_nal_size_size = ptzr->get_nalu_size_length(); for (size_t i = 0; i < m_max_video_frames; ++i) { int size = AVI_frame_size(m_avi, i); if (0 == size) continue; memory_cptr buffer = memory_c::alloc(size); AVI_set_video_position(m_avi, i); int key = 0; size = AVI_read_frame(m_avi, reinterpret_cast<char *>(buffer->get_buffer()), &key); if ( (4 <= size) && ( (get_uint32_be(buffer->get_buffer()) == NALU_START_CODE) || (get_uint24_be(buffer->get_buffer()) == NALU_START_CODE))) m_avc_nal_size_size = -1; break; } AVI_set_video_position(m_avi, 0); }
uint32_t mm_io_c::read_uint24_be() { unsigned char buffer[3]; if (read(buffer, 3) != 3) throw mtx::mm_io::end_of_file_x(); return get_uint24_be(buffer); }