volvet
unread,Jul 19, 2008, 10:48:43 PM7/19/08Sign in to reply to author
Sign in to forward
You do not have permission to delete messages in this group
Either email addresses are anonymous for this group or you need the view member email addresses permission to view the original message
to 闲敲棋子落灯花
(准备读读JSVM的代码, 写点体会)
JSVM的作者大概从没考虑过代码的可读性吧 . 跟H264的参考代码JM一样, JSVM的代码也是难以理解.
其中有不少古怪的宏,大概让人头痛吧. 不过细细看去, 还是有规律可循的.
本文讨论的宏定义于jsvm/h264extension/inc/macros.h
大部分宏的开头字母是R , 这次R的含义是 Return
比如 RERR , 就是 Return 一个错误值 , 该值定义于ERR 类中的m_nERR.
不在开头位置的字母R , 此时的含义是该宏返回的值并非错误值 , 而是宏所输入的参数
retVal .
比如 ROFR (exp, retVal) 的函数是 if ( !exp ) Return retVal
字母 O , 其含义是判断宏的输入参数 exp 的意思 F 的含义是 Fasle, T 的含义是 TRUE
比如 ROF(exp) 其含义就是 if( !exp ) ERRR
ROT(exp) 其含义为 if( exp ) ERRR
字母 S , 一般位于宏的末尾 , 其含义是无 Assert 操作 .
前面所说的宏 , 除了已经说明的含义外, 还有一个操作是 Assert( 0 )
但是 如果 宏的尾巴上加了S , 那这个宏不会 Assert( 0 )
好了 这下大部分宏的意思就可以看懂了
RERR , 就是 ASSERT (0 ) ; Return ERR值
ROF(exp) 就是 if ( !exp ) { ASSERT (0); RERR }
ROFS(exp) 就是 if( !exp ) { RERR }
ROT(exp) 就是 if( exp ) { ASSERT(0); RERR }
ROTS( exp ) 就是 if ( exp ) { ERRR }
ROFR(exp,retVal) 就是 if( !exp ) { ASSERT(0) ; Return retVal; }
ROFRS(exp, retVal) 就是 if( !exp ) { Return retVal; }
其他大致如此 .
另外还有几个重要的 , 就是 NOK , 就是要检查值是否等于 ERR 中定义的 m_nOK
比如 RNOK(exp ) 就是 if( exp != OK ){ Assert(0); return exp;}
RNOKR(exp,retVal) 就是 if( exp != OK ) { Assert(0); return retVal; }
还有一个是 A , A 表示 Assert
比如 AF 就是 Assert( False )
ANOK(exp) 就是 if( exp != OK ) { Assert(0) }
AOF( exp ) : if( !exp ) { Assert(0) }
AOT( exp) : if( exp ) { Assert( 0 ) }
好了 那些难解的宏 大致就这些了 .
Reference
JSVM 9_13_1