void
mpeg4_p2_video_packetizer_c::extract_size(const unsigned char *buffer,
        int size) {
    if (m_size_extracted)
        return;

    if (0 != m_connected_to) {
        m_size_extracted = true;
        return;
    }

    uint32_t xtr_width, xtr_height;

    if (mpeg4::p2::extract_size(buffer, size, xtr_width, xtr_height)) {
        m_size_extracted = true;

        if (!m_reader->m_appending && ((xtr_width != static_cast<uint32_t>(m_hvideo_pixel_width)) || (xtr_height != static_cast<uint32_t>(m_hvideo_pixel_height)))) {
            set_video_pixel_width(xtr_width);
            set_video_pixel_height(xtr_height);

            if (!m_output_is_native && m_ti.m_private_data && (sizeof(alBITMAPINFOHEADER) <= m_ti.m_private_data->get_size())) {
                auto bih = reinterpret_cast<alBITMAPINFOHEADER *>(m_ti.m_private_data->get_buffer());
                put_uint32_le(&bih->bi_width,  xtr_width);
                put_uint32_le(&bih->bi_height, xtr_height);
                set_codec_private(m_ti.m_private_data);
            }

            m_hvideo_display_width  = -1;
            m_hvideo_display_height = -1;

            generic_packetizer_c::set_headers();
            rerender_track_headers();

            mxinfo_tid(m_ti.m_fname, m_ti.m_id,
                       boost::format(Y("The extracted values for video width and height from the MPEG4 layer 2 video data bitstream differ from what the values "
                                       "in the source container. The ones from the video data bitstream (%1%x%2%) will be used.\n")) % xtr_width % xtr_height);
        }

    } else if (50 <= m_frames_output)
        m_aspect_ratio_extracted = true;
}
void
generic_packetizer_c::set_video_pixel_dimensions(int width,
                                                 int height) {
  set_video_pixel_width(width);
  set_video_pixel_height(height);
}