<p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;">hello.<br style="box-sizing: content-box;"></p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;">I need help.</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;">I would like to RTSP stream the frames captured from the PC screen.</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;">When I create SimpleRTPSink() within the createNewRTPSink() function,</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;">doGetNextFrame() of FramedSource is called when camera data is received</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;">However, when I create H264VideoRTPSink() within the createNewRTPSink() function, doGetNextFrame() of FramedSource is not called.</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;">I need to create H264VideoRTPSink() to encode the video in h264 and stream it.</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;">I've been struggling with this problem for a week.</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;">Please help.</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;">/********************************** main ***************************************************/</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;">main()</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;">{</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;">OutPacketBuffer::maxSize = 100000; </p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> cv::VideoCapture cap(0);</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> if (!cap.isOpened()) {</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> fprintf(stderr, "Could not open camera\n");</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> return -1;</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> }</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> // 라이브555 환경 초기화</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> TaskScheduler* scheduler = BasicTaskScheduler::createNew();</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> UsageEnvironment* env = BasicUsageEnvironment::createNew(*scheduler);</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> // Create a single groupsock to stream RTP packets</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> struct sockaddr_storage destinationAddress;</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> destinationAddress.ss_family = AF_INET;</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> ((struct sockaddr_in&)destinationAddress).sin_addr.s_addr = chooseRandomIPv4SSMAddress(*env);</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> //Groupsock rtpGroupsock(*env, 30000, IP_MULTICAST_TTL);</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> Groupsock rtpGroupsock(*env, destinationAddress, 18888, 255);</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> // RTSP 서버 생성</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> RTSPServer* rtspServer = RTSPServer::createNew(*env, 8554);</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> if (rtspServer == NULL) {</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> *env << "Failed to create RTSP server: " << env->getResultMsg() << "\n";</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> return -1;</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> }</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> // 스트리밍 세션 생성</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> ServerMediaSession* sms = ServerMediaSession::createNew(*env, "ggg", "Live Stream", "Live stream from webcam");</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> sms->addSubsession(H264LiveServerMediaSubsession::createNew(*env, cap));</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> rtspServer->addServerMediaSession(sms);</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> *env << "RTSP stream ready at rtsp://localhost:8554/ggg\n";</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> // 이벤트 루프</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> env->taskScheduler().doEventLoop();</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> return 0;</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;">}</p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;">/********************************** H264LiveServerMediaSubsession.h ***************************************************/<br style="box-sizing: content-box;"></p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"></p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"></p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"></p><p style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"></p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"></p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;">#include "H264LiveSource.h"</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;">class H264LiveServerMediaSubsession : public OnDemandServerMediaSubsession {</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;">public:</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> static H264LiveServerMediaSubsession* createNew(UsageEnvironment& env, cv::VideoCapture& cap) {</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> return new H264LiveServerMediaSubsession(env, cap);</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> }</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;">protected:</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> H264LiveServerMediaSubsession(UsageEnvironment& env, cv::VideoCapture& cap)</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> : OnDemandServerMediaSubsession(env, true), fCap(cap), fFrameIndex(0), fLiveSource(NULL) {</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> // Initialize FFmpeg</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> //avcodec_register_all();</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> avformat_network_init();</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> codec = avcodec_find_encoder(AV_CODEC_ID_H264);</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> codecCtx = avcodec_alloc_context3(codec);</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> codecCtx->bit_rate = 400000;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> codecCtx->width = 640;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> codecCtx->height = 480;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> codecCtx->time_base = { 1, 25 };</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> codecCtx->framerate = { 25, 1 };</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> codecCtx->gop_size = 10;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> codecCtx->max_b_frames = 1;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> codecCtx->pix_fmt = AV_PIX_FMT_YUV420P;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> if (avcodec_open2(codecCtx, codec, NULL) < 0) {</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> fprintf(stderr, "Could not open codec\n");</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> }</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> swsCtx = sws_getContext(codecCtx->width, codecCtx->height, AV_PIX_FMT_BGR24,</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> codecCtx->width, codecCtx->height, AV_PIX_FMT_YUV420P,</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> SWS_BICUBIC, NULL, NULL, NULL);</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> avFrame = av_frame_alloc();</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> avFrame->format = codecCtx->pix_fmt;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> avFrame->width = codecCtx->width;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> avFrame->height = codecCtx->height;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> av_frame_get_buffer(avFrame, 32);</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> }</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> virtual ~H264LiveServerMediaSubsession() {</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> av_frame_free(&avFrame);</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> sws_freeContext(swsCtx);</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> avcodec_free_context(&codecCtx);</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> }</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> virtual FramedSource* createNewStreamSource(unsigned /*clientSessionId*/, unsigned& estBitrate) {</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> estBitrate = 500; // kbps</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> //if (fLiveSource == NULL) </p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> {</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> fLiveSource = H264LiveSource::createNew(envir(), fCap, codecCtx, swsCtx, avFrame, fFrameIndex);</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> }</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> return fLiveSource;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> }</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> //virtual RTPSink* createNewRTPSink(Groupsock* rtpGroupsock, unsigned char rtpPayloadTypeIfDynamic, FramedSource* /*inputSource*/) {</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> // return H264VideoRTPSink::createNew(envir(), rtpGroupsock, rtpPayloadTypeIfDynamic);</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> // //return SimpleRTPSink::createNew(envir(), rtpGroupsock, rtpPayloadTypeIfDynamic, 90000, "video", "H264", 1, true, false);</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> //}</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> virtual RTPSink* createNewRTPSink(Groupsock* rtpGroupsock, unsigned char rtpPayloadTypeIfDynamic, FramedSource* inputSource) override {</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> return H264VideoRTPSink::createNew(envir(), rtpGroupsock, rtpPayloadTypeIfDynamic);</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> //return SimpleRTPSink::createNew(envir(), rtpGroupsock, rtpPayloadTypeIfDynamic, 90000, "video", "H264", 1, true, false);</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> }</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;">private:</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> cv::VideoCapture& fCap;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> const AVCodec* codec;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> AVCodecContext* codecCtx;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> SwsContext* swsCtx;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> AVFrame* avFrame;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> unsigned fFrameIndex;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> H264LiveSource* fLiveSource;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;">};</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;">/********************************** H264LiveSource.h ***************************************************/<br style="box-sizing: content-box;"></p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;">class H264LiveSource : public FramedSource {</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;">public:</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> static H264LiveSource* createNew(UsageEnvironment& env, cv::VideoCapture& cap, AVCodecContext* codecCtx, SwsContext* swsCtx, AVFrame* avFrame, unsigned& frameIndex) {</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> return new H264LiveSource(env, cap, codecCtx, swsCtx, avFrame, frameIndex);</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> }</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;">protected:</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> H264LiveSource(UsageEnvironment& env, cv::VideoCapture& cap, AVCodecContext* codecCtx, SwsContext* swsCtx, AVFrame* avFrame, unsigned& frameIndex)</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> : FramedSource(env), fCap(cap), fCodecCtx(codecCtx), fSwsCtx(swsCtx), fAvFrame(avFrame), fFrameIndex(frameIndex) {</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> </p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> }</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> virtual ~H264LiveSource() {}</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> virtual void doGetNextFrame() {</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> //cv::Mat frame;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> //fCap >> fFrame; // Capture a frame from the camera</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> if (!fCap.read(fFrame)) {</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> //if (fFrame.empty()) {</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> handleClosure(this);</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> return;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> }</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> const uint8_t* srcData[1] = { fFrame.data };</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> int srcLinesize[1] = { static_cast<int>(fFrame.step) };</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> sws_scale(fSwsCtx, srcData, srcLinesize, 0, fFrame.rows, fAvFrame->data, fAvFrame->linesize);</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> fAvFrame->pts = fFrameIndex;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> AVPacket pkt;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> av_init_packet(&pkt);</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> pkt.data = NULL;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> pkt.size = 0;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> int ret = avcodec_send_frame(fCodecCtx, fAvFrame);</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> if (ret < 0) {</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> envir() << "Error sending frame to codec context\n";</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> handleClosure(this);</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> return;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> }</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> ret = avcodec_receive_packet(fCodecCtx, &pkt);</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> if (ret == 0) {</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> if (pkt.size > fMaxSize) {</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> fFrameSize = fMaxSize;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> fNumTruncatedBytes = pkt.size - fMaxSize;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> }</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> else {</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> fFrameSize = pkt.size;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> fNumTruncatedBytes = 0;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> }</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> memmove(fTo, pkt.data, fFrameSize);</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> fPresentationTime.tv_sec = fFrameIndex / fCodecCtx->time_base.den;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> fPresentationTime.tv_usec = (fFrameIndex % fCodecCtx->time_base.den) * (1000000 / fCodecCtx->time_base.den);</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> ++fFrameIndex;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> FramedSource::afterGetting(this);</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> av_packet_unref(&pkt);</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> }</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> else if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) {</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> envir() << "Error receiving packet from codec context\n";</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> handleClosure(this);</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> return;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> }</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> else {</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> envir() << "Error receiving packet from codec context\n";</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> handleClosure(this);</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> return;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> }</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> }</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"><br style="box-sizing: content-box;"></p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;">private:</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> cv::VideoCapture& fCap;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> cv::Mat fFrame;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> AVCodecContext* fCodecCtx;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> SwsContext* fSwsCtx;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> AVFrame* fAvFrame;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;"> unsigned& fFrameIndex;</p><p class="MsoNormal" style="box-sizing: content-box; font-family: Arial, "Apple SD Gothic Neo", Gulim;">};</p><p><br><br></p><p></p><p><style unikey="ecountPStyleUnikey">p{margin-top:0px;margin-bottom:0px;}</style></p><p></p><p></p><p class="MsoNormal"></p><p class="MsoNormal"><br></p><p>
<span id="goog_2041644200"></span><span id="goog_2041644201"></span></p><table class="MsoTableGrid" border="0" cellspacing="0" cellpadding="0" width="727" style="border-collapse:collapse;mso-table-layout-alt:fixed;border:none;
mso-yfti-tbllook:1184;mso-padding-alt:0cm 0cm 0cm 0cm;mso-border-insideh:none;
mso-border-insidev:none">
<tbody><tr style="mso-yfti-irow:0;mso-yfti-firstrow:yes;height:19.0pt">
<td width="178px" rowspan="3" style="width: 178px; border-top: 1pt solid rgb(231, 230, 230); border-bottom: 1pt solid rgb(231, 230, 230); border-left: 1pt solid rgb(231, 230, 230); border-image: initial; border-right: none; padding: 0cm; height: 19pt;">
<p class="MsoNormal" style="margin-bottom:0cm;line-height:normal"><v:line id="직선_x0020_연결선_x0020_10" o:spid="_x0000_s1027" style="position:absolute;left:0;text-align:left;
flip:x;z-index:251659264;visibility:visible;mso-wrap-style:square;
mso-width-percent:0;mso-height-percent:0;mso-wrap-distance-left:9pt;
mso-wrap-distance-top:0;mso-wrap-distance-right:9pt;
mso-wrap-distance-bottom:0;mso-position-horizontal:absolute;
mso-position-horizontal-relative:text;mso-position-vertical:absolute;
mso-position-vertical-relative:text;mso-width-percent:0;
mso-height-percent:0;mso-width-relative:margin;mso-height-relative:margin" from="109.15pt,2.25pt" to="109.15pt,92.8pt" o:gfxdata="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
" strokecolor="#e7e6e6 [3214]" strokeweight="1pt">
<v:stroke joinstyle="miter">
<o:lock v:ext="edit" shapetype="f">
</o:lock></v:stroke></v:line><v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
<v:stroke joinstyle="miter">
<v:formulas>
<v:f eqn="if lineDrawn pixelLineWidth 0">
<v:f eqn="sum @0 1 0">
<v:f eqn="sum 0 0 @1">
<v:f eqn="prod @2 1 2">
<v:f eqn="prod @3 21600 pixelWidth">
<v:f eqn="prod @3 21600 pixelHeight">
<v:f eqn="sum @0 0 1">
<v:f eqn="prod @6 1 2">
<v:f eqn="prod @7 21600 pixelWidth">
<v:f eqn="sum @8 21600 0">
<v:f eqn="prod @7 21600 pixelHeight">
<v:f eqn="sum @10 21600 0">
</v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:f></v:formulas>
<v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect">
<o:lock v:ext="edit" aspectratio="t">
</o:lock></v:path></v:stroke></v:shapetype><v:shape id="그림_x0020_8" o:spid="_x0000_s1026" type="#_x0000_t75" style="position:absolute;left:0;text-align:left;margin-left:-.1pt;
margin-top:.55pt;width:104pt;height:97.7pt;z-index:251660288;visibility:visible;
mso-wrap-style:square;mso-width-percent:0;mso-height-percent:0;
mso-wrap-distance-left:9pt;mso-wrap-distance-top:0;
mso-wrap-distance-right:9pt;mso-wrap-distance-bottom:0;
mso-position-horizontal:absolute;mso-position-horizontal-relative:text;
mso-position-vertical:absolute;mso-position-vertical-relative:text;
mso-width-percent:0;mso-height-percent:0;mso-width-relative:page;
mso-height-relative:page"></v:shape></p><p class="MsoNormal" style="margin-bottom:0cm;line-height:normal"></p><p> <img src="https://ifile.ecounterp.com/webdav/autol.co.kr/hyungu.kang/sign/o_1g9tjde4ffmu1bja1uv1fnr7401g.png" width="0" height="0" style="width: 135.375px; height: 126.847px;" data-isoriginalimage="true"></p><p></p><p class="MsoNormal" style="margin-bottom:0cm;line-height:normal"><v:shape id="그림_x0020_8" o:spid="_x0000_s1026" type="#_x0000_t75" style="position:absolute;left:0;text-align:left;margin-left:-.1pt;
margin-top:.55pt;width:104pt;height:97.7pt;z-index:251660288;visibility:visible;
mso-wrap-style:square;mso-width-percent:0;mso-height-percent:0;
mso-wrap-distance-left:9pt;mso-wrap-distance-top:0;
mso-wrap-distance-right:9pt;mso-wrap-distance-bottom:0;
mso-position-horizontal:absolute;mso-position-horizontal-relative:text;
mso-position-vertical:absolute;mso-position-vertical-relative:text;
mso-width-percent:0;mso-height-percent:0;mso-width-relative:page;
mso-height-relative:page">
<v:imagedata src="file:///C:/Users/ProDesk/AppData/Local/Temp/msohtmlclip1/01/clip_image001.png" o:title="" cropbottom="7054f" cropleft="9168f" cropright="11507f">
</v:imagedata></v:shape><span lang="EN-US"><o:p></o:p></span></p>
</td>
<td width="107px" style="width: 107px; border-right: none; border-bottom: none; border-left: none; border-image: initial; border-top: 1pt solid rgb(231, 230, 230); padding: 0cm; height: 19pt;">
<p class="MsoNormal" style="margin-bottom:0cm;text-indent:5.0pt;mso-char-indent-count:
.5;line-height:normal"><b><span style="color:#002C5F">강현구</span></b><b><span lang="EN-US" style="font-size:9.0pt;color:#002C5F"><o:p></o:p></span></b></p>
</td>
<td width="441px" style="width: 441px; border-top: 1pt solid rgb(231, 230, 230); border-left: none; border-bottom: none; border-right: 1pt solid rgb(231, 230, 230); padding: 0cm; height: 19pt;">
<p class="MsoNormal" style="margin-bottom:0cm;line-height:normal"><span style="font-size:9.0pt;mso-bidi-font-size:10.0pt;color:#002C5F">책임연구원 <span lang="EN-US">/ S/W</span>개발팀<span lang="EN-US"><o:p></o:p></span></span></p>
</td>
</tr>
<tr style="mso-yfti-irow:1;height:19.0pt">
<td width="107px" style="width: 107px; padding: 0cm; height: 19pt;">
<p class="MsoNormal" style="margin-bottom:0cm;text-indent:4.5pt;mso-char-indent-count:
.5;line-height:normal"><span lang="EN-US" style="font-size:9.0pt;color:#3B3838;
mso-themecolor:background2;mso-themeshade:64">Hyungu Kang<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom:0cm;text-indent:4.5pt;mso-char-indent-count:
.5;line-height:normal"><span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:
10.0pt;color:#002C5F"><o:p> </o:p></span></p>
</td>
<td width="441px" style="width: 441px; border-top: none; border-bottom: none; border-left: none; border-image: initial; border-right: 1pt solid rgb(231, 230, 230); padding: 0cm; height: 19pt;">
<p class="MsoNormal" style="margin-bottom:0cm;line-height:normal"><span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:10.0pt;color:#3B3838;
mso-themecolor:background2;mso-themeshade:64">Senior Research Engineer / S/W
R&D Team<o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom:0cm;line-height:normal"><span lang="EN-US"><a href="http://www.autol.co.kr/"><span style="font-size:8.0pt;
mso-bidi-font-size:10.0pt">www.autol.co.kr</span></a></span><span lang="EN-US" style="font-size:9.0pt;mso-bidi-font-size:10.0pt;color:#002C5F"><o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow:2;height:49.55pt">
<td width="547px" colspan="2" valign="top" style="width: 547px; border-top: none; border-left: none; border-bottom: 1pt solid rgb(231, 230, 230); border-right: 1pt solid rgb(231, 230, 230); padding: 0cm; height: 49.55pt;">
<p class="MsoNormal" style="margin-bottom:0cm;text-indent:4.0pt;mso-char-indent-count:
.5;line-height:normal"><span lang="EN-US" style="font-size:8.0pt;color:#767171;
mso-themecolor:background2;mso-themeshade:128">T 070-4228-1071 F 031-702-5314
M 010-8584-8093 E <u style="text-underline:#767171;mso-text-underline-themecolor:
background2;mso-text-underline-themeshade:128">hyungu.kang@autol.co.kr</u><o:p></o:p></span></p>
<p class="MsoNormal" style="margin-bottom:0cm;text-indent:4.0pt;mso-char-indent-count:
.5;line-height:normal"><span lang="EN-US" style="font-size:8.0pt;color:#767171;
mso-themecolor:background2;mso-themeshade:128">13453 </span><span style="font-size:8.0pt;color:#767171;mso-themecolor:background2;mso-themeshade:
128">경기도 성남시 수정구 금토로<span lang="EN-US"> 80</span>번길<span lang="EN-US"> 11, </span>판교이노베이션랩
지식산업센터<span lang="EN-US"> 305</span>호<span lang="EN-US"><o:p></o:p></span></span></p>
<p class="MsoNormal" style="margin-bottom:0cm;text-indent:4.0pt;mso-char-indent-count:
.5;line-height:normal"><span lang="EN-US" style="font-size:8.0pt;color:#767171;
mso-themecolor:background2;mso-themeshade:128">305, 11 Geumto-ro 80beon-gil,
Sujeong-gu, Seongnam-si, Gyeonggi-do, 13453, Republic of Korea</span><span lang="EN-US" style="font-size:8.0pt;mso-bidi-font-size:9.0pt;color:#3B3838;
mso-themecolor:background2;mso-themeshade:64"><o:p></o:p></span></p>
</td>
</tr>
<tr style="mso-yfti-irow:3;mso-yfti-lastrow:yes;height:84.55pt">
<td width="727" colspan="3" valign="top" style="width:545.5pt;border:none;
mso-border-top-alt:solid #E7E6E6 .5pt;mso-border-top-themecolor:background2;
padding:0cm 0cm 0cm 0cm;height:84.55pt">
<p class="MsoNormal" style="margin-bottom:0cm;line-height:normal"><span style="font-size:7.0pt;mso-bidi-font-size:8.0pt;color:#767171;mso-themecolor:
background2;mso-themeshade:128">이 메시지<span lang="EN-US">(</span>첨부파일 포함<span lang="EN-US">)</span>는 지정된 수신인에게만 전달될 목적으로 발송되었으며<span lang="EN-US">, </span>부정경쟁방지
및 영업비밀의 보호에 관한 법률 등 관계법령에 따라 법으로 보호되는 중요한 정보를 담고 있을 수 있습니다<span lang="EN-US">. </span>이
메시지와 첨부파일 등에 있어서<span lang="EN-US">, </span>공개<span lang="EN-US">, </span>복사<span lang="EN-US">, </span>배포 또는 기재된 내용을 근거로 한 일체의 행동 등의<span lang="EN-US"> 2</span>차 활용에
대해서는 메일 발신자에게 확인을 받아야 하며<span lang="EN-US">, </span>메일 발신자의 확인이 없는<span lang="EN-US"> 2</span>차 활용은 엄격히 금지되어 있음을 주지하시기 바랍니다<span lang="EN-US">. </span>만약
이 메시지가 잘못 전송되었을 경우<span lang="EN-US">, </span>발신인 또는 당사에 알려주시고<span lang="EN-US">,
</span>본 메시지를 즉시 삭제하여 주시기 바랍니다<span lang="EN-US">.<o:p></o:p></span></span></p>
<p class="MsoNormal" style="margin-bottom:0cm;line-height:normal"><span lang="EN-US" style="font-size:7.0pt;mso-bidi-font-size:8.0pt;color:#767171;
mso-themecolor:background2;mso-themeshade:128">This message (including
attachments) contains confidential information intended for a specific
individual and purpose and is protected by law. If you are not the intended
recipient, you should delete this message and are hereby notified that any
disclosure, copying, or distribution of this message, or the taking of any
action based on it, is strictly prohibited. <o:p></o:p></span></p>
</td>
</tr>
</tbody></table><br><p></p><p></p><p><br/></p><p><br/></p><table id="ecma_tracking"><tr><td><img src='https://wmail.ecount.com/WMAPI/Service/ReadReceipt/6d736769643d32303234303632363039333935342e3837333830312e3144413045413326656d61696c3d6c6976652d646576656c406c697374732e6c6976653535352e636f6d'></a></td></tr></table>