[h323plus] Video Resolution

Carlos Haj unazona at hotmail.com
Fri Jan 15 10:05:30 EST 2010


Simon,



Thanks for valuable information. What is happening literally in a minimised case: I derived OnVideoChannel



on the Local endpoint





if (encoding)


{


      codec.SetFrameSize(352, 288);

.....


}


else


{


      cout << codec.GetWidth();



      cout << codec.GetHeight();

      // I receive CIF (ERROR)

.....


}



on the Remote endpoint





if (encoding)


{


      codec.SetFrameSize(176, 144);

.....


}


else


{


      cout << codec.GetWidth();



      cout << codec.GetHeight();



      // I receive CIF (normal)

 .....


}



I looked into H323 trace Log, (remote endpoint which supposed to send QCIF) 



PLUGIN       Error encoding frame from plugin H.261-CIF

H245          Request CloseLogicalChannel

H323RTP     Transmit H.261-CIF thread ended



It seems that the H.261 channel is closed prematurely. As my local
endpoint received an incorrect video size I suppose that local endpoint
causes remote to close the transmission channel.



Could this be related to the version of the plugin or h323plus lib
which I use? it's likely that the video resolution is sent before
codec.SetFrameSize is invoked!



Did you in practice used different video resolution under the same capability? e.g. CIF<->QCIF calls



Carlos

From: s.horne at spranto.com.au
To: unazona at hotmail.com; s.horne at packetizer.com; h323plus at lists.packetizer.com
Subject: RE: [h323plus] Video Resolution
Date: Fri, 15 Jan 2010 23:14:23 +1000










Carlos
 
The current behaviour is correct. 
 
The old OpenH323 used to only send CIF with *-CIF{sw} 
capability and only QCIF with *-QCIF{sw} . This was 
changed with the video plugins so the capability could do up to CIF so 
it would also supported QCIF. This is perfectly 
H.245 legal.
 
In this way only 1 capability can do both frame sizes. 
This is the way most manufacturers implement the capability 
exchange.  
The capability has a flag for the size it supports so the old CIF 
capability used to say QCIF - 0 CIF - 1. So if you wanted to do QCIF you 
had to use the *-QCIF{sw} capability as the QCIF flag in the *-CIF{sw} was 0. 
This was changed so that the *-CIF{sw} capability had the QCIF flag so it could 
also support QCIF. Then it was safe to remove the *-QCIF{sw} capability and only 
exchange using the *-CIF{sw}. 
 
Now SetVideoFrameSize() will set the global frame size limit so 
regardless of the direction that will be the maximum size permitted (if CIF 
only up to CIF capability is available). The codec.FrameSize() in the 
MyH323Endpoint::OpenVideoChannel() allows the implementor to set the 
actual frame size to send. 
 
Is there something else I missed?
 
Simon
  



From: Carlos Haj [mailto:unazona at hotmail.com] 

Sent: Friday, 15 January 2010 8:39 PM
To: 
s.horne at packetizer.com; h323plus at lists.packetizer.com
Subject: RE: 
[h323plus] Video Resolution


Simon,

Thanks for your quick answer, just noticed that I had a 
bad thread name;)

Well, I have the codec.SetFrameSize(w, h); in my 
OpenVideoChannel

When adding capabilities I 
use

AddAllCapabilities(0, P_MAX_INDEX, 
"*");
SetVideoFrameSize(H323Capability::cifMPI);

Capabilities 
table shows as 

Set 0: 0: 
audio
          1: 
H.261-CIF{sw}

I receive an OpenVideoChannel for encoder, I open 
channel and attach video reader + colourConverter, just after that I receive a 
close video signal from a H245Negotation, here I join Call Stack

>   testApp.exe!mmDDSVideoOutputBridge::close2()  Ligne 
359    C++
     
testApp.exe!mmVideoInputDevice::~mmVideoInputDevice()  Ligne 43 + 
0x1b    C++
     
