bool SipccSdpAttributeList::LoadRtpmap(sdp_t* sdp, uint16_t level, SdpErrorHolder& errorHolder) { auto rtpmap = MakeUnique<SdpRtpmapAttributeList>(); uint16_t count; sdp_result_e result = sdp_attr_num_instances(sdp, level, 0, SDP_ATTR_RTPMAP, &count); if (result != SDP_SUCCESS) { MOZ_ASSERT(false, "Unable to get rtpmap size"); errorHolder.AddParseError(sdp_get_media_line_number(sdp, level), "Unable to get rtpmap size"); return false; } for (uint16_t i = 0; i < count; ++i) { uint16_t pt = sdp_attr_get_rtpmap_payload_type(sdp, level, 0, i + 1); const char* ccName = sdp_attr_get_rtpmap_encname(sdp, level, 0, i + 1); if (!ccName) { // Probably no rtpmap attribute for a pt in an m-line errorHolder.AddParseError(sdp_get_media_line_number(sdp, level), "No rtpmap attribute for payload type"); continue; } std::string name(ccName); SdpRtpmapAttributeList::CodecType codec = GetCodecType(sdp_get_known_payload_type(sdp, level, pt)); uint32_t clock = sdp_attr_get_rtpmap_clockrate(sdp, level, 0, i + 1); uint16_t channels = 0; // sipcc gives us a channels value of "1" for video if (sdp_get_media_type(sdp, level) == SDP_MEDIA_AUDIO) { channels = sdp_attr_get_rtpmap_num_chan(sdp, level, 0, i + 1); } std::ostringstream osPayloadType; osPayloadType << pt; rtpmap->PushEntry(osPayloadType.str(), codec, name, clock, channels); } if (!rtpmap->mRtpmaps.empty()) { SetAttribute(rtpmap.release()); } return true; }
/* Opens a file located in memory */ bool UCodecMovieImf::Open( void* Source, uint32 Size ) { /* Initialise video player */ SampleGrabberCallback = new FImfSampleGrabberCallback( TextureData ); VideoPlayer = new FImfVideoPlayer( ); /* Open file */ FIntPoint VideoDimensions = VideoPlayer->OpenFile( Source, Size, GetCodecType( ), SampleGrabberCallback ); if( VideoDimensions != FIntPoint::ZeroValue ) { /* Prepare buffer */ TextureData.Empty( ); TextureData.AddZeroed( VideoDimensions.X * VideoDimensions.Y * GPixelFormats[ PF_B8G8R8A8 ].BlockBytes ); Dimensions = VideoDimensions; return true; } return false; }