testApp.exe!mmVideoInputDevice::`scalar deleting destructor'()  + 
0x2b    C++
     
testApp.exe!PVideoChannel::CloseVideoReader()  Ligne 203 + 
0x24    C++
     
testApp.exe!PVideoChannel::Close()  Ligne 145    
C++
     
testApp.exe!H323Codec::CloseRawDataChannel()  Ligne 488 + 
0x11    C++
     
testApp.exe!H323VideoCodec::Close()  Ligne 747    
C++
     
testApp.exe!H323Channel::CleanUpOnTermination()  Ligne 
716    C++
     
testApp.exe!H323_RTPChannel::CleanUpOnTermination()  Ligne 
1160    C++
     
testApp.exe!H245NegLogicalChannel::Release()  Ligne 1219    
C++
     
testApp.exe!H245NegLogicalChannel::HandleCloseAck(const 
H245_CloseLogicalChannelAck & __formal={...})  Ligne 
1086    C++
     
testApp.exe!H245NegLogicalChannels::HandleCloseAck(const 
H245_CloseLogicalChannelAck & pdu={...})  Ligne 1372 + 
0xf    C++
     
testApp.exe!H323Connection::OnH245Response(const H323ControlPDU & 
pdu={...})  Ligne 3293 + 0x22    C++
     
testApp.exe!H323Connection::HandleControlPDU(const H323ControlPDU & 
pdu={...})  Ligne 3189 + 0x12    C++
     
testApp.exe!H323Connection::HandleControlData(PPER_Stream & 
strm={...})  Ligne 3170 + 0x18    C++
     
testApp.exe!H323Connection::HandleReceivedControlPDU(bool readStatus=true, 
PPER_Stream & strm={...})  Ligne 3103 + 0x12    
C++
     
testApp.exe!H323Connection::HandleControlChannel()  Ligne 3085 + 
0x13    C++
     
testApp.exe!H245TransportThread::Main()  Ligne 700    
C++


If I remove the 
"SetVideoFrameSize(H323Capability::cifMPI);", I get the following capabilities 
set

1: H.261-CIF{sw}
    
H.261-QCIF{sw}
    H.261{sw}

with exactly same 
strange behaviour, QCIF is not sending while CIF is being received, by the way 
qcif endpoint says

Local Video Codec - H.261-CIF{sw}
Local Resolution 
- 176x144

Remote Video Codec - H.261-CIF{sw}
Remote Resolution - 
352x288


I tried a "ReorderCapabilities(PStringArray("QCIF"));" after 
my addcapabilities, I ended up with both endpoints using QCIF and ignoring my 
SetFrameSize anyway!!

Is there a glitch using H323Plus video plugins? my 
code works perfectly on openh323 
stack.

"SetVideoFrameSize(H323Capability::cifMPI);" is supposed to define 
a maximum video resolution?! as you said in API doc "... to set the maximum 
framesize allowed to the specified value "

Is that usual to have 
H.261-CIF with a QCIF resolution? On which order codec plugins can be added to 
avoid such problems of negotiation?

Regards



From: s.horne at packetizer.com
To: unazona at hotmail.com; 
h323plus at lists.packetizer.com
Subject: RE: [h323plus] Valid sessionID in 
OpenLogicalChannel command
Date: Fri, 15 Jan 2010 08:12:54 +1000




Carlos
 
In your derived
H323EndPoint::OpenVideoChannel(()
 
(isEncoding)
     
codec.SetFrameSize(w,h);
 
Simon
 
 
 




From: h323plus-bounces at lists.packetizer.com 
[mailto:h323plus-bounces at lists.packetizer.com] On Behalf Of Carlos 
Haj
Sent: Friday, 15 January 2010 12:59 AM
To: 
h323plus at lists.packetizer.com
Subject: Re: [h323plus] Valid sessionID 
in OpenLogicalChannel command




Hello Guys,

I would like to have different frame sizes for two endpoints, 
first I tried to play around with H323Endpoint::SetVideoFrameSize, but it seems 
that part changes the maximum allowed size, which means that if I switch the 
videoFrameSize to qCIF, I wouldn't be able to receive CIF from the other 
endpoint. my test only received QCIF.

I tried also to modify the 
OpalMediaFormat by using a GetWritableMediaFormat for a capability, that ended 
with unusual CIF format while having a QCIF resolution.

On the other 
hand, I looked Opal examples where they use an OpalManager, but unfortuntly that 
seems incompatible with h323plus, while old openh323 tutorials and exampls don't 
have any video plugins support.

How I can manage to receive and send 
different resolutions (frame sizes) using H323plus?

I appreciate a lot 
your help
Carlos





Discute avec tes amis partout, grâce à Messenger sur ton mobile. Cliquez ici ! 		 	   		  
_________________________________________________________________
Découvrez Windows 7 en 7 secondes !
http://clk.atdmt.com/FRM/go/181574577/direct/01/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.packetizer.com/pipermail/h323plus/attachments/20100115/8dccc62a/attachment-0004.html>


More information about the h323plus mailing list