This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Facing issue in Interlaced encoding with EzSDK on DM814x based board

Other Parts Discussed in Thread: TVP7002

Hello TI,

We have DM814x based custom product. We are using EzSDK version 5.05.01.04 (ezsdk_dm814x-evm_5_05_01_04) in this product. I want to do interlaced encoding using capture_encode demo. I refer FAQ 3 in the link http://processors.wiki.ti.com/index.php/OMX_VENC and did relevant changes in my capture_encode demo.

When i played back the encoded file with Elecard it shows that encoded file is interlaced (interlaced : yes) but it has lots of noise on transparent video in background. I suspect that something is wrong with stride (or pitch), width or height because the elecard shows resolution as 720x1152 and one more observation is it plays with the maximum bit-rate something around 60-63 Mbps with PAL resolution even though declared bit-rate is just 4Mbps.

Please help as soon as possible.

Regards,

Hitesh

  • HI Hitesh,

    What is the original frame resolution? And can you please share the noisy image versus original? 

    Also please share the changes you made to the code - original and chnages highlighted.

    Thanks & Best Regards

    Feroz

  • Hi Hitesh,

    Can you please share your encoder settings? Could you also try out once with "encode" demo and check the behaviour?

    Please share initial few 4-5 frames of encoded stream.

    Thanks

    Ram

  • Hi Feroz,

    Original resolution is PAL (576i). Noisy compressed H.264 file is attached here (renamed by txt extension, so renamed back to .h264 extension) 7838.interlaced.txt

    And when i am using de-interlacer to in between capture & encode so encoder will does progressive encoding and not the interlaced video which is attached here

    2100.progressive.txt
    'd*�*�I�����=	B@�(��,�_�@�%��@ 6��0��J��^���j�xw(���"':��Ց��Z�|+�Q�&y;*d]!8�m{�sc�K��]OYz�s+�T䰼�7C�:̪�]rl���׉j�M[�"����$!�s�$Ey�� 80��J��F��P�0���a�/�k��m���ѧ2�2��b�h_�{�y6��-��Pw�H]�ˆJD_���[�K˄��p��w9�"3
    ��_��+�{���)�s�������v!�U:���Rƛ.�[��|���g��:�N��1�^�� �s����ߓ��U�v܍Ӄπ)s>1}J�J۷����n[�a��B
    �ꖬb4�e|Lr�����(�tj�^i9��@�~s�8� �;��t��C����:$�O�r.g�]�����.CIW_�
    ��Tw<�p�t��rq܅�_ۺ�^��n
    㧌<�Ј�Z)(#�����=�֛!":p�3�̅hc�c$�DY*�R��͕�I�
    �kKbߴ����3rj�\/T�	��SK��,|���
    4�$��)ې�����f����
    cx���Ƹ_��a��\�)��8�D�h�I��>�3q�����Ȇ�ƈ���t�~��4��\y��BLG��❜m�R�G��'i��g���[/ �*2�]�rݡ�8����p�(n7{���61�V�s.���K�!��X��yjJM�
    2e-��ش���$ў7Vc�n;\p^�[j���a���<�ݡ‘�g�s�Y��Nv��~<K���ph�IV=��moں���Br��
    ���^i��di�������fQ��y��9M��,��Upv��MJ�'M����?��2�A�^�H�2�-��fUf7yO�2�W���
    ^U/�!�+,Ix2Ǩެ�8 ���P�t�<�ѱj¹}5�C)�P����R�3mXZ�0aq8�}NN@���<��46
    ���ݲ�Wf
    ��7^��B��Y�/���^�#�W0j/��&��|M�
    ��ȹ��ͨB�l��o�8YGJ��#Q�ui�Iq楂NV0�X�B�Ғ{�6�dW�f�r����9	_�|�2�nem��s�Ŝ��q<~��*5����&�'��4 �Z��2*�������d��6f�c}�!�����M�пXH|{J�W T�V5Ci�D~l�>8����D�n*E�	jR�7�%�a[�y���&O+R2k�&���E����kc3Y�v��ʲ�������,��Bʲ�Z���T_.�3�,�H�/�'��yȽ7��X��I��{J�A�//r+�̶,������ݑQmE�������r��W2�̡���/�Z����7j���Q��g��n�
    ��C�
    �8�c|�xgӭ>z[�2A����f�U��!q�YB�x.!��X�ٲv)�����Eh�cǃ��&��(�d�}G���	~y@šz��xP?���~�����E^�k��%Y>�Pb�/�b�N�"#��2����4�(�6�����6Uލob0#d���u0[�Z��C���͓����nԆA+�Ȕ���f�ΣS��ƫO�nl�w�����,&�f4ze!���lm��+8E��\36C���0z{{�F`[���+�lԒ�ɖm;����BB���
    �s���w�!�f�M��|1GEa���D�"��ku���x�c�#;�0@�w�RЗReD���W�9*Ϧ5��R�l˺fޢޯ���q�L�8tDl�z5��/��q�Pe>�dq.��nNNF��Zx��M�ٚq���;��¤�
    R��?�0���,PQ�O�'��� ��׍�)�.6A
    X�R�r� �Ф>�<Kf�y�]7V��Z�)��3��"��o��wD���٬�}*G͠�#���,fЌ6Ʃ���b�\�����Փ�߭��gHу`�
    8@/���#��Ƥ���L��Nl�)���K����Y�S�H)����0
    @p��K��������p٬-�}ܚ�|�A�6s1�D�6pUM���65���Rd�k����㯾�K��n?�>G	?d�F���*V�������U0�`��,��`y�����y#�bL���a[�^�T��V��5�WB��\����|�͉���a\������F�Z����)�g �!s��_���p�.��^�)�����HH�8�d�.�_+�(����"N.DA�K
    #H�C���I�뜠�O(%%TO����P�;�=̝�1lkh�t
    m� ����ӦYT̀���[����a�%��}��ɒ:����މ�n��������r4F��H�j�����3����p*`���˲y	d�'�?)�^�F�_�[�䯅}�džĕ/b�Q����_($�w��+���׉L�7��-����g�&�(�������t�?��ʻb�-�� Cd����3���KE�r-����C�^o����|���sR�v�p��Bg�%
    ��]�NAK�x�<��\H|:sY�i�0��{�{��D�,��͞��2e�9�� C[�#K��@/߬�d{���v���|�:����޵d�ـK
    �+�"m�_�n2M�����E��vr7jQ3��x�-��Gq�}��{p���Ô[��*W�ѣF�z��X�jZ�>?��Ia��wv�01a����~�x?���O��m�B�*j��s�y����}5��MUy{���j0�������\e����7
    �,66�^��
    ��#G��TH��������,ST�0���k�3ń��.�K�E�����~Yw<;����ڹuo���0-��ǎ�5i�
    G0�%��4<s������u���o�t]V�b���0�m�G�!J�w7}��:2�7�dԒS!�J��|UI8u�w���SdC1Ȋ����9�}�/(��J������ʞ<`�wX��G�+�����U#���w�[%ݭ��$f��"�}����TI�c�wX��{}{]����<&�Zx�(49tHV�u����L��=�g��IIqd]r#�?�o�_S%����y1@X"�E95@��>�Ǻ�3�m����Bv���nE��H>,�~�������|��^������f��n�����31����%@[�qj��a4 �p�AA�:�e�?ӖL1q04$��|W;��ȟ�ݍiF����P+#�鱼�G���˟�T�� �y�?&��_��$�`ʼ�4��p��t�� P.z�_��}ɏ��宫Q��N���.
    G�3Y~V_����O�/uN@�rt]����g�"'���~�OV�������ċL���A��,���.��!�V�&�x���V?є¿C%r=�u�1l�u\;m_]J/�W3��jl�9{��)�1+}U�+�t+�q��E�+q��{-����Ţ�-&���`F,њo]H
    .�M�4�?����74���r�_z�i�ف�2�sbn^��_�ϡ^�
    	 ��3�}_������])���������P}�ѻ;���X���^w���/������Z�!��*S�;��U�KYΠ�����s&`��m��?��5%K�d�.�����4�.��#��Cl�td���*P}�ގU�p����UƄ���7��5.B�7��\F����x�dt�?�t�#�T���ɲ$z�|
    <���!+dCq&XH�;bi�R�$U��%���Zw���^���b��7���1��+4������U��*��$�&����Y[���t�MR�d���~�"j!{�w�&�%��ߝ^sX�>��\?��1^ٮ���4��m+��d#e�.�N�"��$���0�z�1H�'�1�S׬j�8go�6�"�
    �0�߱&ݟ.�lvr�J2Y.u�z���Wa������
    �d��������#B�Ӯ8š��frH�E�G�!���qj��ǟ�e�	1q�p�8\��LV̷O�6�#��&C# �Z��E�`dk?/��^fr�f���)y���������y/ᄳ��y�Vbv�S�a��q1��@�|G��6��%�Y�dj�a����wݘ�AKӭM��HA���&��,�}8!b����z���1��~�G����E��G����>�˖�o����G����d%C 5��	��Ou�D�)N9�9��6á�]����9���D�Em���g�S�do����EG�^��$�E��o�N6�UI�S�3(�d�w��%����(��(�A��ܱ�;N� �SsLѴ̢������'�W”�����=�蔧�CO#���8�O����?1VIX\��D.j,$SR�����vL/L�&Ă����KaV?��w^���e�{*��Drb
    �F5?`���ܾD7
    �^ܻ���֡xպ��i7D�2�KF��O��Ϙ/;I2t�P�@��AV��e�e?g!���ԧ�5�Sw�3���m� @���/������*�y�.��ǵl������?�H���r�!�Zdi�3L�K�������|�`��\ZMp��o�R��XMk/Z�?�G]9�oӓf�S��i�ف��'�k�U���E4��E
    ��7,��ނ�����NΡ?��a둨`䫛���������j�
    �y���>G�;H������ktp�i�v�o��:���C*�J?~H�<j����󪄦�c�
    ��k�T��x�N@��Q�jc�{nyOϳ�.��Mק�;n�ߺ�n��lz�����x÷6�^5�d����(��R:�L����3bu�bj��P��%�ݶ��ĦU�l�ُ��KTU�g1�k��/��s�C"
    �w��f_�V8��x*A7N[&ܒ�e��$���M~�����o�Ƙ_�\y�]����6�2�~V^��ہWl�ͣ^���$�do,w�9��z���KIj�_v�.&�&�|f�%�����3�8�o��t�[��Ӧ���	5�7#74@W�&�e;H�h���n~�ݕt�<=�SH`�����cB�$e;^s��TqP?�/_��W��N��~;+�R6�k�}��:*�AZ�����l���!��Y���I��MS?hm��&��+T���?ܿL/�2	��Z��Nj#_Q7,�N,��\΁f�\|����%�ubi�(%N���i�gW ���c�D���8��3Ϳ�n�6G���p��,�}�U�ΰy�/U*�4m���H�#�s�C�9��_$�B��ZG��ȋ����W}�V[Phc��0�8!<|♟��*��f�9$
    V'�ƢCo,\�;���t��P;~����WOY�䔥�|������q]��YaO�M�.��b>�P��x	�<Q#K���1��WK�v��Ǵ�Q�����P����%W���e�dj�^ԩv��/�:�v^U�d˦��@Bn^���F�be��hn
    �Z^�����}���[k�g�
    �h�G����׹�vU|�R�b�i�d�a+<7{H�T�x��ԟ����e�%�e�W�7�"��>qy�<���k�x���<�3���Q���O?t��g||���?t�o������j���/L�5������L���Cڳ:T{�rQ���#��y6��
    �ټ�Z�Ũ0nFL�G��ڛ��0n��y�@�p�+_Ã
    4hRS��MD��׷�.��}�1�q>K�=vf S�ݽ�!ī)�i�;��Z[>����2���H|����t�l�@��8h)����1�H���\$�lP�+xi����֋3�h�fnQu�2���������K��Qx���
    	<�-<��ò��C��O0C�;.�`���^��x��ɹ4m�B�;"���%W�����f�_�<�d̖P�4�{ZC���F��el�ϡ\�,��y*U���>��r`cPT�6%{�/EK�IT��Ή	�K����<Ϳ��E��;_�Մ:3��8X�(R)�gs�KT&����Tb��-;tz�o��Ŋ2ӊ��{yˤ��U����tC�d	���B9`B9�����P�������R�$W֫�!��
    �D���K�ھ��~����"�†�o���o��؈I��$T�U��50��o�yp��u÷�W�a���l�˲����U���.�R�s��|H���[�w$1�����@ĺ�0עz�S��_xP��q?���rB3�{~�iErQ��F1g�-w�p ��H��a3fo��
    �H@o��32]��?C{T��_!��Ŀ��P��`�	G�8��
    Q��"+|z���YdYjpO~�|��lW�)[�r�]���ҷ�X�����IS�"��W���4��\���������~�Z:��f/�\��ź8�;8;���5�!�h>U��P��6_@�CGs��䶼L]˛S-?��:nG���4�'�<��쵫h$#��V�}7]���;��~
    ,��!��Q�Q�}�Zrd���D�mv��)�ܘj���;FȳR��E�=���]^	� :�K�o� a��-��{57ߑ/2�����T(�$�Ä���Hlu7����R����o�l$**F�r�
    ��,߿|0?A4����Hv�@O{@�A���#8��	�!
    �����pn���xQ���P����54�g��EH��\f��ҕP�x�git)E�,s�}����S&I �8��Hκ��h���}^��d.r���|���t���;͸t.V��I�;��ʖ˝Eok�w�6��6clݸ���0�*c�34���)H)TZ����;�A�9�_Hv_�
    o"k�\u�eIN~����
    �.Y��j�+���r�&L�?E1����d4X[=,�mg3e���X����k����3����!T-4K�![fb�a3�FDYVEX�w�5a���Y;9I �A< o��L�dv�[��=�p:��	6�Cǹ1:<;zF����I�->K�f������"�[h2
    >�
    ��j��<�L0�e�M�(�6h�s
    r2#B��{j�ɽ�4LU�nu+��I4�	Qo9oc����U�S��_�uL��倓G�(�7���Z��f�8k�&�Z���T����6o�?��]�	YU�Ec�3\�Z�����`��m���k�h> �H�Tui�R�vj>�Rg��l��p��-��ֆ��gu����(��|����5[Go��1R�<�R�����̖W���D�hu�&�R����}��mB��!��-���~��r����0+�Z�v6���N���KfA�+��E��_��T]Ҋ�O��ث>��I_,��P���c�&j`�����K$�p��>S����p���c,_mg�;"�@���n���1&3p�,o�_uK��HIh`�f)<� ������$�n�A������듾Z��ӿ���*	�_�P�+I:����m_�[M!Yg�q��a]�X��E�݁3dU	�A�P�>l}F$B���ҚZ�1K#�{��Ee��>�`�j=Ζ�yr��UW���B��R�f勊4�8
    �eu���EC��:ajՕ��
    ��{�3�hz���4u�H���هWs��op_I*�xYA�^���X�72���n?\%�E�GR���T���$H>D��y�$qWȮ#�ˆq�w�ʼnb�����O�"��O,�C��-0:�%Ӟl�uN�����꡿��]	Air15�"ϜA�B�v	���p���Z2��V�3�.�<��������$�zRZ��A����gv��5lRЭj��66������=��%�T�&Lz-��	�XD�UZ��[����vD�g�|�/�?v)��|���������*��r?������e���?�'ojh�"VAP�q22?ҩ�x]��Iî�W=�n���m�Y����ӠaD'JU'��`��X9���~�ǒum�c�����*�SX���oͽ���K5�eh�8ح^�sn��I麭�Cw��ѻ�	�z��0u���r:~��/��2����Ju�^�U�̞�4�O+qN���H�u����5�&|u,Q�����܉���K��;�Oo(a�b��eG�EQ���t]���}�]���M~M�u���vnbAgYTQ���4������8y��k�(ݰUÅ�?9~�5ٸכ�+!w
    �'��g�����e�*KG�k��C#|A.Džf��w+�����t���u�
    p+� �@�]8�B�wo��0�/����h��f�e[1�1n'�:../=����'��G��0|%�)�L�a�������]"�,�����q�Zrd9SC�4��\':�jU��2YUk������{}�ÙX�˴D{ak����[��+
    �n�5z��|�&8�M�¤��IrC\�ƴ؉pZ�	E�%f��I���Y}0�/g���k	]�*������V��r�!s�}�ެ�D�(F�Eyq�v�.�zz�|�)|gz
    C�n4g�T��Z�܀
    �G��]5
    �	�.�,K�)
    ��D��ie��Y���c��E�/�zbR^\���7d	\�}ti���6±�OOo�;^#�̍�S�H�
    ���	��L��F��lv�/�~�C�O�~��\���p�(����x���X�s΅|O�E��Ir���.���L2�T,W��i[�ø�h3N�o3{�NQ�@�@��a�P|���_�+�D>�TW���e��%x�ݝH�H]%��n5�B�c�t���� ?=!�d6����]�[�-S*,8���W�ⱐ˯�]NkU���)@�
    ���L`�9s�z'���PzD��_FQ^�+Y����Q�<�X�����EP��an�A$u�eZ�Qި|h�{���A�$�Ψ5N�<�U����VL�Z�]�J������wq�0���N�W����?[��*��Ć��E��È�HXI[O
    �>3!&�9lS�1\\����F�L�B0Ii^�p�3 ���X����#�U�]�z�7�1�
    �cw�PiB��76���a(=���h��ǐ����O
    H�25���
    p ��������M�q��k���ڂV0���t����&ϓ#%`�i��d|��\��v�\�I6�LQ�<kcV�&*��g�ofm�"�[�V*a�L.kl�Z໅�a��'�?����|�h��v�3w�n�o��^��`��Ƣ�?��~������4>?]c�W�
    �4����'��[3k������z�A2�E�����U��j�B�%�6+�5�鴄������>��n����c����F��K�?�I��	���:��X{5�xe��B��+��=a��<5F�_�7k�Tzd��)�A(��=�ħ�q
    (�.K���O��d�-�����`?�#wak��5�x��upP��fV9�ఙ�R��m��'5&��h�HzU/��N�0�+�ɉ D���'��(W�-��Xb1ܑ��pkc7¢?�9]!\$���^l���M���Q�/��"���CR7��6��A�F�_�|֞m�'��������|
    �m&V0M�[ٵ'�qy�׎00�s�Aam!��j,]��cY%���H�S^�:�ruI��o]���p%껄�	���
    gU��&��ѯډb��+���+�l��ŀ�8��g-p��U\���m��X;8t����l���!8g/^b|v;��M������'m��fB�S�3Z;��J��g�d5����������Zq�b�V�Ž��1�I���.��r��A��t��p�ձ!��#?��Q���]6�rFי�8�D��'��PyJ�2�-J�Xz�Gg�n(�şә]�����3��f�R��U���7$��M�
    aE��!"5'b\f7�*�À�گ��l���d�1�̛uc��- �R�
    3n�|o���6S��X�׈���"�4T����"TRcBܪ�^���z��ȫ�M�S��X�Z�<�X&Gt�z%�\	'�Z�l��^�ȵ�̹���`j�F����t��+�i�U����@o�y�9��W0a��,Xx�5��K�v��cڂ�����	��ʢ���.]��?���`�k��@B.
    M*>k(b��S�`�*��BsgЪ�K�Đ�Ÿ{F�r7��L,t�/���r0Sf7�~,�-�أ.̐y����ǡ�#�,P��l�$>f�@q��!��{T�M�SS�]��,K�����]Ts,�Q��-ZX�X���{O���Q3\��Y:�x.@=�xy0s�V&�,$��C�=ֈ	�G��:��M��]�.ufg$�k :FS(<9��W��v� '��耑�?H��)L<��]�C��pW��<�P��n��'�j����M1�B��F�-[�=J��,�|�
    ���.�T|x��M�Ol��W��S��:p��Hl�}�<��w�p���H�}�ݶ\�G�mco��GX�CEQ��)�{�G�m���[55�_bدJǐA��;4��g|��_D
    ��ԡ�Sƀ����a�E�1����|�_`�G9fPמ�X}叛���l0P�{h�y����G.Wi4+�g��4��c�ʩ�]yv�����*EW,f�H2e�r�#O�{��Ĵd������r�j�(Sd[�(���,�d�\U����f,���B�aT��X���'�~F"eu��Vwx���I�	���kl����w�D��1P
    E��zBᾫ�ֵ��1�}��۴�ԖQFkvחRj�[��p�������p#r:<���覻؞�-�Ѧ��6��&�]�Bh�p�-��Q"���qY���P�C��]��&R����-�	��`�J��7��pd������0�r��Ŝ���@S�/u`��_d9���^�������I�y�^���w��gs�>��.u�A�RZ%(R�n����O-��8_m��HBɛ` _
    ����V���hþ�HS(�`;c�Y?
    �y��Lwо�zLj�.+.�ڡ����� M�Vҩ��"%� �I�P���I�&�4�7�[�8�R�i����o����p}�n�C5��C�>���H �F2��-˞������o�#9w��wyy��'q�U�3��.�++.�
    �0ǁ�
    ��������=d �V*�fC��*��l]��kD�6>ssP�Q����_����}l�N"0�p�ڀ��~(���/SC�K���Z���'`�O}�s�ً����[wB�������h��W��zg�����Bm���R�����E�iQ�[�Ȟ��8��焤!�gX4Ӵ�W����E��I;��F��������ǝ0����}!�hr2��K�x��D��+
    L�舘�Zp�&@k31�?e�Q
    ܆.cIN��Z0�Ī��O��N��}	�������R�����[g���ł�����^�_v��X.�d���P=�d�ۘ��	m����euŔ������_b�y@��[��"	 ~�Y����5���׍Qt����(�Iq�$9��t�l����ʤh�Y�ſ��S)��U�(�#��Ҍk�8-P@&�]P0��E�c�hcK��?���5-e�$#Y�4�w��=k��b�"�'i$�ԟ�3�=w�cJ}pՏy�K�f�H6�����s��[3-�D��U:+_"l��X�}C�0�d(�%�UUܷ��o	�L��ϭ���r�Ʒ<�9��
    �^!����.���A�Fm� ��v�D�3[��F��0X��f��f��V���u۶<���]��x���x����;8ˀԋ��]UO�,�0E�_?�&�{���YH��t+Y\m��Y�k�Y�����@Ԏ	|�g9e�o�/-~�E����!H�L���0�[T1�Xf�R���d�r�.L��`�%,�y�ڈH@��1+�����T!,����I��X��5����b[cc�M��$Kfv��@��ޅD�l�q��=���qXZL�[��;N#��g��8�����A�3��@*�"��
    v�ӗo��F�����;�NB�:�2q���&�]��N�{\�.p�=B�9@�MCg6Oa�P>��_�?�@���d�_Z��w����ޘ�.��ϕ�Ε�2��z�[9/����!D��k
    ����Gsn��o�������B�E^gSPY7�x�Y�]�,����Nj�)*z�s��#�w�I̸��e�����qa���&�D���$\��Qx���0��+�T
    hF��ڝ����eL�r��{#�/����^tC`�@�"g+�ɴ<��%�i�>"#@��Ҥ4u��M����e
    i2����b�D�"�Y`�R>�eZ��4Z)|e����VFTR͉��du8���Olr"X�|����%�:�>��k�*���\�Bv�����u�c�>��H��w�F���H���Xb����Ņ�&b��3���<�ڸ3(Q���l}�j���ا�ͽQEa�<�Y0����G��YO��c?��������!����;i�fV��Ǜ�927'�Lʄ4}�/ޗ�?���#\�F�"S��>���c���2�_����,�#%{�p�2]85u��זi{�;��̳G*a��E�i?
    ԏ�m+\��9����.���%5�0E����G$Bo?�煉N��#�kfzs��%�%=���C\‰�[s����|H��B%�,h!�IG���i���e�K�X�Am�?z���@�NL7���~D#O*<w�!go��D���,�w£���<�nN��y:I�x�Gw*���R7,��m�>�Uwb�\�w�]2͢pٗ���"��0ѨC����'���3p4#�,�	b�����=VX�V��d�jBq����h�	ҿ�~̪�o�ށ;v�"���N��At��y<oJ#��\钌�"�;.)2o��L�7
    ��t���ώ��h��3<tL,��~߂��}���:a��_�-$h���� �V7����<IӖ�;ڣ.޴xFv���]�ҝ$_
    �n��6�z�����X'!��`
    �%�F��q�q&-
    � >����Sǎ�v���9�T,˯���[���ęz���ò�����ڻ_۸W��D�Hģ��|D>��;�?�*���f=֌��'��džF�K�hN�Yث������Uo�f��T��G�($�5
    	���/?�D��Q�?�ͻ|)�����U�'ሬ4Ѵ�6�UI�m��S��Z��R���7�ċ
    ��1�%L|��6���C�E� h�ؒ��#$���o��������hq��TH���t��L�����6�%Z4~~Gq�L���d,��;�̾��]��j8��(�$8F�S�ڳl����Xw��o�b
    o�B�ȃB�$���Q�0���=��?�z�r�W�#["����v���ݹ�wS��2^�2 <��8�1	�E���0~���>�(�#j����j���l����1sO��H�����F;8,�|����� �SD�%�\��Q���8j�ʀ��
    �t���CB��Saɏ�dH/+���ɥ$��2����l<�����Ĭ��'��8*��֊�����W�;�Ez6yl�x�!9
    hN��m.#��21�����#{�?SO�5�Lq���I�����܇�r��E�K톂��>��pJZ��S�P��+ޭ7~�_o�
    ø���|��z�}J_��}�$���r�,6�	>��!�,m�����t��Jr���Zw!j�QZݞ�7a4�pN�3e�ߕ$[��#p5n-�=_��F��`(�<������nVC҃���Z���e�t~�8��BR�&l�+	�e:�u��(W����!�7���$Y��V�\}$:o��pl���;ٽ��;�G��<�*�mC�X;,ۆ#=;�&P�/:���„-�$���l�g��|�G�V�2g��`&�974J�
    ~�y�z7w����D��Y[w�hn�q�!P��ZBQF�WVrZ��S��}�^<	{RzaAdҹߜu�t��M������{z���O/��2�7���&(ʸg4���E�f$eo�
    `
    є�?ӧ[Ͼ:�E6�����f�"�h� ���	b��D8扇����m/�R�/BD��_�D)�s��频\���`=l���ep}ꉣ)ߐ�G��L�6�L��ܺ���p@�����+<���		����nu����9���J¦�&�����c�I7aw�=闱i]��g��KMG0�m2���3�����*������`t��d�_����jK6���
    l$3���4��d»@�\�f���F%c��4��J{_�$�d݊.%@h�'[ �ͮ���'/��W�p����,����;��d�5��٫�S:�<`<�+A?����^���ڞ�*�������h��<�&�@j����k��mr�叫�>]z�Q�F��N��-2���W&�zӟRW6�,\ޥEԨI�Y�ֺw�]�u�qR�I␛��mr����b�TJ�%ZE�ɿ�Y��q��z��%�E��+�+?�C�)qK�3�Xf�\dJ�.����r�7���� ؾ�)Rs���x*��Dlw��X��b�
    4���X�8�
    �9o�O����+����2v݌͑3`m*!�	�OՓv
    wF�A#E��AȰݯ^��n�2��u&4�p��/��r�����B)���[����[SB����76r�����Sڴ�j�����د~{:d�_�_I��&yn�
    ���sk����MD7R3v&#�b1�o.�(q�c�7�!��@�4B�h�t� ����7/I��.���B��x����DB�����z���qn��3+W� L:`��R��@�.9��<)3Dݷ��AE&�[([PW�;��2��蜄�D��D���W	K��<����QS�����M~?c�fPؑ*:�p
    I�������d���Vw9nq,d��1	��_���8c5�F>��j��,4��ۖ�Z�b��}�\��䗜���CtE��r�<��9�a�j4�u-�qf�I��*�OE���~���sFÔgކ�} ����&&�JM�W*�*�aZgt���q��1\��5,[�:@���?H��"�h�����u��j���+c.����,"�v����N��et��H�+P-������N���a��'Ǭ�{��#N��o��qM��Ҧ���-��ZCt՞�k9�*0O<n���xX�����z��ls6)&���ͻ��+�N�vIu�E�"�E䵗$g@��
    ]t.	?0�{�A��	�)�쯪}���#v�U���D�XwM� )�uQ�V���2P���fk�6�`��&Cm�WJ��zb�[�u����Y�@��[�t�w����2Dy+Z�N"�]x&k��#�7jq��L�yk�fM�2�k�n��tV��Њ�1���du�b�j����j)4�w7��rDձ���%vKDŽo\�>�\��n����1w�+��F�����p��}ɩ �?Cp�“@�F]�vD���>ON�KF:М�t��.TĎ[
    �Q�?Lz�7��즁\�Z9�4/#hHx�Iܤk��$���4�B�qC�ć���ޡ��W�
    �ڼ��B��4Kl��.š����,r��9T
    ���m����
    �>ZY��I�T�~��%E�<��K
    
    	Lca�����H�
    i��pn0�D�Ք������R�7��Co\�~^iG���nBk��BF��� �����[>x\IH_Y
    5�[D�t$�#�u���*���Dtl�ΰ��7Rm��>F1�e�Y�Ywf��[���"S��/G:�g9���wr>���> ���IE�:Bt��šh�'���C�ϔ.g�d*�� �j�<��X�����TbS��i��XNפ��nZ_;:�V��`��
    |~�?����#�����c�Q��:�dl����m�I���:���f�,[��_��6�1��b�&1��{�
    �B�P�ٙ��s6�������w|{�_���ra�<�þ�
    Y�
    ���z��k������MHd�R肎�œxi�T
    ��i�a�Mi��!nɌdQ���o޷�4�$���菵�zH)�f���<*s�#���U_�4e��B	ȕ����a�&*�1br�����T9�B���U��n���fэ��;�0|���ILV��~�19mz��J��ۯ9¾p��fvf�\k�<�|&���J5Jتr�!V��C.�I͜�����} Bw�3b�p��`\���O�;wstl^�?A���M*&SY$L$��>�ks�X6Gb��?I�F�v���G�����ոP7H��rLŧR6�g�y~y�1Ϙ�����j��H�E	�-��K
    k����N���[�>h���Xh
    �4����H����E��lG|h#Ip�j��0ػNk_v�H�RIJ�:�#�kFE;
    � Mq��3Y�k�FP���e|wg�s�SKۀ�aS��V�zR����}F&��p��rfZJ�/���V�(ҽ"��Z�N{�d.d��Z.���7m��=p��ǒ�e~���;]����a��$�g͗F��e�k?��P�Ц�N�����,��s)*��A9��Míifm��3�R�[�\�֗���fF�W�9WQ]V��JWݷ�EѴf�ܓ
    %�%;3XT��Guv��2[ߟ��bV&���{P�ě�U�J�"�;���M�sο61v�����9?1�qk�
    ���D���Y�ۜ*`������QY�Ngɘ��V���\��<����9'��¡��]c>_�b��|B�7���zy[��y2�w�r!�[��)E�i�g'&�,�t��qp���N����$f��弡0(	K����P���@���B�(,!TKK/~za	9D����0yy���2�3�Z�2�Y�"7>q�)��?*B��w/?��n�\����Ne�8]�����"��2�ߒN�%<��&}�]?ن�k�ioS���I��<�x(U��[f"�H��C��5j?+�$-�g����;��W5u,K����t�??ӿ����W3��ш����eǧ���#�2I^��ڱZ�2��&�6n0"�b�|:��)|�h��[7Xt��y����{j��� ���
    �E����N�D�:Tz���
    ��_}jN��R 9t.ZoX����m`�#b>Y�t����J�C�
    ��[�N�Is�!bb�3�V��@�q��N��W�E|�L��e?���4G#�D�|��'#�k�P���7k&��;:�4�Fqj�υE���g�쪣V1��Y��.�QE�5�x�K:���{��^2�
    �q*U��
    г%{��1a���<7����
    ��{w�5�?�`��y���`�Vb��ioP��������E�<?/�x�c�t~&{�	9-�!���c��L
    e�|����P#DA#N\KFB�tj c��UN*J�E�#^>4�:>�V����D{�]���K�&��A���|�?f��BbLw����7*`_|�I�W����9<�-��J WP�ڢ]3קAo�����r�1<�?��O��|scf���R9�Q�[7}�1�/����7Ry�z�J���,�WF9*�dOe���$N¡��34�'����(K�(C�	Sw �[�j���I� ��A�?��`�+�����wN�?53�ҫ=���{�ɠ�B���q�11#3�%�;;����,wT���eɍ:pW��`������W�7�{��ޚ����Ҧ����!�D��0�e�]NMm�.����Pc���O֮ۖGIW	��V�7W穖���c�1��*";�md��������p�7�|�x\�W�d�iU�]��fm$JE���hs�����%a���M�����C���~�~!�[Ut0����S�߻C���;>�4�1ܕ��'��x���D�<�!����=>H�~J
    �Q뷒��@��Q������=4c��c��7l����l����){�p`�0ʂ�hl%��9�����*�5Ɗ{c��~��M�2ȼ�.A�hfqQ3�l�_+�d*H0۳iU����|鷝{y���N~���v�� ���h�†�\/[���fv+|OLSWb�q	�"�5 nT����tD��k^n'p0",`g+U	kt�쮮���
    �&��	{�8
    ����&���!�C{���,���D���}@ה:Y�I,䨤�\�1ܚ�͌6�ZR��"G=]�v�	�J�*�m����ӪNxƼ�kY>�
    KZ�6o�@ו�-t�$��i�]H��J'�;�a�,j��� l%H�T���A��y�D]@ۑ���i��
    |�#��o���k���I"�M��-��K�)�KAͩh�:B�0���EVb�g\;s��h��F���+��^���0���$[�|S/�_�k�T3_�|�?}k>�Xc�ZJ%�ۺ��;�9��`��`�C¾���΀�ѻƗ��L�n��'��/sݶf������V�_��|n=k�>�%K�H��'v����#%ǷN'U˿�b��z�+s��L�2��ن�)aY�	U���3�q/N	z�V�se�����tEIu�����*H�H��e�fl��Y�����O(b��ZMΗ���be(d�aDe��O��g��щ��%X�t�!`-(�;{м�񯗒)Z�=�߀t���EN�g���'/FѪ8��Eda����6�������Q��d�W��M&��i�����2@>Kܱh�fcj�|(Ƒ&�‰���#�����淘tR��f�R������۬a�9�s��k0�Ey'%���Υ_��D1�}�R�*J�"i�T����rs�v�ٷ@���4�We�,8��X-�i�.C�ʰq�"���`x�[�'4;��B�g�"����3��H���Nx��o��Qr.�'*Y�-X��	Zy0]������@j(f1�xB�+�/��>��M���M�l�Hӆ�0��I�8�d)Ga=>2:u�4��y��0E�j,��썟�pψ��WŽ�)�E��Ӂ�ק���~��ϔcP��9;/?��%��Ǝ�Baf���I
    eh�q'6o�Bx�S�m�JQʦ�N�!��DV
    �.���v�O��?؉#F5���2P@��UN�r������,��`�:�H9é����~��p�ts�}�'1�ul�W�a0kG�b��28@Mq�hӦ��/Z���M����K����y�(ߢ�:�X���9��Ig۪pCD~=e�ä��5�}���s!C���C4Q�2���X����q7n|��u��@���dc�~�v��9�}��a5`�II�&*K����y��[�Ǻ^(~2���`K!������0[CCU�o�&����i��pf�gD��;}=�ρy�}�3~G\�d_3�����8f��:.����fm��KG`K�|=,���rl�,�˸OǕ��t���t!�v�˳����mT����>(�@���r�a���X�q�<[�gx���l�{���p٬5ٓK慄{���e C�ŭW�-C2|�j�}�9.ۮP^�t}����� �}_3r�J�_���9�g�^�rrW��Q����'����p6-g���n�SX'�y�3@!�If}\Dܳ>�Eޏqu���9#�$}�"I
    ,j\����*7U�q�ʝypo�B���f����s؎cv	E
    K��׵3�"䀉��Q�hi���Q�&݇Q�"&���
    ��bj-qD��`�-���
    .7���D[+#�ν]����nvu�o���&�[G����\6��3�����I*m�OI����]3�&�FY�\�g	�k��K���md��(FO�N��F�}��Z�|���^��U��Rh��3�(C�����&�xX%�jB=N��Ď᜾��]E��X�j8d7��;2����j#!�*1�N������5�3�8x��gMWc䨳�[(`�f?�G��V�V�2�[	�lȞ��3(�{ny�����:�˝�վ6�E��+b҄#~�<	����z���qO-|k,��?A���R��zW]��7�0'Aѐғ��ݟu�+��_u�.�!�Z�췝���3$��H���
    [�z�������S��w�~�D��^����Vb�_2ÝYޯY�;�kؐ�K�Wd�%�E������sZ�M3._u���D�tJ�)�>���S������|�X����KJ��䊣
    �q@ף@���
    ���)k�TP"���,h��粸s}/[	��>�Aoʟ.6�~�k�7�W�OW��i�}p!�,��r�&x�SL�R�0eqY1�;m��}B����3��LoW����բ��99.��2�*|iD��D�Ჴӑ���V�]_�x��C��[�h"<<�Ԙ��.�}�{�Izy��{C�R�zt���k{*�d'������Lz&)�c�s
    �0��vT���@�Pc�-2�X)�mvU,��Y��l<�oX��j��Y��F��H�O�;^$@L�b�Q�,��(�Ra5�!�viȴ��>Ġ�PЉͷ>�*���P�%�4d����؈���?	�����}ⰧVx{Q��`!���3^5�z��L�0��IZ��8c�h��N���c8[s��:�f����UEa6[�=��E\c�M6�
    2���#�%� ��c)Dv�����o�
    |��3�t��q��22
    FH&�מ�-� H�����=�0�Km��&���S]��%3��&f�}ĉ�J��p�c~S�+l��َ��DZ
    ��]�
    ��o�U�rh��4��P•=8���]�-�n6���.b��)D+�Uw8�GN��:�yIY�q��zɢ��ՠq�"?8���G\i��)K1B�(�\?Ge�Qhڛ�h~��#�S�A
    ��"nL���[[v��P�m^�'Phb���4�PH&e��H3N�Ok	�	,�x�����E�v�p���ŅT��l�!����C��6���"3E�Y��j�S��M?��3�oG�
    #���_x�13�r�s8�9��d�J��@����9Y�o��p�ﳰ�m���U�p�g	��~AR��,+�BaU
    ƊE��i7����	��I/�T��|��MqH�E^��G�J�`i��2�8�%_Q�|�I�[����Ks���xϧ*�{�^E��@�I���n'$�����4[�a�_b���{pT�̶��;�mT�v��	p��.@� ��W�dI�7S-�K���bV��w��3���Ice�]�
    �5�F��]|�W�"��l���O�(r-��F�=C�5D�?-d�?E�"8�j[��A�l��Sz��?h�_���8��cR��ټ�p4�xH�]_��f6_��Xw6��
    S�:Cʪ"!=�y(��v:P?�vK���f�|�2[3��������菲�N��	h�\�:�bk~�n�P ,��P��� Ŀ�P��=�)�q����$/$dk���N�
    ��Y�rFd4QBt��
    c��q`5^ɼ+�0\N�""D��_�P�ً�d����Y�|3�l>��Yp,�@�Y���YS�ܹe/֟���tcWf���	ku}�aݔl K��u��8��cMݝʞ���iKHL�nޭ_�W�;�57�̀Q1�6���+4'���o!�# �ޛ�'�9=��$���q�#+�M̄�wT��c��#u{�+nC{����]���K�D�s�yl�Ӄ���1iMF���ٸ�Wg}������F?�����Ғ�j�`�z���M�t,\��d`!VG  GD�kV�B2)A}]W�!��C������o.]̹=E|�z�fVFudbi�%J0#vr�>5j_���{f�A�?`JB��	v�LUɻ�ϩӻ�p��
    ����R��]o�����'o�J�츁h�O�
    �=J�>�֝�Ll�?a���s��(�K���b�l�W����\I�ȄN�^<����N�>!"��d��'a����,� �~.�T~![Vo�	���F�Yšl��KT��!��W�Z{��OV2�#ؘ@x���ؽ����Y�bA�.���*`tzɚ2����5�jM��
    9nD:��5O8��#Z>P���b�qq8'��Z��*���n��$�ē�Gm5�L�tߣ_$a���C#8;ΧV��ȿ�:4�`�m8�J6,X�d8�N��M�$9�w�925��q�=X�Y3�o���Z���m:	9U�o�V�=-[S���>-�n׭����p��_ i�E�>oo�w V���h�<�}5m�f�
    �%��]{�|dP��y�)��[�=v�h�С�O�Ð$7�I^�+�'WϪ�-���E��ON�}A<� �B[x^��B6~�Bo�Y}&������J��bP#�cE�sj<;�3��k�i�˸�%= 42�hv��4��}�C��C~�}���^Qn
    ��	)�r MC�Vkҗ4��#5'nr�X�c�������L�=_�!�g���j�����<j_��a�[(	Qpt7���7B��Q�6~���89��v�X��7��cc�6	.�����B|�BR�X"1�'���N�</Ө�@�u�Ԩu=0 A�*���H7�L���x�����Q�^9����Zd�U:�=(�<��2�ֽ��|��V�J��V^�%5'�>�3q'�����<�9l�(YJP���M(�ǃ���i�0�/���Y�Sz��].<�l�_/M�w�Rtv+�^��)�w,۳�|�KkT�����]0q���,���zLfa9�a3�b��'N~Ho>OZ~e�3��Fk�����i�y��?&V�{�Q8P��)GQ0�n/�q��m>�p�zD�3MuQ��F�־[�J��{��FUu��o�~�x;lj1��G��lx�cX�k{Զt�O�޺��f������D|�Z�i蟭\_T��6!��7ߖn^5��/���1L����z����:�&��3�$	�p�D�����O����6��+�Irc�&��(����ြEr�eZB犸�TN
    i����M�R�+����˓�ld�p�=$��FK.*`�hP�(<�:��2m� RY�I��P����]Ydf��.>��*���e��s��	V�u�.d���1&ah3��!?��%r����vs�V~zs�+b�y\*�Lgg�_�k�!�������Zꅗڂ�0mN�6˥�&��V�fMjΆӪ�9��jQVJ}�M��e��Fl��jF��^���@�ζ��m��|�p�3��um��SR���*`����Z�,���V. ��qeė���r"l��}�yh45�bY��]�-���V���g��{1U����E��#>�?�r���Ͼ�?�=�4/�)f�}5"������뮞j�����,�a�Q��I��"����R�КwQ(�̢Y\vz�lI#�%�S�pT�-Y�FJ2lƠ]&�!�M$� ��>.�sɭ��h�SBgg̸\9�e��n��d�ɐ�Cߚ���ل܋�+�
    �! 9��~�I<!*��{K�{-&��D�D`s�u�����ߌ�i�Ɵ�r���\$����l�{P~
    RUơ)���("�)�z���%\ Š�l��vmW_5�t������<[���J٠g�(�zIt)�?��N<�j�œ#^�-N1�������N�&�aq�5������
    ���w�p#�j��X�A��}H�.�*Y����׆����<0E�{���{�oˌ�WC7Sei̿�b��j"�~����,`W�׎�+����-	�R_w�z���>��6ۻ�*��''T��@�;���-D����Y��h�2���
    �"vF)���3J:/���+C=A��I���k�p|��f��qKHV�|>D���E���`�?5���
    �����Q';�������;�k�q<��O���i�� �����'K͋5V2Α�D)ہ)�.��B�<P�5���Yn�i_q�M��}�O�,\t[����Z=n
    ���暻d���E�����wi4���^v�����F��tt!�>`
    �k��p�3ذb�*�`QB�GF�)-8�eK�7G�����\���*߆g#M�
    f��i=��݉f���>��.��t\�ڹv
    ܟ�p�W�AU�+�A���h멹H��!M=f؁!�Md �H��ۗ��a_�%< 6��ȯ|�����O�)�7pU6� ���>����^4��m�n|�!�k.�k����V��Eh��cy۹q�MYع8Wܓ�`i+[�c�R��)`��>c�!�n=�m�.���<ce2��u�=�.v���͹"[Oy��@S^t��{#�YVPZ8�+u�eP4�2y�
    ���X\!�nD�4g/�\�E��yc�S]���mdz�	~�������.����QҾt�F�88U�mq����tVW�𽕲�S��J�	cE�6�,����0��-�ᘝ���C�j�Aj`
    �L3|"��9f3���/�EyV��<���!zkC�
    4�n} Q_�*Xm�V�����ИF�����_{�i��r��t�'ௐF�]���J������!>�����~�qv&��h���wa5����-u��H\܃V���/b���[�Ə3�y/q����ew9"��*>���:�(JI`�)�ԉ=����DZ�����&��
    ��-�ZV@H�d���&�J�~�M���<�4������ܛT0��2ƽG/M���V�q���d��b�PvJ��{��N�YP]��/���	X�/*�j���H0w��m4�Jq v�����u��tw��ɒ|�����y�t�,��@tY��D�P��uY�s�<$�t��K�C^П�TRG��<4[�Nd�*}��_+t��ַb��D��}�Y}b�1n�:pgy�f�J�ջ�Ry!����q�Q����:�����/�>d�L��*,�Jx~���%�5�n���@���75~��j�`��"�S�v�a��+��=� ��{ �W}}F����n�7��|˃�]?�9�"���zC�Y�Ҟ��75��Eh�2��Li�t����39�n�-kV����
    i�����7��'�7�s������_�'��F���� �]�ѯq�%
    ��$��*+�����<��R{�t���Q��M�М^������d&�G1��;!s�6�:;��8zؽ��0wӚ�G���=ʜ1�G�v�X�BpJ�rU�b���C�$^��1��"�DۘrVu��Ԩ0&�C����殿'�]��Qz!ר�N��L�;Q�9i��5���G���k	��Sn
    ^J���2�m�68ݟ�X����<�@�>�L�J0��q�$��87�:�T�Ы��ڨ�l?~�'�_t,9�#}
    J��@�6Z��tbe��r�YlJ�瞪���um-�j�&){��ȏ!��S�J�WD��H�)�y�Rm*7̢)�."l��Ar{�Y#��!:�����m;Sfrp�b�37\��X�l�� ����j���"�L/���,�k���kbm��G�ٸn��`��Pq��:87�9Oc��;id�{��A���ܩY�f�[B�3ۢ}�l�}�"E�j�K{��F����ݢ����P��F�#�1��y̘j����y[!`s���F"�$�hs��]��H3hy†�����v�s����+�%~~wM�v����y��Y�#�R��/�d�n��;���ó05#�(*sM��ưz����AЙ��G�)cg@ݴ���?��k=�7#����l
    �⃆Y��5ׁŹ����}2S��7V�p`B�*vȓ��pU ��ZM��"�,��o?�~��.59�
    p^hץ$��e�`?�7S��l������T����n� �����;�od��`/{���Ŵ��3a�J�h^q�4�^�e�)V��N��l��̒Gb=������ҁ)�/9ӒZ&;Ol�~Md%�	k��i��
    �������~�,;T6���WJ���f��nl)����V5H�j�v�I.e���_'�j��l�(eQmq&��gmE_��~�Ӡ��SX�R��%0��ޠ�K<�{z$�p��d��?�UD?t��?���`%m�`�z~V�d���X�!{h��Y���Р���wP���2<egOyR�K�����j<�&C��A��#����^`��_
    R.��Ѽ#1|�������C���G������Zf�ϙ��԰C�5���� ��RO܎�����P4A7�HA�u��$�9fHو=!�=A�D��E��,����?�{L��2���L���ȳ�0���d�$���ͳ�"pf<L�s����`��tQ&�Tso�Rêa����n�馒a\���/����
    c
    �l*R�(�6x������x����Mu�j���g�*0�-ɧ-�>� =�bv%�#�}sT8_?��k�{�%A	U��N����?)>6�i�`����ؽo�a�0�bq��S��#�S_�M�L?}P����;��S�Ȩ��v:�@C�XSj�Z��f�|Dk�9m'���Y��0v8f���A0�_~��Ŋ:��Te�v�ܗS����.���b�_�E#��1��!��x
    Ϧ>O����
    oM.���,�Gމ-c|E�b��a��.�)���b:�&���	bǥzwy�jj��N$%��n��C��F�4h-͒�0/?��p�J�*�H�Vm�ܽ<Q��<�\�/�J��=��Fx��Hd�u��0�v�I�}�R ��,��╉(l\����`X�q3��w3/7�d�jZ���)7�D��g(/����2+C�����4�r���t8��)<Gh^�����"���V۩6����m��", +��J�=K|�϶'L�t#��ﱋ���}G�{8��������k�5���sJA��0[8w�c�-z�G�wЩD�Ӄ��>�	Gb�Bߕ�"��@
    �����>��?Aw�K����?پ�xq�Z���fM�s��
    ����B?[~@PQA�{׵����VNH��W����A�T�A��a��5�ԑ~P߉d��ݞ|U��u��is��)����Tb� ��ۦؔb^ 5�4��=�{�Z��K���R�/ICQWsebx����}���a�ɢY=e�l���k�l{�hj�h��^;��-���֓yۥ�6�cfG
    �,��1T��������~)�����L�-)�9X��ad�h,&��m�d����w�J��ט�
    ����QL�F2������56�]b�M��6���	(,r_>*䚺��q��������eM�Q&w���go�u�'����!<v!��N`�f6U6��=�Vm�8�
    �+���� �
    g�����
    W��qj�1�	 ��pf�x��#�)�7Ht�+�W�+�-0eN�2�i�u�^�.�=r�R��-k��+�Yx�Q��\�d����c;�M!~8m6d��}z�M�����7Y�7?V�M��I�B���Y����Q�0���%��Q���9`T���˔5}n�\�o�U��C��n�m����$��5����kvb�w?�r�6t$C0J��'n�Ƚ���+�v�{��&�`� �������n�7��� {�xH�W�D��6���M���i�����_��~���b/��7ƶ��L�w���7��=����������~C�3��-��q�3Q?��$W�A�Tʀ
    Hpu��L<#�j��tXR�'Q/&
    Y��I�a`Q����������xS7!���I�g��rF%��nW�tT<���6�rgm�I���=���ut�
    Z�|I��Dw�ɓ��m�^��)*z4���Pq���S%� Fuj�Y-7�Q=��coC�c;�,w;1Kg-w4elE����!F���U�[�a�>���8x����1��Hg�����Π�
    ¯Y��:�oPs�g�1|Ҟ���{�<Iy���=4�r��ړ������a�V/0;�p 8KP�	y�̡�?��Ѝ��w�H���~Wi�\�0�o䯥�����i�ZDP"�v&�m�ﴳ��w�#�vsY���XNv�;�@���}±.���h�b�ݦ����Ä�`,j�_{�}�
    �Bo�Yj��Z�T�@�5L5	�����b�E;{��1�Z64�a���Er���+����c�̨=1�:l�fd��CD����̬Zy�"1�s�����(���y��07n@?���1�pNn���5�F�K}X�"<�頧����e����ۥO�f)�R�y�,�EY�Q�?)x�?���0m��8�b��L �@����[��uզ7mz우ª�ׯγ�.���x��Sa؍�8��+���[\�C�����T~���8!��3�F�J����$^�ش�^0�vج_OU�a�OA�Dh��ѳ���O�P�ȧ�OT�s"+�>㏩�Ib��z$#*9�a��u��$���r=�h��5@2��;��h���(S�Ĕ���>NLS�W��U���6C/�8'^�*-t+9�$���W�L�<�[��p�6�:w4��m���h�s0�3�Р��d��/�lK��p��,*����1vt`�NG?kI���,I����R�Rك-b�>f�箥�b����M)A��X��������|q�	���r�U�͞3�+�E0½�6�@�&kk�%�0�H$�У��P��^�h���	u�h�1�M����v�$z�=8:;(����ç+]�fŨ絈ݞk���Ѳ�LH���&�1F���F�QZ�ر��L�}8U�y��K&�����;gҎB�������Ej*V�(��Wx0����l���ڛ���m��V*��1f�m�ɇ���د������t-˄y��T,�a��:�*����׊�����>f�YC�U�6߹I��%����|����Ш^�v�&�^�w]`FQO���{z���`��o����d'\�}c���f�{5)]�l��^J�S�6�sBCl5��<@�qsc�̇/�i��yX����,�L��f$}�S��kC��5]�Bh&�{�H�@W�et�-�1Z��.�ᒷZbEZ؜':��ex�ƣp�|�!|UDS5͑��B><`�6��
    �"F�&���U�)����k��$��m���}`�8�6����_�Zs�;ihܻ��ߙi�����ժ0�%xw9����`��%����e��ʃG;,��j+�[�2�)�8_+��__zO�YB�o���VM�]2Y+:Gh�;]�.�'�P�~�z8����>i!2��a���V�$�Ʉ5��['����I{��f����"�T�v�dް�
    (e����Ȏg7�n�:u�{���E����2RH��<����Ӳh��13�U�bv��;I瞳\�1үvw���LI��������!g�S�9�K��o��K`'�Y��_��A-��6A�L��{��ɤ%\l�z��IN��38��H����iVe��"4r��۬q���53�E�o
    �uN���o������������}��-�6,}��$���ck4��X<#��<�gTa4)yXq�J����\#x��j����YL��_�
    ��%B��2��y���ɡ���P�i�Z_��=��>��%)���X�Z��<��F��Njx�FԅOV�u����Ѡ���L�w�0P���-�G<N kS�*,�:��+�!�zqb\�8��ԨdU��R<�\�s�T*�\��F�
    ��i��8K}ֆ�U�&��lYs����1��"�]Ї@���t�L= �����i��nku�JϹ�K�(~�5�Dt����W���"�r��
    ��{�M���XID��&�����?ㆃ@��28q1�ԁ<v�������%F�M�b������b����X#��i+�5�<��Q�GU8�霒C_��"O�Cy�Sɿ�w�R�Drw¡���E�;?��Г~��r(�Z������?�/�����7��ވ��Ӡ���"����S�v>�P1�Q�<�U�n���Y�Ga�������܍�(���e���
    !�Z]�d��W�Ө�g��%�����zעV��#�ar��S� ���ƀ8���I;�c�Tus=�F*R�>���+S��Z�w��oN�f�'�rnj#l��r��j�G��,q�|�����S��^3��0m���ŐXU�NUA��YB��UI^E샊|��r,��
    5w��!���V����­kf琌�l�0q�<<,��`�}�eT�<�)�PUe@'�M�&v��fF�n�t���T;WS���^�����z�%E����YC�����Q�S�:a���;5�nnY"��A</�d_��\9({��.z{2�:P�J�I2��6�`<q~|J���8W�	�ІIHE��������T�J����"��	;@��Y�d�켥Ϙp�f��^��kY�˿��Vg���Nmb�2�gx7�MG�<]��<<T��ع���6�!�}h�+ѡ��оI9�ܬX@�n�	ir�zVӍ���0
    �Nø>;����'=�k�迡0���e���嶺-�]����i�Q��K�6I7$6�m�|������*�����JY���X��\V���)�Z����P��]�ݷS#߭�Q����'�\/Ko]��p�ĕo�yl9k����StM~�_�L�m!�$e�^GJUe��\j���Jr�kuv�MX��F�9���k���~V;ɑNH�[��ʗ"�`�P��,���loc�q�C�7\�r��/���G(^�&�3�awr�K������� ������ֿS{�
    mM�w.�g{�G�CLJ�=�#!�*�:2d
    n��	�3�����fs5���q�N�&�<[x�%&��\@o���߮�T��Ȉ@䫙�Gށ9W�c2hq�o(�gN���4%DJ���_�z�>��
    ��d�B��Wg�Fn������N��4�zt
    Mww��d	��	j�#�
    ؈Od������1�*�ʕ��E�k��]+���������~��}�
    Ed�#z|��u��6�	�>�F��_<
    ��A��wӉ6�K֛���qC'�b�ق0�!��� �rU��3�b�@�k�N�NۏqoT�ʲs�D6�k,�2D^��}��`C��)�Z�����q�G�,\��1����dͰ�E|�xC��/͖��$4ۇ�?��'�XI�бA�
    �_�Y�2�Vz��G����gi�4 �)�@o�4KdHi��U��XUX��y�Dj��ĢB�8�m��K@`i���o���p#��nVG�ԉ`� �B}��4�~�#j6��c��K���To�#�=H�c	�UI�fB��=ų����T�r�྆G�z�Zy�f�&Ď�R��:1�w˹�r1Fv
    �9���2���:�,c��b�"�)גw����n�m�#`얎QY�޲�Z΍�r���X?g]�g�������O�:c��k�����\���)|x�P�������H��F���ؘ=���3�F�_64z���J_Q08�k�B�_����/_#%��Va:��h�)5QA�������{��i�Y�Jéw��q�>;��N����w��
    -琪���U�Gs1`�LM��G?��k)�car(�^�C��^g�Ұ��*%��ب� ����g�:K�[ѐR�<�,�Jg�~d�-��  � �8��b_m��K�U��qT�v����cV�|L�Ť�O��W�D�o���`�
    ��t�w�.qvx��
    �P���I�]gS�m�_	Լ���'c#��U���}ސ8����	��ͨ��mG�mYrr�eB'br���gx~��0�-����*R;��Wd�+�M�Z-G'�u�z�֯O�>��-�k�c96L㨷0� rҡ�J��<���/��ny*/�ʽ?Ǣ�3i�� ������mB�_*C��������Ȥ��	OiMw�}cDK�����m�%��e��Cha�rj{�N���s��ʨ��.͡ˆF	�y-ش���5Uc�f�H��{6
    �� ɥA������{ٷ���8�B�?�5�CG��l
    �2���&^0�[��v,�Z���a%�zN���f�-�{s ���N]��< ��wMhk���u�U���#�h2�����'�E�X~l����ާF�
    uUO�Npzn�]jW��M�͈������U�m(����0$�C�k%m>�z���*��ڠ�Ki�$Z`1_rN3ؘF��g�5���)��������ڄQZĬ��7�������jY8y:�Ƕ�@4�{����U�V-���D�E�1sm�ȡ5��#��y��<Jޫ��f�	�ưU��>���]P�~�|�:�-����K�lߚ�U|<l�~�M�'x�A�����4S�t��.U�g)Ef>���SZ=n��`����L��R��|De�EA�1e���8J���(]�|5B`�r4�K�z�[kT&�`�;������R��y��U/��?A���p��L�P���������7�t�+;�ש���p��$�H��>[C�-r�c�R'q��q�~�{~�7hO;�j�.�!G�)[�ς��B?5Cә	�:Y�\����xA�YiQʨ7ӧ_�V�iSɳ��p�j�����O��� �[9��J�8�?�|4^��B�%���AH>��Q�b��<�`��e/2)3�"r��Sg.�`0�KEA��ʖ�F�������*�%��R��>:C����
    M�S�M�4s�tw�+��]�k��
    ޯ}��X��;2g�5��\&,I.�R���˟�!
    ��"!{�ƀ:�l�vSх0�8ERR%@���\v�����蟃�7�j��:�_"�Ӷ�	��@�0���6�{��**��&Pey+�-�v���Y����Y�X�����?��n$Y�����@�j���E0e��q������{ݬkb�j(�R�j��1��|=3{����T:��
    ��<_P�|A��Ö�ӧ4�v����?b�"�4?����ghj�I.���SXE��7VdHB_r�\ffB�����@\)m-s�>*�M����
    7�&�!����n㚁���6{�b�qY&�t��#2(���g����A�*_Ov!<X��k���}&�8��졠�ݦ$�m��zn��L�O#1	x�W��};/q�p��v�'����=\�9$�����+Ǭ�f2���a��J�C��;�d4�Y�VJ���86�&=�j>����cj):u���Ð�m����?��Ška	 f��5g�,t<�����%:h�8A�sHcC�7�Q1[�
    ��Z�;E��=���^�,���θ� V�P�%a��ũM��A��<|>��^����&_��W�n&)=%�Kn\"�'��W��"��>ҹ��]�ϸ_N�)�a�����z�[���եMg��6�|�s@�1������Nte�Hi��j�xF�&��H��֩~3��V/����h>���\\�>L�"��R�F.zgs$^/1ݐ'�x�T]�ظ�b�u@�!��el]�Qu9�E8��*�P��;0�
    @J�o�7g;gp�tr�1�yB*��#�6K�T����
    ���.Us��[����`�nڦ�H�+I>�4_8c/L��zVڄ
    rjh��Z�T��ֵTg+Y�\S�T���h��/�w
    � ),ߛ�"3������dU�0����Awl��X���dJ��I?8|������^���-��%g��B��W�T����</��
    ��
    �N�F�i9���9�@�a�����7Wr�*{�qx�(��C�O�Ri�S��j�py_�A›�v��ybj��Y:\Ҳ�Y�f�q���-����,'w��cyl+�7�_�{	X&;V�
    f�Nɹ,�V[dW��=o��s��	���	O�6I��L������iy�K�zp���t*�-Z9�&?+%m�d�=�zE��X�b׏}�G��x�k�B�?/}
    AE�����U1|�l"0�b6�+97�z<̕/�1"e0BS�ŝƂ�	���������k�f��B��d�������!�M�Z-�n����kgH��)\7a�f��kw���{a��po�
    ���P�ɏ� ���-/����Ip�y�%և߇	BJ_��Ru������%�����$�����������)j,��+�������Y9��X���y'�p	�o���n]8�#�����J�dy�غ���.����R�kƊ�B^�\�T�W@S���s��5<��C 4A�YޥޕI��z��r�Zۤ���%��;������/���f@x�n�kE&���؊0Bn"_L�4%ucx@Qatە{fK7%��/���X�2���� �N��
    \�r���݄B�c-X`�@��?nz�r8,/����c�`Er����xc�
    ���@�k�B�n�I���[P�I]�$��l`47��^_zL�}�g�0f�M�_֝C��M�]�h%�֋�1�v���R_����n��q�wO�|f�'5rYyVN��Qn�>�Y�E�\+&
    <S�@h1��d�y�*}����y��ۖ\E�7[�	V�5���zl�U��S�f��;�X�E�����`�ŠC�l�3�͠r�'ue�<U��PY���X�H*x(��K���L�쨊W��{�%K}���f��ˬ7o����wĩ�A�rWhu�,�W>��A���-�?�`��{� ����m��k��揼��#ڋ�TB��B����	7�'�2A6ܮX��H��l6�ɤ��;��Nj�t)���(b&i9���I��I���ӯ#�R�"�#�/h�A&�G���0s(��=H�	�^ƾ����4�B�v�,*gyA_91g��ʜ�3�?��_��$�80�z�3�)��b�bL���E����J��/^Y:�HԴ6_U�Ӑ9��&J�񜲘k��V2.MpY,A$	�uQZ�A�ٺF[=e6�d�X84X}MF7$�s�i�~����K�>ׅ���# �3�6��}��)UشW6�M~ �X����'�Ip��mg;�������^k��H����!cE��;�/5|��d��(�2���$�XF���s:�0�S�I��O˹�`��z�o�?��"Ds���ൿ)��7�9���yw�0J�ty��,�z�1��I��S*����ℇr�Ʉ2|��%�D��hJpZ��C��zV�i�-�
    4_&���1"�F,^���K6��*%�a�g�-��c�K��W��'�e��4�PT�]���?�߾~Sⓐ1X
    �ӖR���V)c��#t��.��K`�F��/����1�877a�����"�_
    �����K�i=�
    ���W�	Z�X��W-������(04��'�oaW3R�����E�خn������սV���;��J��	�����><\�s��ar��M¿��3`��>N�wM4I;�9�.�XM��:s.�)>�2��8'W�l[�ٕ�n<�ħY~��ro�s41A*�Z�t1%�,0��2�\[�olf/Ru�^�w�,vWD���a���w`6��N���'�H�<y��6�	w.��t��W^�H]eBq>�$�ci�u.?c��bOb]��p�z1y����!di�o؃bESJ+�s9���n���S"f��ѓ��r��J��_���k��|ȗM7u'5.���;��K�@��kǸ�('��/
    e_A��/�e����F�J�~��y�R�
    �0LA����~�q�[�9���(���+��$��S0�Y�~阭C���$�ݭ����@��z�39�B����$X�������W�hʪ�Q� y�m�)�..��YtFZ�����i/рp/3`�a5��0K����"OpH�����g�=����X��y������P8y��&#t���6���Ѹt�
    'G �qj�	bTX�O�T2&�X�%X`���~e���Z�.�z��5E?po��$3��te���z�e��Rn���=�!H�şst~n�����Gv��ǿ��²����"6@X��
    ��Y��=�K���H�(�F�����?=֔�-%����w��%��G��3���n���([Rl�N��]��y����}$
    }�M!�BT#�6��~�]5��(��C�W
    ԝ�n~���i=2��^%OMT/=;Z)��^J1�DnE�%v,���A�
    E�1�f���6�:��k�2�g��=R��[�^<}j���s�p�Un�'�tW<�)����A]��m�.	S���#��܍�u�Τ(һ$��\�߫��4��D.+$7+9Vٔ�њVm�ߦ�\�7,�:9`W�O�
    0�P�O�������?�6f�:L%�re�K7VU�5I.�yR�L0�j�L����n�nb6i��퉞�Cd�P����@ZbU)~�������Z�+(q�{�h����Uo2cHL�'�H���@JH�>�B���E��c�UbX�[~!�e�TG�	�����ѐUu<��f?��,6w0�@�*��uB;�lc;E�P�Hб��a�fa"��X���96
    ܴݦ-�.A����9Q�=j�Bw
    g�4�8����>�/���3{4�Dsj���P:�Eo�Z�+��'4�f����	�*V��q~NK�
    ��ߢZ�?+�=��:��o9���(>��ʪ��U��+';�u	���n����xq��&q���#�>���M�ZO�6K���˰�A��	��
    �4d�|>�0��+�q���^�Rf[[1����ItOBL�X!��t׍E+�[���,u3��S�j��я�(��)yѩ��/j ��H��)�H]�#<�ɸz��H_���ҌT`Dsl�h�)�w@��Z�|ð�?�t0�^����2܋��3ZN)))?���z��$��m���_أuu����Q�����t�ͪ���ŝKvL4uf�?�3�LJ"�lGD+x���؋�ispN�,Y�;7��'���$��é��C���ћ�O�0��Bb��g6�6-�8
    �Χ�I+0��"�6�Z_$�|�>�*�S:��;���F��U�Rf�{��-�pU	[�v��-x+@r��ެ�����i�k,Ą��5��7���Ǩ�.V^��X�<Ĺ>�+.`��Ss︳�N��Y9r�ڵ*G�Ù-Ñ�ۮJ���=_�Q���D��ʥN�~���Mt^���=Q1�#$e/W���g��w=�
    D�\ߗgǽQ���ĿQ ����º�~1*�d�Er�:l|����X[�H�:V��f�{	pWV������ĸ���΢; �zǝ��[Q�����
    2�!S���;���MZ�?�p�YKB2��Z%hʨ�8���%�!4�����:c��eC�G��=����
    1[#�@�r��X-h�;���ܓ�l"{E��S�Ѓ�fi����cd\]�?-�0�ׄy�V잉 ���������l�O���>��3��-ZY��z��3�x5�5��n;�I�p.pb�hj"��!��=~�LP:�y�<��G��^�+��V��Ö�I`D��B�R����
    η�P=���ռ��Ä�@|�UMwp˯-���5��Pw�,�V���T�}�6�<�k�ot���ٗ�B,��kR1�D0wΰzx:7���W�lҎV�snuC�%@�gE�¿�xd/~���y���&�Ӟm:�[X����$^�U�\�^I�r�xY}����Z��٢��T�2L�e��5]���.}�j� h1����Yۿ�b�l4�����\�e�p�cc�E�y�{9�z��$[Ӭ��լ��PO��t�çh�PpU�%d��.V�\�u”)�G��Z � �-,����*��oϏ�n	��V����J�J_�Is��BO�^9����Z"W�B\�	}�+�4=W�����$?l� b����=����xǥ)?�8�7���wޘ(��jv�U�6NIͅ�9 e�Q�3z
    �E��s�U*z��f���[��ue;c[�x��57�UP��Ґo���{O.�C
    �FL�2^��G�s��A�/(��ܡ"��f*�Z6ը�Hz-���R�ĝGzC0t��S�{�nY�1���v�( �?Lj�����b�l��P(rT�B�#�,���[4��sf^D��u��W�~��;fwa:�A�0$^P$y-��0�!.��F��$�l�
    ���N�l�w����r��@LD����
    <��v$�V�a��$	�
    ��F�����
    a$��T�k�y�3�A~f�K��e+����u;����F��,�9�B��p_|+�gh��W��KT�>K�?�~����!�ԓ
    G��wgY��ꬍ�U�P�H�?�����mA����X�M��c�ꄱt|sD�\MJ�Ԥge.�<hvLd0�ph��RsE����0��>h��-=ꈎ��C�ݰ���iw�܋//��v���g83�#�r��׻8���E��j!2J
    �YQ����^�b<��[�sZ�bs��ՋD��	A�U7����ED8MdO9�J�I�}��5do\��F��c�D+[����u7�D����N$��,���+�j+��j,Y�WW�.2�:��|,��q=�ӣ���·�/�ث8�\����G���0�z�p��g����S�6D�["�1iqB�w�V�&(ͼ���2UKgv�h���v$S|���2��+��ĸ ������<�YUZk��s�7�o�ɯT�V)�K��qG%�B���Y�"���k�ٖ��a�ea����Y2�t6�)e r�(_k���]����<���������H��7�
    I���Z�]����9&���\�@ޗն�9�)�yp��l�"#Ž��^�2qT��&)�C��WչKL�S����B��/��x(/�:���9�V������nzXy}�X-6X�\f�:
    sM���������]���4T
    ������`Sv+�8�:���::�#���^.ӭ�G*C
    gX�M?�_���`�W_�$�T`��Ps˥�Y�M��tr�~0����Q],:&�g����X2ۊKׯ����K��0o[��b�b��c�,��Ҹc��H�J{������	���bڊx{�������U��� dw�A�nH�@,�-+�.,��`6�:Cs���n<�Y3K�"͍�ʣ%)�]���eR
    2���rgPF.��>W��X��9�Ə6��#��k��oX~L-^<0(v�,����B/b�q‡`%ڵt�\��M��P�S�+!��M�������j)���.<[���P���J?�O�������*|�:Y��e_^,]��o�=��ae˃&L���l��4�����Yäi
    �\z^x<U� 閣���� ���Tk�
    T���@h��k����B���/��
    �x���D�bE�4Wk�Ԑ��j��Z��0g�Lۇ�S6�!�	}hk0�{`q��(r�h�\K��w��̟�þt�����آ�M������K�!�L���BW���4�'p^�)e뫽���icۏ ��|�<�Dv���	͎�S��fs:mK�ݸ�ы�f�kЙ��bf_��!�I�)ɚ�s��[�B�;(`Ovn'g����A�#`��m��+�xif=�I��r��"����b��[�zy^�NfdT������c�ߣ�����Kl�٣�?Gݰ�b�l��VӃ��(�W3,��F���S(��NT�QЈ�@�ǥ^�=䋵�*--9�%���W���2�o�����[�����g���]��^I�?�n���W��e����rI�&7�N���(�@a��F����M\قY�������~�c����(c�!L�Tް`��^Ѣ=��x�eod�Yu�{��~R��dd�2q�
    npU-�����'��W�Th>-3���d_~���L��>�L:(W��,��꭪��T��f���j��	���:[8��_C���Q����
    _��e����b��Z�+�#Ր����7{��搄��٠Ԇ�\��x��$b���w��[`���:m/�=��n<��
    0��X�����.��LY��%I��>҇���C�!��AY������{�-fծK�;�I
    ����i�?[q�
    ~��e(n,Gw�=�rX�C�ߤ���W�Ыn>ve��ɧ�Y��#*B-��Ѐ�ӈ�b#~���`��͒�k�o���o�u2��4<u���.f#��D$�<��R2�)�rD���^;B~�C�V���(eq��s��i�����ʧ��U#[cy�����K��jB�V�|���#;97��܉ַ�쌅��{_X��m��0���ӴG~0i��9�:�9�"�FI�ls�����,7Հ`UHw4��_����TE�{<�P
    �	���M-Q��ʁ?Dzf~���"C���o�?;>�1��1Q�>�Us�W{F�����#`_
    f
    7���i���o@���J2�&sU�N��ĹPH{�|��/�pe�����F�@n��֛���`�������L������ZK�4E���q��7�pY�>S�D��[y��x��,��%_F��v�c�hu�貵��$��u$O�4e�cn
    ����T����i��f�*AZ�!� �=���-:O؅I(���ӯ��P���bP�s�Z�\ы\`>���6���E�U�؃�J
    �aK����2��
    �֙�i�#��}��Y��61&b����gP�2�S�`���
    ���1����!�
    u,%`YbQ�T�����;��������RE;�o��7�<��Y[�A����q1���OOR���O(����Kv"�]o��2���9���v:�Q-(�����SƬ,:�."������3�F0cBj��j/ې�G�.�H��h�F��m� ��*<
    ��0i�ʑ�#$�P��O����oM�%ˈ���4��_�����x��$`
    l�C�Ã�R2~XLg_A���wuqN}H�4!�}X�D�P���h���+�-�K�?z�ӭ��n�/��M��ow�#17���b�](�ʋ��/����d���q�b�M�e}��SqO����ˬ�B2U���zk���t�59��l��E�˻d�J����ޯ/	V�fds>�5{��o)!��c�r�����u��u������Z�����;l{��ZHh"a����ۜ�)js*�*���������?���r��TM7K&�am���l/�
    
    ��t�I����j�@�	�zj/8��%�j��X���������y_#�q50C���<�K��|�����}�n�m�)Ɣo���ְ�F��Rñdw!�y +�Y�3����+,p�I��;.���
    ���F�	�-ط��Ӷ�ơR𑊈�ScK�OH��9�8����V��g$ �0��v�]_J�'8f4y���Ot�Ttm�K����1;����J2Ƞ��T�Q��m,�RlA����WZ�n��=�pic�Uf���M����}����k2��.p��D/��%0�v#�d/	���늪L�7=�7�#�AOrp��]���u�%��`mM2�a@����	�`M"3?I�b.��6K&�2H{4�	?U�J>��̚��O��?�vN��5ڭ����{�z�dA���/Xa��N�<�m��f��у�e�5^7���.�r����9�ݟf�3J�
    ������oQK���j�{�4������Q��3���$^ H{f�li�B�qS��?�3z"BH����6q���y�W��?��!-�1�
    3���{k�-�7�_ȧTF����iaZ���p�P-�p����5t8�C#੩&5m��y�<]�V��85�����;g�?����.)�yX��Ë����N�o��^��uPh�~�W]R��P��a<�D���"�yo�"��y+£�I�c
    �n̒g�>���u���Hj�?�"�-=����J�|�dK�-}��:�9���lY��%��p�.'�<�З�����\Nsc�N}1ͳ%��n�
    	��#�����?a��{����YJqo�o��n��t��-	�TG�d��j�D���q�����%�^[��GZA�䫒���@ێ$i��o!�5�M���yT.T;eKh��`>e��i_c��=x�:�D�g��N0<������{���$�f).���bhµ�"n5���5���҃���p�������)3��L�j���%��{���0��FL_��f(��C&-I(o�;J��o�Mx����%�D�;#���fT��RH��	u,�f��e'�%��p\ߢCh[¨GZ�9Y���Kkik��jH�L}���ԚUڰ�v�P(�q�9t��Gȭ1d��!�m
    �v��g��k��e��/�}��x��[�+��*��.9��Y��+C-'k��Ü�KS��ߓ��x�|��c����S���\��B���m��,!ո�P5y4<�u8��I*���qJ�����~���r�W���	_X)�y1�f�K�+#.�eqn��50`Q�j����T.�����O�j<�VB�&�4C˫�+�
    K�	UԎ����.K��u}Uޥ�\4K�t���3�������Z��ř�k��4���|�!�����L���H�zd'21�I��?����ty �C"�+��9�2�d�d�w�l��~%�ؿu�Q�F��x�uw�|�p��La>>�r0�8˪����R�d�?���n��ܛ|��
    �~�>�y2pKD!�Ѿ���Wg8���-�q�0}:�^ÝF�1����S4����.�'.)5�E���x_!ҋ���뺈v�o��cV��H�T����*���_te�p�BA�\��DW�@�=�#ױ=im�e�?��g��/��&mFW������P���������Vwҝ�qg����u	�W���²�cs����J�CI� �n�Cr�b��dǤ�ֻ�� �.��[���q�Q�oē��7�Ͽ�R_�$ɺ��|��К��mS��Zf̻a�<��@�U�tIo�Yٔ����Z��LЦ����)�n4�9ڝF	`�n�ؒK�Ieg?�\�*�ڪ�|�IJh�A=�}yj�"D��r���b?ߟmK�
    ����s��A�sS[ӎ@{�l���*��?�r��h��� ���ѫX��B���#��C�TΎ��������JZ#�GSU_j��}:�9Ӂi<Ǧ��x]B�W��uJ��K"l�R�G?'��N�E�8��h�p���Ȇ��c�rUlU0�F
    0�$Z��JI�}���s����'u-�r�ܼs�e1�ZR)~=}V
    �$q����$��0BX_z��yh m+,���!��~�H�ob���5����c,�Zus|�}$H7�l�y}v3M�uDY��F�
    �
    }���Aj+�$�Љ����l�|�&��x������T'h���\`������f?�btG@��<�~0�P3Ya��6_\f�"�u14L��Q1݇���.��� ��I�P�7v�RO��_�-��F]WR�by�}�6��dZrQ�[Ӂ�H���bh֙됙����_h�ի0�o��>4e��l��	(�3:��(���/�>I1�߼*���JH�f��`���r�#aĿ��D��PEY�L40u�׽"�% �~���2�ƈs��
    �J�g����)�P��#p|����%cP��n�
    �u
    �w)-w�)���0eM�:����%��G�/j��L�BX�\�q-����<�RQ���Z�{��S#�T.V�>�e@�#�+�?�2���
    ��0�_ͪ���_U�tVX0��;�� 6�Z��,܏�����ouvk��A����HH�O9o�R��͝�\�hd�>�,x�
    ��ڼ�ޭ{���6q���#pן.�}��Ѕ�~0��*2��4���ψ�w�����9���L�B$="�0��]G;�(�>�]���uXHG]g!u)9�+J��h�`H<s�t��\��5�ìB�7[�/䫼�0�8��[P�Q�������Q}R�BCh�����W��
    c���}!�v�[6u/}�"�MP�(���W����ғ%Q�8����B����`�l�����W~�'�k,�����j���q�d�?ϔ?�&$Q�Zй����t��}Y�ɴ�Y�j�A�-��3>�x���'h6��ˀ�'��I��3<䶤��q��dB�j�3��$T_XW�,?�������E�C�M��=4 N(>
    �����&`A�+a"�0�l��!�
    i].�қk�x)�����v)pJ���	�\ô#<�*[�
    	}~3�\���ˊz�=tE�A)gI=>��^����d �j	$j�S�j;Ӎ�����������3�,�r��qhY-��������v���1���R�o�+����V/���GEw��\��c�
    w�48���(Ag��uT�;#|䢼ِŨ=�ۜ�#�G���bz<��x��
    UXX`�j6�ZK	ưr�JP���q
    ���—�Z'���u;�Ϙ��G�yDK��Q���9����w>R�sk����jYZɺfG'mQ��&�٪x��������1]M�l�4�R�C}н��X	gj
    {�����Y?�(���nu,��g�L6 �)�%��Ch���E��b5)�<�T�x�4|��p��A�q�8���7�d��N�r]fԟ��3��V��B[�d��qsK�g��u��8�5T�6a�E�d��?!?*�fC�?Tx~c�O5uJ����K�s�<��H�SD�u���g���
    馊�
    �$
    2��7w�'c���\�W�`O��#����S�R
    b���fƞ��*�ݸ�a!�
    �5�i�M@t��g�0��a[�,���3�+.
    �v�#{&�A"	{��������~?0c�:l��i�לC�Ӣ��N9�â:B@
    �9e��A���#*Q�]�|��F���/G����B��U����֖d�Wo����)K��SGh�Rs�\��joa��?�B0���ӫ|HDFQ���7Q��ԕ���&P�
    ���_/��s�Y[$��-�`Zrk�s:�B�Ģ��=cg��ȭn"�,�d��}��>KS��`��|��}�?���T��
    r�S�~E���$wN�oh��WU��U(�d��ylo�=���������%�+|8�M�]�xUsMK��^t�)͑�M�+F��?
    h��A�7�?��
    C���y�	uKN������w^��q��t�	�p���]�h=
    ��}`�aڑǽ�6�)�<�u_n����9��C�X�)��UΟ������
    �� ��kN�c�������
    w�R]J�1ִ���]Y'P��`��\�]:-y�-`�C[�s��WI�JB��_��7S_��J�-4�%V}���"�����w���c���:2�����r.�R�T�okU�ּ@�.]QI}0SW Q���_��6�K�^����!e��vA���ҡ��+����D�̒�-B�.X��N�f�	�Ӣ�V���j)3�2��.�#�	�h��BL΍�bI��|��`���5u�Z?�I��9"���9�>�>�05��	HAJ�ן��)�ܤP^�>L��b>4�?ɏ/�zs'	��Ƙ����N7r=�=����cӧ�@�MNU�ֺ��+o��N
    M�k�$j��CG��{�m<��t�������=�?\�����QE��D����T�K�[o^�h'w	�ü�	v?�螯��G���1{*�-��6�^�S��߂��7s?�,��gN�����zP��OV��r=6{A��0������`�葖��
    ~y�:������ͥ��uqO� ґ<�A�B%�hȆ�
    �?�D��+�YHF'W5�X)��W�5�Zu���N��uN�%+z�b���#���w��{�+b���8��`͢�C���D�q�E�ݭ�J�d�jIK2��۰�KM�=HT[�W�w��5��f��-���1<L��)���=#M�h�]�ڂ��8ܻ�g4>37����1?Y1��I�i6�#hSt�I�u����?�����G�����O:K�u�B`�)�h�a�)�.��,1T3y_dE?&���Ew���)W-���O�\f֤�Ag���(6��2rԍ&����2�'*���jD䆒��p�9qE��e�VT�5�\г�г�SL���A���4�Ǹ`u�ZMA��T�K�z7^��3h��'����)DD����R"$;PD�&�i=�$E�v�,��\�:���9�6K���Fa�nG�V�A\hj09���zo�f��t1�!;�v)�C�|�1$� U�<��I��<$�5��֍`S�]dΈ>%�6�^|���{C��y�KT`}�Gm^������tȑ�Q�z��5N�<=M���n�Q�%ks� ��m!��4�����G�sU�W��ApI�4;� �˜�='���N���W���Oi�螫F�X�-�0IWIX�G����~�^�6H�"�c���n7z��U@ҖiV�����$
    �S���yF�ڢXA�+������T*hN5<��uq�_��Y<��jX�t�D;x��?-����x��Z ���Wb�g�� "7�5�� �&Os	MU��+�!�s3V�@f!K�,뫖ݫSiXt�K5W��H���)��q���J��0P���z�A�*�}���賨���������Hk���R*hl���&V4���ȑ��ȅ��7�:@?OY��^G�(��|!�e��� ���Ž8�SO�#����40����gç�j��23���Y�I���O�h���ȷ@g���^��`s��	ٞ<
    M��'5�ܼ񐜾��GJ�j�9p
    ����.玅`���������C��dCG���D*E:|@�<P�A�Q��e����\�<r\M*�>1��a$�Hв�<Յ�,��]
    �����LB��e����瀬s(�������W�a�x���������XC��'T
    b�<����^�Cq.��l�v�Ћ�7�!|'�<���`�D�g���-�T8I��!3&zd4ܢ�ԫg�D��3��m�
    �s��jL7��9[7�	?/�G�"<*`�~_ٔK&�%"W�b����B���*\�AI#Wtj���z��TůF��Z,�@����^V����������N�/Z�_W�m�\�o#)��r�2C��S�ąM���GwjӉ�V���,��B�D?	嚋�ht��]ˮ8��m����\W��Q9���Pv��&BY�� �5��r¼F������3u9�X��^1 Muyo5�S\��?!Lbx$L��q��#B�����]~!.��#?�2i�_�� ���sΥ�^��K��9��	���/W��2OrZ��E�̒��k��X�_aY���g��[JY��Ji�7��34*&�y��sd�H$�7`�n�.F��Lj�7��]���	��H9���?�e:e@]���L%��j��G��=2�����;f/�_&;���Гdb�le�Z��Z�u7�'��i�MK�o�GE�m�Ua�~m�����j�t�K�������g���ۦ"�7J�����E���y��x��DS��д������zμ�@���[���q�qõ�uPU������ s�Ry٢��c�ȯv%���?շ�QH���닏��%��=�bֆc7��c�D�N�Lh�,�2`1�V��;����o�z���k�
    PWvԡ��2bB��:渐Dc��e;i��z���_����d���;a�%����C(2ow��SmTʟZ��"�&c�������t�3�"he\o�$�+ )42�[
    ��kr��'��nl�R��q��@�� !ۆ�ls��®K�+���'ϛ��,1�0��O�0k��.v}�ܪ�}���}�I�G/�t/ТU�����,��F�0,��DJ�;�~ⵁ�@��7]��l��qP��R�r�?պ��9��B]����W[Umogj�F��V�}�͓އI�ZoE�1�Z��( ��cq("	(5�%W��&� ��oa�^ߵ�����,��i�����V�,7Kup��xN�����iK7�K�:ҩe�.w2S����2<�o�@^��F����k+)�:p�2��� i�U;J��Q
    ����sXY��_`�v��R�X�]J��.�EQ�6��ԡ/>���Dx����~�G��8� ��F&2�#���aX�/e�R�ʆ�$�ޢ,��{��
    �ii%?b�X#��k*r+/��;!+;
    n1=�����\���ƍ��D��m�r�3�e�+�N��ca�:�=
    �l/�/V��%
    �d��^q�Ǫ�!�'�u�� �F�Ob�$���8��S
    F<_¨���:.�_���p{RC��t�N��p��oC��Pir�4aԚI@�Z�6��������I�/ѧnV��z5%F*|iX��Dۏ��Y��,{�9�P����K�O�3Z�cv���`4�=�@�.Q�#0-�AH�*�=��,�ք0ݫwT��A��>�Nʖ��؍�ۤ�r L�9ܖ{o��K��"�s�dY��蜡-�Vn�E�����Y7T����/��8"�]g��J�g鵯�h�hb(���(��q���L$�j�/b�o�n��^�8�I���#'q��/�f�
    ���u�&/�*��a}[����Ge�m��a�TL� *c����i1Mq������4�� 2����[vN�,.����!�a�P�)�۾ǐ�0
    �����B7#�����*�u��x=2�4�5�Qb�Ȯɘ���G㼣E���%n����hK�Rs|��_��,�p��.���l�qڧ�"\&~2��sY���E�gfc @
    f����@\kK��!s�]�%uE�Q�0\�_{b���Gs,`!�K\��lCx�3c[,5�@TI�
    ���1r����Z���j����]��iIΘE�͹@&���`I!�f��R�!~c�i��c��&o-3���5p�!�@�!T������
    �0%���_�>�ל��$���H��A��}�i�)��7������;)��$
    ӡ��Yq��Xu]���L�_ZkWJ����j�s�Z���|�/��ypͥ7��k>+E��'����0�3A���x(�,�x\j�|^)uzB�a��Oa��*��\��l�#�9 ���h�&UoE��t:�Ѿf����ϔ_�l;p���y�^�y�ҊF��*�37���x�{>90�3!iVd�I�	F�|4$c��$�њ-��`v`3�x��@`t�&����zy����	(�拄��n�5Y��D�C�}�T<�|�S�i[�q�#dL��Y<t˿5�
    nw_�>r��A�)V����$��?Ւ�e��mR��È�s�l�i7��H
    =�	(�(9͋&��<l]����{�+Ho�����b����  a�Rx8ѱPcRϦ����4f����|hH$7>}��7�9�M@'�r;�T&�T9���\�6��zN�ZF0b�NMd�B��<���F7��W �*���Ta��r�~��11�f�ܜ]�^H�U�?�eHN"ϝ�j@�;�o�(��RGR��0aKc��,�Q�;2r�Łd��aD�o���H~YI$0�]M!��B����t[�NQ(�+�~J3;��E��#ٌ��9�^��C����(�*�,���/!S�]�f�f�.i�bzl��l��TW=�I�MMP
    ?���n�JHX���/�Ň�j����,�š��ϲ�r~���bPNyhaq�ЖAom�da�[:�����K#]!���=㉫R	�j��싼���>l�ڬ4_^��Fag�D^P���x��y��*|�ʎ@��}���p�ʕ���
    Mq���L���� �_WӾT���"W����	��=7\��{�o��!��hiyoQ�4�kh��q�/Rg�|�)Ϊ��%Fm9G��N<������(�m�G��}��1��VP�����!&�8���M^�������v:H�����kqJ�ҋ$�	r�OA�H�ݥ��Yrr��9��V�5y�$
    VWs1�?����|��d}°�jy	.�1}�<4�?�H�	ߊ�!3���`��$g���S�y�����6���ﹸ^�x��//�~��
    �;��:�(ݿ��$���P5'T�6/��1<�B�=� �(�+*fpR���29xn(?��]�_{�RGM̾�Bx�f��{O�y�m^�yv�2�_�����bS�zZ�*ea�T@�_N��}j���Q�;&L�o?�#�
    ����Z^�S�0,�v��1P�����e���۠p�|t�iʚ��֜d�
    -��.�;�g&L�)�a��n�2�4<`u��@z1"��s���
    N?~�pA�C��5�?dr�8
    ���s
    �0��tf\Z���վ0�H��m{®�r���y�H�@�㏵��@�5�6�Lf�+6s�l�ƾ⿵�n8&Y��gb�t)˸��=v=�>�Y�Qz�'(,���(���e�u�<�ܔe)S��AB<�$a���)xE|4��4��PH
    a��\$.�b����뷒���fD��d�=[{m�>�����,o-h�x�{�jv#����;�S*���kP̎�5F���W,f��R�|񩅟5h�v77�_$���s>2#��!�͍�(�b+YO���!\p� �Y�K�^b�2e�~[üP��6q[5,&:gK��7-��/�50K(T¤,��℅��^��t|�c)�r���
    Y����s��d����t��v��B���4ۅ@;���f��r�=�`n�o�u�ٹhq+#����g*��C��}eY&�U�WkΘ�*�S��<xł�o,�qN�Hs�5��
    9�&��͊�o�z��@T4W&�9�G���z��V}~xwKh�a'āGj`rׯ��\I�KmD���=������"��a�Z5�����5����VUS�t��Go�Gr;1�ǝ3�.�%Ź��m�]�	�Ez3e	԰�����X�j����V��ǛV��ͨ$�Rz�߹�A�КZ��Ҽl�?���I��1��ͣ��܌�謞O���a{����jP$��W/��0�.P�2M�[W�VP�[��D�
    =В��Rn���af<G-��$��a���4��>f�B<�BM�"�.m5�KK��cOb���ѽ�n���'O�^B�$J|�2M�n[A��tN�7	գ�٪|,�1��u��s
    �pұRC��C��y�eSH2g0�.�RN7N���O�U
    �����#��Oc�>�'DeP�l���n5��`�cL7�P��f��f �2.��|��C��!P���}��[�}����G�U$��K��*�7�����
    jt`�Չd��T���~j�(Έ�Uz��s}�����Ct�]���E�PI��� ��#ǖX-��]V��R%�Mq-j�2�l
    �����
    �kXV�eco�:�2s�j|�c�����I��E�x�lt!�!]��IWA������$�v^X�z��#N0���+�/�zj<��9b!�Aa��l�^`VTbR�*�L�����}�DCa�OpVԹ���w�k%?�L��j��sn�MT���*���h���9���]7���\b1���N��Z����j)�Q]:���ƕ��!�(%��@2[�|�#L@�������m��xo��?Gܗ�3�O&v��~Fg�f���h*�I4ź�lM��\�a�!q���!X�8M�6K����<JY\jb�p��������8�"qFܦx
    :(��? �F[20_�u�L�Ȥc���w��2�W���]���/}[ϰ��'�-��D�c)�Wc9�9\��bH�a1p���2�_v��G�p{�3��IA�O]�XO��w���q�x'�f�,5Pp޲�ۮ����p}�2��Gmz�:'����ȣ�ݴ�|H��ӿ��H��!�)��!�}M�E��+����*4Av��bP8Exyy�1,	��=�Ą�]��k�|�����T��a�.X(��/�G���y�E���������m�>]��˖���j������f�
    p�y�D��s����P��\�;��<�xr�^6�p�m���Blb����ΰO��r��ň$�8��̨�l��9�>�Ms{�H �v[�X6�k%�e|ܑB�@����5i��3��3_��g|7fx��9i������y�]�c.z��y_jK�<F{�>E3
    ]C���`<,w��}Ɓ]���i�r��"���aU�B�_p@J
    p�+/��
    ӑ}�o�1��DV'���!zKLt3��ei�j<�o������/�S��3<��;�;������f���y��F��	u�h_�&E�<�ߊ\�}b:�~�JU���}ZcA��_��K�¶�}��ϳ��3ja��s=��N�}R=5)y�իѪ�2bU�|��E}pӼ�����̭��s�_
    �ʈgs�=�ZF���gak^$��l�p�@��+.S�忤�H�X$�v��=���_�
    �ǭ0k��������Q�vy���0�t��������^�L7���Y�Yo3��I�!p��G��J������z�s�����i��ڼ�8�"%1K}T]�I�e��2�UJ�~5�^�t�ӝK$H8��yZ��PK�����x���7�����z�w��!_����ŐD���#im���ޜA�뢅���A���EV�LZo��x��VGː�����)nG;��H=��ޓ��g��@��{ߓ���<��U���` ^$~},��
    "r����s�
    ��k����Ӆ$b����I�@�!�^<'��ۂ߁ى.�F|��K��[sZ&�ҏ�d�N�:�Q�a��H蓳�[L00㼼t��Ѭ|tr���9['oĎ��C�>��刳^�xH'X�r���K��R���KJA�X�!6�x��c)m�Y��5��1<;��%HPkx$S�N%�>Ӹ5�nsc�� )}����t��,5�3-� /9�-���vْ���a:)�ߜi�O�<�dǛ�im	�I/Am��9(�1,5�W��!��>���������
    �d?���Z
    PX����u	Bq,�͝�;6�w~{�)�ȕ`�b�Ɉ,-�3�E6I�������P�?���PX���o�T�k�'5�����n���57[u-����P=����J�)l��.CR��6V��s�aգ�����46dD@�5X�o�5�v�9���.t��u'k�e6�D�x��� 
    �����3����;�fL�t1�^�pfۃ��\p�횿d�+��Cv��P'�MR��@��/�J��υ����ȳ��uz*�KM��]���q�dV���͡y^E�Z\V�*Y^ƴ��b2G��6œ��}w��E�D������:��xkH�������;�mS�I�D#����I�p��"=8st��	�V8HP�>J6�u|��
    -f��U��`�C+~��CH!�T�uK�௙��9��<Y�t��om_bNHb���v�0�����Lq
    ��y��+�Y�����}����
    �jʥ�ɵ��K�^��k?|�����82�s�-c���jF�y/�2)�;�ܷ�}��t���3�u�G�����3�S��ֈ%�$#BA����b�48;U��2��؋��)�&!,2����w�rX9	0�l�I
    �Y����i��d$�1��&�T��$ۇ�֪^���mkb���ɑ�Z�
    �V��݀k5M�@���uGO'��ŧަpi0D��V����{�D;���)��5�a!����\ۣ�iп��Gs�v""U�K�%���ź>�Q�
    s�]���������'�r��@�s�-YZ"�~'�=���*��B�7����ŒL�Tbr��/��YH�������bJ��v����*/:Ǐ�j�S�CZ��Z�a�PY���L�����4�b-����z_c���&��L�99�!��}/��S�9
    �TR~x+L�4v�Ic�Jm����ic�Mqep@�U�կ��Z����6li1ہ*��;ՠn4�c�[��P%ƻڧ��;��ɠ�)T���{��/n[-}�z��t	�u��&�ݓdk�A�#mσɃӷ��\;/�4���M|V��Bؘ!ԙ"���}hA	��H@
    >�����6��2Ujr��5l$9��7���yvX����#��S����:v9:y�n�U9��_}��dK~�wYW�]���#��짒y���+��"�ű85�B�R�b[�]/�$ A1v8Ͷ��4<"�;z�-�&d�P�m�g�M<zY (}W�H�L���B�z�̒����8DOŌq,\2[�j��>��c+12�|�$$��ʨi���¬��h�g:yQͳ�
    R����w�Vq�p�FMgb�s�]��5I#�s1��uUR��0�o�Ậ(8qь���-�Z���ks�U
    �Y�^�B(
    {#���m�H��YB���c��1r?`�i���T���Gޒ�#�2L	���`�6^ҁf���M_�U�0ϑ�=p�����4���rq�,���}�C
    =��E{���0g��6.AA �'`C����,�5~�%!J9$]ts�=��C2�VL�O�{ŭ�X����:0��P$�g�<��ƒS��-��B���`M8��T���0f+(��G�S}c�>ɍ'�������v���ӿ���x:�9�|�n�^�P����7T���\�^#4z�Z����[��g���%��.ǃҾ�2u��b�5>�td�5�2���0�㰖;��������ٿx�Ez���P�Ր0� ��E�S|exp����!p�R����A���v�'�ؽ�����G�����P��fh���:���On���y��������#�����K -R���{:���0S�Z��(��Ѐ�B
    ��n�9>ؕ$
    ��7��ȕ,�ˉz����Z(�Z�({g�(˅��������{�(B��<H�U��u�L�����O+�U���ʲ0u=�Љ�@l&e�k��OX���H.�t 5֕��RGk�PN��3q�1;�u�H8�ؐ�1$�	���]����4��긔�/�$���yGm	�"���Ծ�^�H�`��)��du���(�L�'1�e:�]oh���ޜSi�}���%����hbҚz0�/�'��ᘡN�.f7T��VS>���r��C?�J�u_-�
    �{S*�u���`_n����Si�db��
    OoW֥�rY���H�eۧ	rh�"�m�!u�*���w�iU�_D>WT���n��$�d'&��џ��VK|�;�Ff�g=�/
    ��Iǎ%1u20��<5�~���y�pq�,�L�o�{m��B��R�g�"S� ��Bw�mC<�	��1����;�+%�	B��S��/hf+�!�%YACd(j3�o�<��d�Z�G>�������e��E�g�r�S8��t��"ESR���O��B≖]���Ǎmu?�"Ֆ0��'?a8�w�z>�133%�&{�'/�XGވe{?��tڋ
    ̓�J��M�UM?�����s�T9�T��
    Um�|��0�c��M�	��t��7hqag��ʅ��B(����a�1z�2j�`�
    �d9�WC��NE�y��lh���Ќ�tB��/|�X���E��4����F	�&��k`2"���@�
    �u�����K�:�[���I����r%L@�A&v�Ľl����������j��x^�b^��K������69����{�S�X���0O9A���Lhl򶰷_��C�|�wi��kWoO�(|8����t�M�h^�Ǐ��8�-�%�U2�����,��f
    մl����i<�t)K��c���z�Kv�Ř��g=
    �7����韵�{Σ����Q�˷��9�+B2�"L5�%&�?S`#$��mY��`#D-,�d�l�"P
    /�p	
    �B'���:m��mV;�Z�<��mK0�[�N���
    Q�i�����N��K~�$E��HMD�� C;O1�8"���/��=`D�J%��6gB��d���e�4g�eCba}!�r�����0Mbc�kk���!��v�)E�
    ۡ�v�@�����T�߮sК��w���Чښ��q)N���&��Gœ�.�N�$ѫAЊ����P�&���2&�t<��n�'�=���/� �ޔ_O�>��K+���ۦ���E����N׿ֻ��N)r���y7e��l��<�KӃ�qc�����/�(YU�U@�
    u��.y
    LY9�\G�>NT��LPV��
    ��B���T�lප���)B�� #ò�|��p�@7e�QgGU��qCTl�Nb�px�y�E�3<f-�z�	�ȩu��
    2I]Q��j����+?�hM�]X��6�2ҩ�|����}&�4� s���H��m��Y�n����g����1�g���#��ܿH��v�@H5�=)����!�<kh%a�'�?�2=/2aC[���K� "�J����B-���xc�
    9�.�����y�o�=�o��%����z�+*A�&O��RB�^z�_�K�
    �Zm:ϧR�,	����VT�,��oXVm���Cc�NJ9PE@O����������[�7����ѿ�:���.0^�&_1Id8�٥�ͬóeT�*>�&�
    Rw����)Ya%E�&9�G\������c�K�#u܍p�_K��C��XV�hυ�
    �^u���c/��D�%����kc�M��(�`�Zٷ���v8RICX�J��:��¢�NQq,p���OQ
    �\@�"
    �P�5٬J��;�2Q�xu�
    T1=V�@���j�$M���$(�w�u��xR�UV��8	i(3�i�W��rk�+4̌dC��Un��p
    6�M�'��pf7�o����?T�sy
    �����Q;[a�i+R�\������0Z���������)q�w�%E�T+��hw�@�I��$���n' m�DN��4n21LT4�%�������8� �ޡ׽��|xI�
    ��Jt����ϔ�M6��x����^TT�	⎽�p?h��	s�7`o�|OP�J������ZI���hN/���:�w�4ՙ���Ӫ���8����N�0��İ����qp�N`��G��r�vK��}��$Û��0��V���O���g^�3;g�����Wx����F���kO���6���$$z>�*D���r�7��Qt�\��4h*�ھ��SNgi7b+FV8�U�
    R6U��<���� T���sh5�`9ߞ�O6��l�}*��_/��Oa��!)�j�72�
    �чә�����:oE#��K��s����x���)v��!�`�=,љF�ؾ���+���a@�k��O�͒�8��H)L����GlԜE�۶����CjV���/C1!�b&F���}Y��>���V[���|�lR{���q�pq�|&���I♭��m�F\E���G��YO\sE��9Wy�ɔ��_0E
    �e��i��nX���p��a���R'���9?
    zr�nxJ5��,W4��M�`c��Ŋ1aB�$c�q�ا����EI���	6���HV�,���	���*��aC��Y����7���(�!`8�̡�_��:~˾�h�q�E�W�P��p���xm�?.z�"�J��
    �M{�O�Yq�L}~z��1���jM�׀}}��f�;ŏ���DT)�BU>�~�eJ�Zѩ�vp)���5�M��R=�r�KLN��DlV'�S��a͝S��a���	5����F����"�����U��� 	�$-���Ϛ�ߋ�
    �H�h*�Wgğ����I[��|�tM��r(K��ɛ�H��]a�@�}
    ����w��k������3=�G��W����A�@���y(9�3V��NG��;�`�?^��ר��&��c)�<�EQn����bYX��VM��=��9��x�y�Z$����~�#�d;��*C��%�l�m����8GjF��0fV�xGQ8��jg;G�e@����-�`wh��p�z)l�{*��Н�<��.|�|��+QM׿�N�H]��������y{���dpW*���+���
    ��<ENÞ�rt<��gq#jo_׈���y1���A�d-�Z������RW|t����JR�IL��{Dy��iT2aʙ�`"������Z޼��2�-��Z��.�|l�~�\���0�s�c�N
    ��@9jx~�S��d�ȸW��+��ͫ
    Ph407#t�</W���	�C��	�u��r�����;^SO�o��{y�&�o�.���Β���֒��:�#RʬF��dm����5Ԍl�����}�q~>���Q�����O_��=��Y��MO���C�m�
    �����,d���Q$�5`2��_��!򄾝��_�c�\��b��[y�7.�	3��;��9C[����5�Ll���L̈�]�ߗ�qi���$����<�� 4�8"H��,u�iA�Z�!�L�P��{��~������N�W2���"�/��d�R>����e����b�2����׃��O]gט@	��b���R�Ԅx�FR6��]���� k~��/��Z� ;P�>Q�e�;�j.�eL'Q?V��[�za���,a���D+9��4`�P��K� G9�u# r�?O�n�@#�!{�������	�L�>��s*4�_�<,((�iH�	P�oB����r�\K����W�4��cHH����v^�VM��3���h
    �O�\}k{����w�I{��N�FS��#�GcMK�Η㛛�䀬]��;��Ib���ه��ՠ��.E���!Z`�z�?���'��ʄ���B]�3���1����wp��`C{D%y��=b_�����&sU�����([���|Px��$���0׌�}n�o��
    TrA���)("��7�a�&/���Z$�S�`��P�R`!n�^�a~�VJ��*�o�Wy�$.�W4�폻�����D �
    ���ΔS��nR<�u���ct�����͔�pU��;U�����%V*�=�!h0�pzR�y;���b!���~��TWVڮ�FT��Ik����tmӗ3+n� ؔ��$87Uf&�p��4����f�nP�"G��6��iҾt��@(�v��YR���V���b;?�g�b߶-Y��M�r:g�-Cv��t�X�Z�.���4%��1��q\���G1�M�Ԋq'�K6vP�+F*�l��΢���Յ�k�,8O^�R�
    ���k�h͝���\�(,����3�k��u�M'�S�x��$5�2
    	+���M1�b��Rߒ�a���1��f�y���$��̃�3E��a�����Ǧ�-���w�痳k��8_c������V�5�_x�i��9MT;�T���5�I��WgѴQ�L�J�Xy��,d$o���R-�z1ج���
    ȯYʼ�h�
    �V̷�rJt��ig�tȰa&�ް�'�)��n)9��"fz���+4�C1�|�l	QF'��g�t�����a��RCI�%q!�-\!��o@(�'<_,y��;Z����I����>�}�w�����/�6���vӟ�!�`Q��ƒ�W�����������k�%Z>|�S��q!V攙1ZN&|���������tj?�)�y��+�iN����ٙ+�`���O��1A�:�$e�b��_�T���;����Dg-G��J�L���
    ��������.�������K=#�q���x
    
    �Y�u�@�Cg�9!n3;�?~1h����(�f*�D��*�
    S��ZnaO-z_�
    ���)��E&d�-!���p�
    ќ�^}��
    ��9`FR�Ո���s�׶PY~Y�]C[Ԣ�8�Iq�B33�|u4\�j%�-��������� SP�=�,��[sNJkFZ	IV:�>Ll�S9jp�8��ǥ4uy1����9��i|����o� U�Ew@

    Please check below difference of information when i played it in elecard.

    Let me know if you need more information

    Regards,

    Hitesh

  • Code changes

    We added many parameters in OMX_VIDEO_PARAM_STATICPARAMS   tStaticParam parameters which is not used in case of default capture_encode demo.

    OMX_INIT_PARAM (&tStaticParam);
      tStaticParam.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
      eError = OMX_GetParameter (pHandle, OMX_TI_IndexParamVideoStaticParams,
                                 &tStaticParam);
      tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.profile = IH264_HIGH_PROFILE;
      tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.level = IH264_LEVEL_42;

      /* setting Interlace mode */
      tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.inputContentType = IVIDEO_INTERLACED;
      tStaticParam.videoStaticParams.h264EncStaticParams.bottomFieldIntra = 0;
      tStaticParam.videoStaticParams.h264EncStaticParams.interlaceCodingType = IH264_INTERLACE_FIELDONLY_ARF;

      tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.encodingPreset = XDM_DEFAULT;
      tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.rateControlPreset = IVIDEO_STORAGE;

      tStaticParam.videoStaticParams.h264EncStaticParams.intraCodingParams.lumaIntra4x4Enable = 0x1f;
      eError = OMX_SetParameter (pHandle, OMX_TI_IndexParamVideoStaticParams,
                                 &tStaticParam);

    Regards,

    Hitesh



  • Hi Ram,

    I tried with encode only demo and the behavior is the same. I think there is issue in some encoder input parameter configurations.

    Regards,

    Hitesh

  • Hi Hitesh,

    I just referred our stand-alone encoder settings. They set inputHeight to half of the actual height for interlaced coding.

    i,e, in your case, can you please try setting inputHeight = 288 and let me know your observation.

    Ram

  • Hi Ram,

    I tried that as well. With that the both the fields are overlapped to each other somewhere around in the middle of the video. And suspect the pitch or stride settings are some how wrong. What you say? I am trying with various combinations but unable to succeed yet.

    Does it working with your stand-alone encoder settings? If yes, please share those settings so that i can compare those with mine to make it working.

    Thanks for prompt response.

    --

    Regards,

    Hitesh

  • Hi Hitesh,

    I checked with encoder team on the noisy input you shared. They asked to set inputheight = height of one field and datalayout and secondFieldOffsetHeight/width

    Can you please refer attached image(This info is available in H264encoder userguide) on datalayout and secondFieldOffsetHeight/width settings.

  • Hi Ram,

    I saw these things also available in HDVICP2 encoder user guide but I don't see any interface through which i can set those encoder parameters using EzSDK open max APIs. Can you help me how can i set these parameters?

    I saw these parameters are there in IVIDEO2_BufDesc structure but i didn't know how to use. I got this structure declared in "omx_05_02_00_46/src/ti/omx/interfaces/openMaxv11/ih264enc.h" but demo doesn't show the use case of the same. Even http://e2e.ti.com/support/dsp/davinci_digital_media_processors/f/717/p/239779/898227.aspx is unanswered for similar kind of access of parameter IH264ENC_ProcessParams.

    Is there any document that show case that how to use this kind of parameters. Can anyone from TI answers me about this?

    --

    Regards,

    Hitesh

  • Hello Ram/Feroz,

    Any update on this post? We are suck with this in application development, Please help us to get resolved from this. At least provide me those stand-alone parameters so that i can compare them with my parameters.

    I suspect something goes wrong in encoded buffer format which we received by dividing video input height by 2.

    Regards,

    Hitesh

  • Hi Hitesh,

    I have listed the parameters used in stand-alone encoder for 576i . Some extended parameters may not be relevant for you.

    Can you please check this? If possible please provide initial 4-5 frames of your YUV input.

    InputFile = "./yuv/parkrun_i352x576_30fps_420pl_150fr_SP.yuv"
    EncodedFile = "./264/657_parkrun_i352x576_30fps_420pl_150fr.264"
    ReferenceFile = "rec.yuv"
    EncodingPreset = 3
    RateControlPreset = 5
    MaxInterFrameInterval = 16
    Profile = 100
    Level = 22
    NumInputUnits = 150
    MaxWidth = 352
    MaxHeight = 288
    DataEndianess = 1
    InputChromaFormat = 9
    InputContentType = 1
    OperatingMode = 1
    InputDataMode = 3
    OutputDataMode = 3
    NumOutputUnits = 1
    dataLayout = 0
    inputWidth = 352
    inputHeight = 288
    refFrameRate = 30000
    targetFrameRate = 25000
    targetBitRate = 4000000
    maxBitRate = -1
    minBitRate = -1
    intraFrameInterval = 1
    interFrameInterval = 1
    generateHeader = 0
    captureWidth = 352
    captureHeight = 288
    captureTopLeftx = 0
    captureTopLefty = 0
    forceFrame = -1
    mvAccuracy = 2
    sampleAspectRatioHeight = 1
    sampleAspectRatioWidth = 1
    ignoreOutbufSizeFlag = 1
    interCodingPreset = 1
    searchRangeHorP = 144
    searchRangeVerP = 32
    searchRangeHorB = 144
    searchRangeVerB = 16
    interCodingBias = 1
    skipMVCodingBias = 0
    minBlockSizeP = 0
    minBlockSizeB = 0
    searchCenter_x = 12
    searchCenter_y = 56
    intraCodingPreset = 1
    lumaIntra4x4Enable = 309
    lumaIntra8x8Enable = 320
    lumaIntra16x16Enable = 4
    chromaIntra8x8Enable = 4
    intraRefreshMethod = 1
    intraRefreshRate = 352
    constrainedIntraPredEnable = 1
    chromaComponentEnable = 1
    loopfilterPreset = 1
    loopfilterDisableIDC = 2
    filterOffsetA = 12
    filterOffsetB = -2
    entropyCodingMode = 1
    sliceCodingPreset = 1
    sliceMode = 1
    sliceUnitSize = 15
    streamFormat = 0
    sliceStartOffset0 = 0
    sliceStartOffset1 = 0
    sliceStartOffset2 = 0
    fmoCodingPreset = 0
    numSliceGroups = 0
    sliceGroupMapType = 0
    sliceGroupChangeDirectionFlag = 0
    sliceGroupChangeRate = 0
    sliceGroupChangeCycle = 0
    #sliceGroupParams = 0
    rateControlParamPreset = 1
    scalingMatrixPreset = 2
    qpI = -1
    qpP = -1
    qpOffsetB = 0
    rcAlgo = 0
    qpMaxI = 10
    qpMinI = 0
    qpMaxP = 11
    qpMinP = 0
    qpMaxB = 10
    qpMinB = 0
    minPicSizeRatioI = 0
    maxPicSizeRatioI = 0
    minPicSizeRatioP = 0
    maxPicSizeRatioP = 0
    minPicSizeRatioB = 0
    maxPicSizeRatioB = 0
    allowFrameSkip = 0
    removeExpensiveCoeff = 0
    chromaQPIndexOffset = 0
    IPQualityFactor = 0
    initialBufferLevel = 4000000
    HRDBufferSize = 4000000
    naluControlPreset = 1
    naluPresentMaskStartOfSequence = 8672
    naluPresentMaskIDRPicture = 8544
    naluPresentMaskIntraPicture = 8672
    naluPresentMaskNonIntraPicture = 0
    naluPresentMaskEndOfSequence = 3072
    vuiCodingPreset = 1
    aspectRatioInfoPresentFlag = 1
    aspectRatioIdc = 1
    videoSignalTypePresentFlag = 1
    videoFormat = 0
    videoFullRangeFlag = 1
    timingInfoPresentFlag = 0
    gopStructure = 0
    IDRFrameInterval = 3
    bottomFieldIntra = 0
    transformBlockSize = 2
    log2MaxFNumMinus4 = 5
    picOrderCountType = 1
    topFieldFirstFlag = 1
    interlaceCodingType = 2
    numProcessCall = 30
    H264UserDataSEI = 0
    forceIDRPeriod = 26
    forceSKIPPeriod = 25
    GmvDataInSei = 1
    stereoInfoPreset = 2
    topFieldIsLeftViewFlag = 0
    viewSelfContainedFlag = 0
    enablePartialFrameSkip = 1

    Thanks

    Ramprasad

  • Hi Ram/Feroz,

    We managed to make it working with below changes:

    1) We edit the VENC component of EzSDK (Overlay code which we received from you in past) where dataLayout was set as "IVIDEO_FIELD_SEPARATED" and we changed it to "IVIDEO_FIELD_INTERLEAVED".

    2) Divided Encoder input height by 2

    3) Setting inputContentType = IVIDEO_INTERLACED in videnc2Params

    Thanks Ram and Feroz for giving me continuous input from your side.

    Regards,

    Hitesh

  • Hello Feroz/Ram,

    We are still facing some issue (may be some minor mistake). With the working interlaced encoded file, the video is jumping vertically. I have attached the sample here 1680.dump_h264.txt (Rename the file to txt as h264 extension is not supported in upload functionality).

    Can you tell me why it is happening?

    Is there any encoder configuration which i missed out to configure and as result i am getting such jumps?

    Waiting for a quick response.

    --

    Regards,

    Hitesh

  • Hi Hitesh,

    I had a look into the stream you attached. Are you changing anything with SetConfig for every processing?

    it looks like initially everything is proper and vertical jumping increase gradually.

    For what cases it was working properly?

    Ram

  • Hi Ram,

    Thanks for a prompt reply. Please find attached Encoder_Settings.txt file that contains my encoder settings

    1680.Encoder_Settings.txt
    OMX_ERRORTYPE IL_ClientSetEncodeParams (IL_Client *pAppData)
    {
      OMX_ERRORTYPE eError = OMX_ErrorUndefined;
      OMX_HANDLETYPE pHandle = NULL;
      OMX_VIDEO_PARAM_PROFILELEVELTYPE tProfileLevel;
      OMX_VIDEO_PARAM_ENCODER_PRESETTYPE tEncoderPreset;
      OMX_VIDEO_PARAM_BITRATETYPE tVidEncBitRate;
      OMX_VIDEO_PARAM_PORTFORMATTYPE tVideoParams;
      OMX_PARAM_PORTDEFINITIONTYPE tPortDef;
      OMX_VIDEO_CONFIG_DYNAMICPARAMS tDynParams;
      OMX_VIDEO_PARAM_STATICPARAMS   tStaticParam;
      OMX_VIDEO_PARAM_AVCTYPE tAVCParams;
    
      pHandle = pAppData->pEncHandle;
    
      /* Number of frames to be encoded */
      pAppData->encILComp->numFrames = pAppData->evmAppInParams->noFrames;
    
    
      OMX_INIT_PARAM (&tPortDef);
      /* Get the Number of Ports */
    
      tPortDef.nPortIndex = OMX_VIDENC_INPUT_PORT;
      eError = OMX_GetParameter (pHandle, OMX_IndexParamPortDefinition, &tPortDef);
      /* set the actual number of buffers required */
      tPortDef.nBufferCountActual = IL_CLIENT_ENC_INPUT_BUFFER_COUNT;
      /* set the video format settings */
      tPortDef.format.video.nFrameWidth = pAppData->nWidth;
      tPortDef.format.video.nStride = pAppData->nWidth;
      tPortDef.format.video.nFrameHeight = pAppData->nHeight;
      if(pAppData->nScanFormat && !pAppData->evmAppInParams->deiEnable) {
        tPortDef.format.video.nFrameHeight = pAppData->nHeight >> 1;
      }
      tPortDef.format.video.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
      /* settings for OMX_IndexParamVideoPortFormat */
      tPortDef.nBufferSize = (pAppData->nWidth * pAppData->nHeight * 3) >> 1;
    
      eError = OMX_SetParameter (pHandle, OMX_IndexParamPortDefinition, &tPortDef);
      if (eError != OMX_ErrorNone)
      {
        ERROR ("failed to set Encode OMX_IndexParamPortDefinition for input \n");
      }
    
      OMX_INIT_PARAM (&tPortDef);
    
      tPortDef.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
      eError = OMX_GetParameter (pHandle, OMX_IndexParamPortDefinition, &tPortDef);
    
      /* settings for OMX_IndexParamPortDefinition */
      /* set the actual number of buffers required */
      tPortDef.nBufferCountActual = IL_CLIENT_ENC_OUTPUT_BUFFER_COUNT;
      tPortDef.format.video.nFrameWidth = pAppData->nWidth;
      tPortDef.format.video.nFrameHeight =  pAppData->nHeight;
      tPortDef.format.video.eCompressionFormat = OMX_VIDEO_CodingAVC;
      tPortDef.format.video.xFramerate = (pAppData->evmAppInParams->frameRate << 16);
      tVideoParams.xFramerate = (pAppData->evmAppInParams->frameRate << 16);
      tPortDef.format.video.nBitrate = pAppData->evmAppInParams->videoBitRate;
    
      /* settings for OMX_IndexParamVideoPortFormat */
      eError = OMX_SetParameter (pHandle, OMX_IndexParamPortDefinition, &tPortDef);
      if (eError != OMX_ErrorNone)
      {
        ERROR ("failed to set Encode OMX_IndexParamPortDefinition for output \n");
      }
    
      /* For changing bit rate following index can be used */
      OMX_INIT_PARAM (&tVidEncBitRate);
    
      tVidEncBitRate.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
      eError = OMX_GetParameter (pHandle, OMX_IndexParamVideoBitrate,
                                 &tVidEncBitRate);
    
      tVidEncBitRate.eControlRate = OMX_Video_ControlRateVariable;
      tVidEncBitRate.nTargetBitrate = pAppData->evmAppInParams->videoBitRate;
      eError = OMX_SetParameter (pHandle, OMX_IndexParamVideoBitrate,
                                 &tVidEncBitRate);
    
      if (eError != OMX_ErrorNone)
      {
        ERROR ("failed to set Encode bitrate \n");
      }
      /* Set the profile and level for H264 */
      OMX_INIT_PARAM (&tProfileLevel);
      tProfileLevel.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
    
      eError = OMX_GetParameter (pHandle, OMX_IndexParamVideoProfileLevelCurrent,
                                 &tProfileLevel);
      /* set as high profile with 4.2 level */
      tProfileLevel.eProfile = OMX_VIDEO_AVCProfileHigh;
      tProfileLevel.eLevel = OMX_VIDEO_AVCLevel42;
    
      eError = OMX_SetParameter (pHandle, OMX_IndexParamVideoProfileLevelCurrent,
                                 &tProfileLevel);
      if (eError != OMX_ErrorNone)
        ERROR ("failed to set encoder pfofile \n");
    
      /* Encoder Preset settings */
      OMX_INIT_PARAM (&tEncoderPreset);
      tEncoderPreset.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
      eError = OMX_GetParameter (pHandle, OMX_TI_IndexParamVideoEncoderPreset,
                                 &tEncoderPreset);
    
      tEncoderPreset.eEncodingModePreset = OMX_Video_Enc_Default;
      tEncoderPreset.eRateControlPreset = OMX_Video_RC_None;
    
      eError = OMX_SetParameter (pHandle, OMX_TI_IndexParamVideoEncoderPreset,
                                 &tEncoderPreset);
      if (eError != OMX_ErrorNone)
      {
        ERROR ("failed to Encoder Preset \n");
      }
    
      OMX_INIT_PARAM (&tDynParams);
    
      tDynParams.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
    
      eError = OMX_GetParameter (pHandle, OMX_TI_IndexParamVideoDynamicParams,
                                 &tDynParams);
    
      /* setting I frame interval */
      tDynParams.videoDynamicParams.h264EncDynamicParams.videnc2DynamicParams.targetFrameRate = pAppData->evmAppInParams->frameRate * 1000;
      tDynParams.videoDynamicParams.h264EncDynamicParams.videnc2DynamicParams.targetBitRate = pAppData->evmAppInParams->videoBitRate;
    
      /* EI: Rate-control settings done with Enocoder's Static parameters are not taking effect.
             So we set rate control parameters in Encoder's Dynamic parameters. */
      tDynParams.videoDynamicParams.h264EncDynamicParams.rateControlParams.rateControlParamsPreset
                                                = pAppData->evmAppInParams->rateControlParamsPreset;
      tDynParams.videoDynamicParams.h264EncDynamicParams.rateControlParams.rcAlgo
                                                = pAppData->evmAppInParams->rcAlgo;
      tDynParams.videoDynamicParams.h264EncDynamicParams.rateControlParams.qpI
                                                = pAppData->evmAppInParams->qpI;
      tDynParams.videoDynamicParams.h264EncDynamicParams.rateControlParams.qpP
                                                = pAppData->evmAppInParams->qpP;
      tDynParams.videoDynamicParams.h264EncDynamicParams.rateControlParams.qpOffsetB
                                                = pAppData->evmAppInParams->qpOffsetB;
      tDynParams.videoDynamicParams.h264EncDynamicParams.rateControlParams.qpMaxI
                                                = pAppData->evmAppInParams->qpMaxI;
      tDynParams.videoDynamicParams.h264EncDynamicParams.rateControlParams.qpMaxP
                                                = pAppData->evmAppInParams->qpMaxP;
      tDynParams.videoDynamicParams.h264EncDynamicParams.rateControlParams.qpMaxB
                                                = pAppData->evmAppInParams->qpMaxB;
      tDynParams.videoDynamicParams.h264EncDynamicParams.rateControlParams.allowFrameSkip
                                                = pAppData->evmAppInParams->allowFrameSkip;
      tDynParams.videoDynamicParams.h264EncDynamicParams.rateControlParams.HRDBufferSize
                                                = pAppData->evmAppInParams->videoBitRate * 2;
    
      /* EI: As like rate-control, it may happened that changing inter-coding parameters may not effect
             with static parameter's structure, so we set these params as well with Dynamic structure. */
      tDynParams.videoDynamicParams.h264EncDynamicParams.interCodingParams.interCodingPreset
                                                = pAppData->evmAppInParams->interCodingPreset;
      tDynParams.videoDynamicParams.h264EncDynamicParams.interCodingParams.searchRangeHorP
                                                = pAppData->evmAppInParams->searchRangeHorP;
      tDynParams.videoDynamicParams.h264EncDynamicParams.interCodingParams.searchRangeVerP
                                                = pAppData->evmAppInParams->searchRangeVerP;
      tDynParams.videoDynamicParams.h264EncDynamicParams.interCodingParams.searchRangeHorB
                                                = pAppData->evmAppInParams->searchRangeHorB;
      tDynParams.videoDynamicParams.h264EncDynamicParams.interCodingParams.searchRangeVerB
                                                = pAppData->evmAppInParams->searchRangeVerB;
      tDynParams.videoDynamicParams.h264EncDynamicParams.interCodingParams.minBlockSizeP
                                                = pAppData->evmAppInParams->minBlockSizeP;
      tDynParams.videoDynamicParams.h264EncDynamicParams.interCodingParams.minBlockSizeB
                                                = pAppData->evmAppInParams->minBlockSizeB;
    
      tDynParams.videoDynamicParams.h264EncDynamicParams.videnc2DynamicParams.intraFrameInterval = 90;
    
      eError = OMX_SetParameter (pHandle, OMX_TI_IndexParamVideoDynamicParams,
                                 &tDynParams);
      OMX_INIT_PARAM (&tStaticParam);
    
      tStaticParam.nPortIndex = OMX_VIDENC_OUTPUT_PORT;
    
      eError = OMX_GetParameter (pHandle, OMX_TI_IndexParamVideoStaticParams,
                                 &tStaticParam);
    
      /* To use extended parameters */
      tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.HRDBufferSize
                                                 = pAppData->evmAppInParams->videoBitRate * 2;
      tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.encodingPreset
                                                 = XDM_USER_DEFINED;
      tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.rateControlPreset
                                                 = IVIDEO_USER_DEFINED;
    
      if(pAppData->nScanFormat && !pAppData->evmAppInParams->deiEnable) {
        /* for interlace, base profile can not be used */
        tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.profile = IH264_HIGH_PROFILE;
        tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.level = IH264_LEVEL_22;
    
        /* setting Interlace mode */
        tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.inputContentType = IVIDEO_INTERLACED;
        tStaticParam.videoStaticParams.h264EncStaticParams.bottomFieldIntra = 0;
        tStaticParam.videoStaticParams.h264EncStaticParams.interlaceCodingType = IH264_INTERLACE_FIELDONLY;
    
        tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.encodingPreset = XDM_USER_DEFINED;
        tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.rateControlPreset = IVIDEO_USER_DEFINED;
    
        tStaticParam.videoStaticParams.h264EncStaticParams.intraCodingParams.lumaIntra4x4Enable = 309;
        tStaticParam.videoStaticParams.h264EncStaticParams.intraCodingParams.lumaIntra8x8Enable = 320;
      }
      /* To set user-defined NAL Unit */
      tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluControlPreset = IH264_NALU_CONTROL_USERDEFINED;
      H264_SETNALU_MASK_SPS(tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskIntraPicture);
      H264_SETNALU_MASK_PPS(tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskIntraPicture);
      H264_SETNALU_MASK_SPS(tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskIDRPicture);
      H264_SETNALU_MASK_PPS(tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskIDRPicture);
      H264_SETNALU_MASK_SEI(tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskIDRPicture);
      H264_SETNALU_MASK_SPS(tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskStartOfSequence);
      H264_SETNALU_MASK_PPS(tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskStartOfSequence);
      H264_SETNALU_MASK_SEI(tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskStartOfSequence);
      /* To set VUI information */
      tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.vuiCodingPreset = IH264_VUICODING_USERDEFINED;
      tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.hrdParamsPresentFlag = 1;
      tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.timingInfoPresentFlag = 1;
    
      /* EI: To set maximum intra-frame interval of encoder, by default it was for 0x7FFF
         So encoder will not work for setting no of P-Frame more than that but with
         below setting user can set no of P-Frame at max 0xFFFF */
      tStaticParam.videoStaticParams.h264EncStaticParams.maxIntraFrameInterval = 0xFFFF;
    
      /* EI: Rate-control settings done with Enocoder's Static parameters are not taking effect.
             So we set rate control parameters in Encoder's Dynamic parameters. */
    
      /* EI: As like rate-control, it may happened that changing inter-coding parameters may not effect
             with static parameter's structure, so we set these params as well with Dynamic structure.
             During testing of this, while we change these params encoder return with bad param */
    
      eError = OMX_SetParameter (pHandle, OMX_TI_IndexParamVideoStaticParams,
                                 &tStaticParam);
    
      /* Set AVC params */
      OMX_INIT_PARAM (&tAVCParams);
    
      tAVCParams.nPortIndex = OMX_DirOutput;
      eError = OMX_GetParameter(pHandle, OMX_IndexParamVideoAvc, &tAVCParams);
      if(eError != OMX_ErrorNone)
      {
        printf("failed to Encoder OMX_IndexParamVideoAvc getparams\n");
      }
      else
      {
        printf("success OMX_IndexParamVideoAvc getparams\n");
      }
    
      tAVCParams.eLevel   = OMX_VIDEO_AVCLevel42;
      tAVCParams.eProfile = OMX_VIDEO_AVCProfileHigh;
      tAVCParams.nBFrames = pAppData->evmAppInParams->noBFrame;
      tAVCParams.nPFrames = pAppData->evmAppInParams->noPFrame;
    
      eError = OMX_SetParameter(pHandle, OMX_IndexParamVideoAvc, &tAVCParams);
      if(eError != OMX_ErrorNone)
      {
        printf("failed to encoder OMX_IndexParamVideoAvc setparams\n");
      }
      else
      {
        printf("success OMX_IndexParamVideoAvc setparams\n");
      }
    
      return eError;
    }
    

    Please let me know if i did something wrong in those parameter initialization. We didn't performed any parameter initializations runtime using SetConfig. We did use SetConfig API to initialize some of the parameters at creation time.

    One more observation, this happens only in case of interlaced encoding. If i enable DEI and encode it as progressive, encoded video doesn't jump.

    Let me know if you need any more information.

    Regards,

    Hitesh

  • Hi Hitesh,

    Your paramters look fine. I have forwarded this to codec team to analyze once again.

    Can you try out with "encode" example once?

    Thanks

    Ram

  • Hitesh,

    Try the following modifications in the encoder configuration

    1. set the flag bottomFieldIntra to non-zero
    2. try changing the interlaceCodingType to MRF
    3. Check if raw YUV content fed to encoder is clean
    4. Share the full set of encoder configuration by doing a control call with XDM_GETSTATUS command. You need to collect status structure and share it with us so that we can try in our stand-alone setup

    Thanks 

  • Thanks you so much, Ram and Santosh.

    I really appreciate your quick response. I will try with both of your suggestions towards fixed to the problem. I will update you soon on this.

    Thanks,

    Hitesh

  • Hi Ram and Santosh,

    Currently I am working on this issue. We have tried your suggestions, Please find below information.

    1. set the flag bottomFieldIntra to non-zero

    We have changed value of bottomFieldIntra to 1 from 0 but there is not any change in output encoded file.

    2. try changing the interlaceCodingType to MRF

    We have changed value of interlaceCodingType to MRF but there is not any change in output encoded file. We have printed this value before capture starts but we are getting value of interlaceCodingType = 3(ARF), which should be 2 (MRF)

    3. Check if raw YUV content fed to encoder is clean

    We have checked encode only demo with interlace encoder setting, output encoded file do not have any jumping effect (output file is proper as it should).

    4. Share the full set of encoder configuration by doing a control call with XDM_GETSTATUS command. You need to collect status structure and share it with us so that we can try in our stand-alone setup

    Please find below list of encoder configuration Param value in our system.

    #### IH264ENC_Status Param
    #### Value of interlaceCodingType     = 3
    #### Value of bottomFieldIntra        = 1
    #### Value of gopStructure            = 0
    #### Value of entropyCodingMode       = 1
    #### Value of transformBlockSize      = 1
    #### Value of log2MaxFNumMinus4       = 12
    #### Value of picOrderCountType       = 0
    #### Value of enableWatermark         = 0
    #### Value of IDRFrameInterval        = 0
    #### Value of maxIntraFrameInterval   = 65535
    #### Value of debugTraceLevel         = 0
    #### Value of lastNFramesToLog        = 0
    #### Value of enableAnalyticinfo      = 0
    #### Value of enableGMVSei            = 0
    #### Value of constraintSetFlags      = 0
    #### Value of enableRCDO              = 0
    #### Value of enableLongTermRefFrame  = 0
    #### Value of LTRPPeriod              = 0
    #### Value of searchCenter            = 0
    #### Value of enableStaticMBCount     = 0
    #### Value of numTemporalLayer        = 1
    #### Value of referencePicMarking     = 0
    #### Value of extMemoryDebugTraceSize = 36
    #### Value of enableROI               = 0

    #### IH264ENC_Status->rateControlParams Param
    #### Value of rateControlParamsPreset      = 0
    #### Value of scalingMatrixPreset          = 0
    #### Value of rcAlgo                       = 0
    #### Value of qpI                          = -1
    #### Value of qpMaxI                       = 36
    #### Value of qpMinI                       = 10
    #### Value of qpP                          = -1
    #### Value of qpMaxP                       = 40
    #### Value of qpMinP                       = 10
    #### Value of qpOffsetB                    = 4
    #### Value of qpMaxB                       = 44
    #### Value of qpMinB                       = 10
    #### Value of allowFrameSkip               = 0
    #### Value of removeExpensiveCoeff         = 0
    #### Value of chromaQPIndexOffset          = 0
    #### Value of IPQualityFactor              = 0
    #### Value of initialBufferLevel           = 8000000
    #### Value of HRDBufferSize                = 8000000
    #### Value of minPicSizeRatioI             = 0
    #### Value of maxPicSizeRatioI             = 0
    #### Value of minPicSizeRatioP             = 0
    #### Value of maxPicSizeRatioP             = 0
    #### Value of minPicSizeRatioB             = 0
    #### Value of maxPicSizeRatioB             = 0
    #### Value of enablePRC                    = 1
    #### Value of enablePartialFrameSkip       = 0
    #### Value of discardSavedBits             = 0
    #### Value of reserved                     = 0
    #### Value of VBRDuration                  = 8
    #### Value of VBRsensitivity               = 0
    #### Value of skipDistributionWindowLength = 5
    #### Value of numSkipInDistributionWindow  = 1
    #### Value of enableHRDComplianceMode      = 1
    #### Value of frameSkipThMulQ5             = 0
    #### Value of vbvUseLevelThQ5              = 0

    #### IH264ENC_Status->interCodingParams Param
    #### Value of interCodingPreset  = 0
    #### Value of searchRangeHorP    = 144
    #### Value of searchRangeVerP    = 32
    #### Value of searchRangeHorB    = 144
    #### Value of searchRangeVerB    = 16
    #### Value of interCodingBias    = 1
    #### Value of skipMVCodingBias   = 1
    #### Value of minBlockSizeP      = 0
    #### Value of minBlockSizeB      = 0
    #### Value of meAlgoMode         = 0

    #### IH264ENC_Status->intraCodingParams Param
    #### Value of intraCodingPreset          = 0
    #### Value of lumaIntra4x4Enable         = 31
    #### Value of lumaIntra8x8Enable         = 31
    #### Value of lumaIntra16x16Enable       = 15
    #### Value of chromaIntra8x8Enable       = 15
    #### Value of chromaComponentEnable      = 1
    #### Value of intraRefreshMethod         = 0
    #### Value of intraRefreshRate           = 0
    #### Value of gdrOverlapRowsBtwFrames    = 0
    #### Value of constrainedIntraPredEnable = 0
    #### Value of intraCodingBias            = 0

    #### IH264ENC_Status->nalUnitControlParams
    #### Value of naluControlPreset              = 1
    #### Value of naluPresentMaskStartOfSequence = 8672
    #### Value of naluPresentMaskIDRPicture      = 8672
    #### Value of naluPresentMaskIntraPicture    = 8450
    #### Value of naluPresentMaskNonIntraPicture = 2
    #### Value of naluPresentMaskEndOfSequence   = 0

    #### IH264ENC_Status->sliceCodingParams
    #### Value of sliceCodingPreset = 0
    #### Value of sliceMode         = 0
    #### Value of sliceUnitSize     = 0
    #### Value of streamFormat      = 0

    #### IH264ENC_Status->loopfilterPreset
    #### Value of loopfilterPreset      = 0
    #### Value of loopfilterDisableIDC  = 0
    #### Value of filterOffsetA         = 0
    #### Value of filterOffsetB         = 0

    #### IH264ENC_Status->fmoCodingParams
    #### Value of fmoCodingPreset               =0
    #### Value of numSliceGroups                =1
    #### Value of sliceGroupMapType             =4
    #### Value of sliceGroupChangeDirectionFlag =0
    #### Value of sliceGroupChangeRate          =0
    #### Value of sliceGroupChangeCycle         =0
    #### Value of sliceGroupParams[0]           =0
    #### Value of sliceGroupParams[1]           =0

    #### IH264ENC_Status->vuiCodingParams
    #### Value of vuiCodingPreset            = 1
    #### Value of aspectRatioInfoPresentFlag = 0
    #### Value of aspectRatioIdc             = 0
    #### Value of videoSignalTypePresentFlag = 0
    #### Value of videoFormat                = 2
    #### Value of videoFullRangeFlag         = 0
    #### Value of timingInfoPresentFlag      = 1
    #### Value of hrdParamsPresentFlag       = 1
    #### Value of numUnitsInTicks            = 1000

    #### IH264ENC_Status->stereoInfoParams
    #### Value of stereoInfoPreset       = 0
    #### Value of topFieldIsLeftViewFlag = 0
    #### Value of viewSelfContainedFlag  = 0

    #### IH264ENC_Status->framePackingSEIParams
    #### Value of framePackingPreset = 0
    #### Value of framePackingType   = 0
    #### Value of frame0PositionX    = 0
    #### Value of frame0PositionY    = 0
    #### Value of frame1PositionX    = 0
    #### Value of frame1PositionY    = 0
    #### Value of reservedByte       = 0

    #### IH264ENC_Status->svcCodingParams
    #### Value of svcExtensionFlag    = 0
    #### Value of dependencyID        = 0
    #### Value of qualityID           = 0
    #### Value of enhancementProfileID= 0
    #### Value of layerIndex          = 0
    #### Value of refLayerDQId        = 0

  • Hi Ram and Santosh,

    FYI, Please find attached file which is having our capture and dei param settings.

    2337.SetCaptureParams.txt
    OMX_ERRORTYPE IL_ClientSetCaptureParams (IL_Client *pAppData)
    {
    
      OMX_PARAM_VFCC_HWPORT_PROPERTIES sHwPortParam;
    
      OMX_PARAM_VFCC_HWPORT_ID sHwPortId;
    
      OMX_CONFIG_VFCC_FRAMESKIP_INFO sCapSkipFrames;
    
      OMX_PARAM_CTRL_VIDDECODER_INFO sVidDecParam;
    
      OMX_PARAM_BUFFER_MEMORYTYPE memTypeCfg;
    
      OMX_PARAM_PORTDEFINITIONTYPE paramPort;
    
      OMX_ERRORTYPE eError = OMX_ErrorNone;
    
      OMX_INIT_PARAM (&paramPort);
    
      /* set input height/width and color format */
      paramPort.nPortIndex = OMX_VFCC_OUTPUT_PORT_START_INDEX;
      OMX_GetParameter (pAppData->pCapHandle, OMX_IndexParamPortDefinition,
                        &paramPort);
      paramPort.nPortIndex = OMX_VFCC_OUTPUT_PORT_START_INDEX;
      paramPort.format.video.nFrameWidth = pAppData->nWidth;
      paramPort.format.video.nFrameHeight = pAppData->nHeight;
      paramPort.format.video.nStride = pAppData->nWidth;
      paramPort.nBufferCountActual = IL_CLIENT_CAPTURE_OUTPUT_BUFFER_COUNT;
      paramPort.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
      /* Capture output in 420 format */
      paramPort.format.video.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
      paramPort.nBufferSize =
        (paramPort.format.video.nStride * pAppData->nHeight * 3) >> 1;
    
      if(pAppData->nScanFormat) {
      //paramPort.format.video.nStride = pAppData->nWidth << 1;
      paramPort.format.video.nFrameHeight = pAppData->nHeight >> 1;
      paramPort.format.video.nStride = pAppData->nWidth ;
      //paramPort.format.video.eColorFormat = OMX_COLOR_FormatYCbYCr;
      paramPort.format.video.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
      paramPort.nBufferSize =
       // (paramPort.format.video.nStride * pAppData->nHeight) >> 1;
        (paramPort.format.video.nStride * (pAppData->nHeight) * 3) >> 1;
      }
        
      printf ("Buffer Size computed: %d\n", (int) paramPort.nBufferSize);
      printf ("set input port params (width = %d, height = %d)",
              (int) pAppData->nWidth, (int) pAppData->nHeight);
      OMX_SetParameter (pAppData->pCapHandle, OMX_IndexParamPortDefinition,
                        &paramPort);
    
      /* Setting Memory type at output port to Raw Memory */
      OMX_INIT_PARAM (&memTypeCfg);
      memTypeCfg.nPortIndex = OMX_VFCC_OUTPUT_PORT_START_INDEX;
      memTypeCfg.eBufMemoryType = OMX_BUFFER_MEMORY_DEFAULT;
      eError =
        OMX_SetParameter (pAppData->pCapHandle, OMX_TI_IndexParamBuffMemType,
                          &memTypeCfg);
    
      if (eError != OMX_ErrorNone)
        ERROR ("failed to set memory Type at output port\n");
    
      OMX_INIT_PARAM (&sHwPortId);
      /* capture on C-VIC card: HDMI & SDI on VIP1 port */
      if(pAppData->nIsHdmi)
      {
        sHwPortId.eHwPortId = OMX_VIDEO_CaptureHWPortVIP1_PORTA ; 
      }
      else
      {
        sHwPortId.eHwPortId = OMX_VIDEO_CaptureHWPortVIP1_PORTA ; 
      }
      eError = OMX_SetParameter (pAppData->pCapHandle,
                                 (OMX_INDEXTYPE) OMX_TI_IndexParamVFCCHwPortID,
                                 (OMX_PTR) & sHwPortId);
    
      OMX_INIT_PARAM (&sHwPortParam);
    
      sHwPortParam.eCaptMode = OMX_VIDEO_CaptureModeSC_NON_MUX;
      sHwPortParam.eVifMode = OMX_VIDEO_CaptureVifMode_16BIT;
      sHwPortParam.eInColorFormat = OMX_COLOR_FormatYCbYCr;
      sHwPortParam.eScanType = OMX_VIDEO_CaptureScanTypeProgressive;
      sHwPortParam.nMaxHeight = pAppData->nHeight;
      sHwPortParam.bFieldMerged   = OMX_FALSE;
    
      if(pAppData->nScanFormat) { 
        sHwPortParam.eScanType = OMX_VIDEO_CaptureScanTypeInterlaced;
        sHwPortParam.nMaxHeight = pAppData->nHeight >> 1;
        sHwPortParam.bFieldMerged   = OMX_FALSE;
        }
      
      sHwPortParam.nMaxWidth = pAppData->nWidth;
      sHwPortParam.nMaxChnlsPerHwPort = 1;
    
      eError = OMX_SetParameter (pAppData->pCapHandle,
                                 (OMX_INDEXTYPE)
                                 OMX_TI_IndexParamVFCCHwPortProperties,
                                 (OMX_PTR) & sHwPortParam);
    
      if(pAppData->nIsHdmi)
      {
        /* Set parameters for ADV controller */
        OMX_INIT_PARAM (&sHwPortId);
        /* capture on EIO card is component input at VIP1 port */
        sHwPortId.eHwPortId = OMX_VIDEO_CaptureHWPortVIP1_PORTA;
        eError = OMX_SetParameter (pAppData->pTvpHandle,
                                   (OMX_INDEXTYPE) OMX_TI_IndexParamVFCCHwPortID,
                                   (OMX_PTR) & sHwPortId);
        OMX_INIT_PARAM (&sHwPortParam);
        sHwPortParam.eCaptMode = OMX_VIDEO_CaptureModeSC_NON_MUX;
        sHwPortParam.eVifMode = OMX_VIDEO_CaptureVifMode_16BIT;
        sHwPortParam.eInColorFormat = OMX_COLOR_FormatYCbYCr;
        sHwPortParam.eScanType = OMX_VIDEO_CaptureScanTypeProgressive;
        sHwPortParam.bFieldMerged   = OMX_FALSE;
        sHwPortParam.nMaxHeight = pAppData->nHeight;
    
       if(pAppData->nScanFormat) {
          sHwPortParam.eScanType = OMX_VIDEO_CaptureScanTypeInterlaced;
          sHwPortParam.nMaxHeight = pAppData->nHeight >> 1;
          sHwPortParam.bFieldMerged   = OMX_FALSE;
         }
      
        sHwPortParam.nMaxWidth = pAppData->nWidth;
        sHwPortParam.nMaxChnlsPerHwPort = 1;
    
        eError = OMX_SetParameter (pAppData->pTvpHandle,
                                   (OMX_INDEXTYPE)
                                   OMX_TI_IndexParamVFCCHwPortProperties,
                                   (OMX_PTR) & sHwPortParam);
    
        OMX_INIT_PARAM (&sVidDecParam);
    
        sVidDecParam.videoStandard =  OMX_VIDEO_DECODER_STD_720P_60;
      
        /* setting ADV7611 component input */
        sVidDecParam.videoDecoderId = OMX_VID_DEC_ADV7611_DRV;
        sVidDecParam.videoSystemId = OMX_VIDEO_DECODER_VIDEO_SYSTEM_AUTO_DETECT;
      }
    
      return (eError);
    }
    

    3443.SetDeiParams.txt
    OMX_ERRORTYPE IL_ClientSetDeiParams (IL_Client *pAppData)
    {
      OMX_ERRORTYPE eError = OMX_ErrorNone;
      OMX_PARAM_BUFFER_MEMORYTYPE memTypeCfg;
      OMX_PARAM_PORTDEFINITIONTYPE paramPort;
      OMX_PARAM_VFPC_NUMCHANNELPERHANDLE sNumChPerHandle;
      OMX_CONFIG_ALG_ENABLE algEnable;
      OMX_CONFIG_VIDCHANNEL_RESOLUTION chResolution;
    
      OMX_CONFIG_SUBSAMPLING_FACTOR sSubSamplinginfo = {0};
      
      OMX_INIT_PARAM(&sSubSamplinginfo);
    
      sSubSamplinginfo.nSubSamplingFactor = 1;
      eError = OMX_SetConfig ( pAppData->pDeiHandle, ( OMX_INDEXTYPE )
                               ( OMX_TI_IndexConfigSubSamplingFactor ),
                                 &sSubSamplinginfo );
    
      OMX_INIT_PARAM (&memTypeCfg);
      memTypeCfg.nPortIndex = OMX_VFPC_INPUT_PORT_START_INDEX;
      memTypeCfg.eBufMemoryType = OMX_BUFFER_MEMORY_DEFAULT;
      eError = OMX_SetParameter (pAppData->pDeiHandle, OMX_TI_IndexParamBuffMemType,
                                 &memTypeCfg);
    
      if (eError != OMX_ErrorNone)
      {
        ERROR ("failed to set memory Type at input port\n");
      }
    
      /* Setting Memory type at output port to Raw Memory */
      OMX_INIT_PARAM (&memTypeCfg);
      memTypeCfg.nPortIndex = OMX_VFPC_OUTPUT_PORT_START_INDEX;
      memTypeCfg.eBufMemoryType = OMX_BUFFER_MEMORY_DEFAULT;
      eError = OMX_SetParameter (pAppData->pDeiHandle, OMX_TI_IndexParamBuffMemType,
                                 &memTypeCfg);
    
      if (eError != OMX_ErrorNone)
      {
        ERROR ("failed to set memory Type at output port\n");
      }
    
      OMX_INIT_PARAM (&memTypeCfg);
      memTypeCfg.nPortIndex = OMX_VFPC_OUTPUT_PORT_START_INDEX + 1;
      memTypeCfg.eBufMemoryType = OMX_BUFFER_MEMORY_DEFAULT;
      eError = OMX_SetParameter (pAppData->pDeiHandle, OMX_TI_IndexParamBuffMemType,
                                 &memTypeCfg);
    
      if (eError != OMX_ErrorNone)
      {
        ERROR ("failed to set memory Type at output port\n");
      }
    
      /* set input height/width and color format */
      OMX_INIT_PARAM (&paramPort);
      paramPort.nPortIndex = OMX_VFPC_INPUT_PORT_START_INDEX;
    
      OMX_GetParameter (pAppData->pDeiHandle, OMX_IndexParamPortDefinition,
                        &paramPort);
      paramPort.nPortIndex = OMX_VFPC_INPUT_PORT_START_INDEX;
      paramPort.format.video.nFrameWidth = pAppData->nWidth;
      paramPort.format.video.nFrameHeight = pAppData->nHeight;
    
      paramPort.format.video.nStride = pAppData->nWidth;
      paramPort.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
      paramPort.format.video.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
      paramPort.nBufferSize =
        (paramPort.format.video.nStride * pAppData->nHeight * 3) >> 1;
     if(pAppData->nScanFormat) {
        paramPort.format.video.nFrameHeight = pAppData->nHeight >> 1;
        paramPort.format.video.nStride = pAppData->nWidth << 1;
        paramPort.format.video.eColorFormat = OMX_COLOR_FormatYCbYCr;
        paramPort.nBufferSize =
          (paramPort.format.video.nStride * pAppData->nHeight) >> 1;
      }      
      paramPort.nBufferAlignment = 0;
      paramPort.bBuffersContiguous = 0;
      paramPort.nBufferCountActual = IL_CLIENT_DEI_INPUT_BUFFER_COUNT;
      printf ("set input port params (width = %d, height = %d) \n",
              (int) pAppData->nWidth, (int) pAppData->nHeight);
      OMX_SetParameter (pAppData->pDeiHandle, OMX_IndexParamPortDefinition,
                        &paramPort);
    
      /* set output height/width and color format */
      OMX_INIT_PARAM (&paramPort);
      paramPort.nPortIndex = OMX_VFPC_OUTPUT_PORT_START_INDEX;
      OMX_GetParameter (pAppData->pDeiHandle, OMX_IndexParamPortDefinition,
                        &paramPort);
    
      paramPort.nPortIndex = OMX_VFPC_OUTPUT_PORT_START_INDEX;
      paramPort.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
      paramPort.format.video.eColorFormat = OMX_COLOR_FormatYCbYCr;
      paramPort.nBufferAlignment = 0;
      paramPort.nBufferCountActual = IL_CLIENT_DEI_OUTPUT_BUFFER_COUNT;
      /* This port is connected to display and provides 422 o/p */
      paramPort.nBufferSize = paramPort.format.video.nStride *
                              paramPort.format.video.nFrameHeight;
    
      /*For the case of On-chip HDMI as display device*/
      paramPort.format.video.nFrameWidth = DISPLAY_WIDTH;
      paramPort.format.video.nFrameHeight = DISPLAY_HEIGHT;
      paramPort.format.video.nStride = DISPLAY_HEIGHT * 2;
      
      paramPort.nBufferSize =
        paramPort.format.video.nStride * paramPort.format.video.nFrameHeight;
                              
    
      printf ("set output port params (width = %d, height = %d)\n",
              (int) pAppData->nWidth, (int) pAppData->nHeight);
    
      OMX_SetParameter (pAppData->pDeiHandle, OMX_IndexParamPortDefinition,
                        &paramPort);
    
      OMX_INIT_PARAM (&paramPort);
      paramPort.nPortIndex = OMX_VFPC_OUTPUT_PORT_START_INDEX + 1;
      OMX_GetParameter (pAppData->pDeiHandle, OMX_IndexParamPortDefinition,
                        &paramPort);
    
      paramPort.nPortIndex = OMX_VFPC_OUTPUT_PORT_START_INDEX + 1;
      paramPort.format.video.nFrameWidth = pAppData->nWidth;
      paramPort.format.video.nFrameHeight = pAppData->nHeight;
      paramPort.format.video.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
      paramPort.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
      paramPort.nBufferAlignment = 0;
      paramPort.nBufferCountActual = IL_CLIENT_ENC_INPUT_BUFFER_COUNT;
      paramPort.format.video.nStride = pAppData->nWidth;
    
      /* This port is connected to encoder and provides 420 o/p */
      paramPort.nBufferSize =
        (paramPort.format.video.nStride * paramPort.format.video.nFrameHeight *
         3) >> 1;
    
      printf ("set output port params (width = %d, height = %d)\n",
              (int) paramPort.format.video.nFrameWidth, 
              (int) paramPort.format.video.nFrameHeight);
    
      OMX_SetParameter (pAppData->pDeiHandle, OMX_IndexParamPortDefinition,
                        &paramPort);
    
      /* set number of channles */
      printf ("set number of channels\n");
    
      OMX_INIT_PARAM (&sNumChPerHandle);
      sNumChPerHandle.nNumChannelsPerHandle = 1;
      eError = OMX_SetParameter (pAppData->pDeiHandle,
                                 (OMX_INDEXTYPE)
                                   OMX_TI_IndexParamVFPCNumChPerHandle,
                                 &sNumChPerHandle);
      if (eError != OMX_ErrorNone)
      {
        ERROR ("failed to set num of channels\n");
      }
    
      /* set VFPC input and output resolution information */
      printf ("set input resolution\n");
    
      OMX_INIT_PARAM (&chResolution);
      chResolution.Frm0Width = pAppData->nWidth;
      chResolution.Frm0Height = pAppData->nHeight;
    
      chResolution.Frm0Pitch = pAppData->nWidth;;
      chResolution.Frm1Width = 0;
      chResolution.Frm1Height = 0;
      chResolution.Frm1Pitch = 0;
      chResolution.FrmStartX = 0;
      chResolution.FrmStartY = 0;
      chResolution.FrmCropWidth = pAppData->nWidth;
      chResolution.FrmCropHeight = pAppData->nHeight;
    
     if(pAppData->nScanFormat) {
       chResolution.Frm0Height = pAppData->nHeight >> 1;
       chResolution.FrmCropHeight = pAppData->nHeight >> 1;
       chResolution.Frm0Pitch = pAppData->nWidth << 1;
       }
      
      chResolution.eDir = OMX_DirInput;
      chResolution.nChId = 0;
    
      eError = OMX_SetConfig (pAppData->pDeiHandle,
                              (OMX_INDEXTYPE) OMX_TI_IndexConfigVidChResolution,
                              &chResolution);
      if (eError != OMX_ErrorNone)
      {
        ERROR ("failed to set input channel resolution\n");
      }
    
      printf ("set output resolution\n");
    
      OMX_INIT_PARAM (&chResolution);
    
      /* on secondary display, it is scaled to display size */  
      chResolution.Frm0Width = DISPLAY_WIDTH;
      chResolution.Frm0Height = DISPLAY_HEIGHT;
      chResolution.Frm0Pitch = DISPLAY_WIDTH * 2;  
      
      /* second output to encode */
      chResolution.Frm1Width  = pAppData->nWidth;
      chResolution.Frm1Height = pAppData->nHeight;
      chResolution.Frm1Pitch  = pAppData->nWidth;
      chResolution.FrmStartX  = 0;
      chResolution.FrmStartY  = 0;
      chResolution.FrmCropWidth = 0;
      chResolution.FrmCropHeight = 0;
      chResolution.eDir = OMX_DirOutput;
      chResolution.nChId = 0;
    
      eError = OMX_SetConfig (pAppData->pDeiHandle,
                              (OMX_INDEXTYPE) OMX_TI_IndexConfigVidChResolution,
                              &chResolution);
      if (eError != OMX_ErrorNone)
      {
        ERROR ("failed to set output channel resolution\n");
      }
    
      /* disable algo bypass mode */
      OMX_INIT_PARAM (&algEnable);
      algEnable.nPortIndex = 0;
      algEnable.nChId = 0;
      algEnable.bAlgBypass = 1;
    
      if(pAppData->nScanFormat) {
        if(pAppData->evmAppInParams->deiEnable) {
          algEnable.bAlgBypass = 0;
        } else {
          algEnable.bAlgBypass = 1;
        }
      }
      
      eError = OMX_SetConfig (pAppData->pDeiHandle,
                              (OMX_INDEXTYPE) OMX_TI_IndexConfigAlgEnable,
                              &algEnable);
      if (eError != OMX_ErrorNone)
      {
        ERROR ("failed to disable algo by pass mode\n");
      }
    
      return (eError);
    }
    

  • Could you please share videnc2Status also? It's part of H264ENC_Status.

    PS : videnc2Status contains the base class of status structure parameters.

    Thanks.

  • Hi Brijesh,

    From your statement

    We have checked encode only demo with interlace encoder setting, output encoded file do not have any jumping effect (output file is proper as it should).

    encode demo doesn't have issue with same parameter settings right?

    So issue doesn't seem to be with encode then. 

    Now your use case capture --> encode is having problem of jumping artifacts. Could you check the YUV output of catprue?


    Ram

  • Hi Ram,

    Thank you for your quick reply.
    We have also tried one Capture->Encode->Dump based application as we are having doubt on DEI parameter setting but still output video file having same jumping effect.

  • Hi Ram,

    We have doubt on Capture parameter setting because in our setup LCD also is connected.

    Preview on LCD display is also having jumping effect.

  • Ram,

    As we are not much exposed to capture systems and other peripherals, introducing this thread to camera/capture team or to somebody form application team would be preferable. Could you please pull in such an expert to this discussion?

    Thanks.

  • Hi Santosh,

    Please find below videnc2Status structure parameters.

    #### videnc2Status Param

    #### Value of extendedError          = 0
    #### Value of encodingPreset         = 3
    #### Value of data                   = 0
    #### Value of accessMask             = 0
    #### Value of rateControlPreset      = 5
    #### Value of maxInterFrameInterval  = 1
    #### Value of inputChromaFormat      = 9
    #### Value of inputContentType       = 1
    #### Value of operatingMode          = 1
    #### Value of profile                = 100
    #### Value of level                  = 42
    #### Value of inputDataMode          = 3
    #### Value of outputDataMode         = 3
    #### Value of numInputDataUnits      = 1
    #### Value of numOutputDataUnits      = 1
    #### Value of configurationID        = 1271
    #### Value of minNumInBufs           = 2
    #### Value of minNumOutBufs          = 1
    #### Value of minInBufSize[0]        = 720
    #### Value of minOutBufSize[0]       = 622080
    #### Value of inBufMemoryType[0]     = 1
    #### Value of outBufMemoryType[0]    = 0
    #### Value of minNumBufSets          = 1
    #### Value of metadataType[0]        = -1
    #### Value of metadataType[1]        = -1
    #### Value of metadataType[2]        = -1
    #### Value of size                      = 236
    #### Value of inputHeight               = 288
    #### Value of inputWidth                = 720
    #### Value of refFrameRate              = 60000
    #### Value of targetFrameRate           = 25000
    #### Value of targetBitRate             = 4000000
    #### Value of intraFrameInterval        = 30
    #### Value of generateHeader            = 0
    #### Value of captureWidth              = 720
    #### Value of forceFrame                = -1
    #### Value of interFrameInterval = 30
    #### Value of mvAccuracy                = 2
    #### Value of sampleAspectRatioHeight   = 1
    #### Value of sampleAspectRatioWidth    = 1
    #### Value of ignoreOutbufSizeFlag      = 0
    #### Value of lateAcquireArg            = 0

  • Hi Brijesh,

    I am confused with what  case of interlaced encoding is working fine for you

    1) Encode only demo. This seems to be working fine as per your statement

    2) Capture --> Encode: Does this demo work or you are seeing  jumping effects?

    3) Catprue --> DEI --> encode(progressive encoding). This must be working as per Hitesh's earlier threads on this issue.

    4) Now your LCD is also having jumping display means, capture --> DEI ---> Display has jumping effect. Is it?

    Ram

  • Hi Ram,

    Please find my answers below,

    1) Encode only demo. This seems to be working fine as per your statement
    -> Yes this is working perfect

    2) Capture --> Encode: Does this demo work or you are seeing  jumping effects?
    -> No this does not work for me, it is having jumping effect in encoded file

    3) Catprue --> DEI --> encode(progressive encoding). This must be working as per Hitesh's earlier threads on this issue.
    -> Yes progressive encoding is working perfect

    4) Catprue --> DEI --> encode(intelace encoding). This must be working as per Hitesh's earlier threads on this issue.
    -> No this does not work for me, it is having jumping effect in encoded file

    5) Now your LCD is also having jumping display means, capture --> DEI ---> Display has jumping effect. Is it?
    -> Yes, Capture --> DEI ---> Display has jumping effect

  • Hi Brijesh,

    So capture seems to have issues then. From your capture settings, it looks like you are using a some ADV7611 video decoder.  Not sure what this external decoder's behaviour.

    Could you try out with TVP7002 as video decoder?

    Can you please confirm capture dump itself has jumping effects?

    Ram

  • Hi Ram,

    Thank you very much for you quick response.

    In our custom device there are total two types video inputs can possible one is via HDMI for which we are using ADV7611 as decoder chip and other is SDI input for which we are using SDI IP in FPGA (SDI Decoder IP inside FPGA)

    Video Input - 1 (HDMI Path) -> ADV7611 -> FPGA -> DM VIP0

    Video Input - 2 (SDI Path) -> FPGA (which is having SDI IP) -> DM VIP1

    We have tested our application with both of this video path SDI and HDMI, but we are having same jumping effect in both the path.

  • Hi Ram and Santosh,

    Please find our observation below.

    Input Video : PAL

    1. For interlaced encoding we did below changes in omx source.

    File : ezsdk_dm814x-evm_5_05_01_04/component-sources/omx-ti81xx-src_05_02_00_46/src/ti/omx/comp/venc/src/omx_h264ve.c

          if ( frameDataContentType.eContentType == OMX_Video_Interlaced )
          {
            pVidEncComPvt->tVedEncInBufsPtr->contentType = IVIDEO_INTERLACED;
            pVidEncComPvt->tVedEncInBufsPtr->dataLayout = IVIDEO_FIELD_INTERLEAVED;
            pVidEncComPvt->tVedEncInBufsPtr->topFieldFirstFlag = 1;

            pVidEncComPvt->tVedEncInBufsPtr->secondFieldOffsetHeight[0] = extHeight;
            pVidEncComPvt->tVedEncInBufsPtr->secondFieldOffsetHeight[1] = extHeight >> 1;
            pVidEncComPvt->tVedEncInBufsPtr->secondFieldOffsetHeight[2] = extHeight >> 1;
            pVidEncComPvt->tVedEncInBufsPtr->secondFieldOffsetWidth[0] = 0;
            pVidEncComPvt->tVedEncInBufsPtr->secondFieldOffsetWidth[1] = 0;
            pVidEncComPvt->tVedEncInBufsPtr->secondFieldOffsetWidth[2] = 0;

          }

    Output File (renamed by txt extension, so renamed back to .h264 extension) : 4048.sample_1.txt

    Observation : There is a jumping effect in output h264 file.\

    2. We did below changes in omx source to resolve jumping effect in encoded file.

    File : ezsdk_dm814x-evm_5_05_01_04/component-sources/omx-ti81xx-src_05_02_00_46/src/ti/omx/comp/venc/src/omx_h264ve.c

          if ( frameDataContentType.eContentType == OMX_Video_Interlaced )
          {
            pVidEncComPvt->tVedEncInBufsPtr->contentType = IVIDEO_INTERLACED;
            pVidEncComPvt->tVedEncInBufsPtr->dataLayout = IVIDEO_FIELD_SEPARATED;
            pVidEncComPvt->tVedEncInBufsPtr->topFieldFirstFlag = 1;

            pVidEncComPvt->tVedEncInBufsPtr->secondFieldOffsetHeight[0] = 0;
            pVidEncComPvt->tVedEncInBufsPtr->secondFieldOffsetHeight[1] = 0;
            pVidEncComPvt->tVedEncInBufsPtr->secondFieldOffsetHeight[2] = 0;
            pVidEncComPvt->tVedEncInBufsPtr->secondFieldOffsetWidth[0] = 0;
            pVidEncComPvt->tVedEncInBufsPtr->secondFieldOffsetWidth[1] = 0;
            pVidEncComPvt->tVedEncInBufsPtr->secondFieldOffsetWidth[2] = 0;

          }

    Output File (renamed by txt extension, so renamed back to .h264 extension) :

    5557.sample_2.txt

    5810.sample_3.txt

    Observation : There is not jumping effect in both the videos (sample_2, sample_3) but having issue in resolution. We modify FrameHeight parameter value (from application side) to generate this two different (sample_2 and sample_3) encoded files.

    As we were doubting on capture parameters but after this test case it seems to have some issue with encoder setting. Can you suggest us any solution.

  • Hi Brijesh,

    Configuration with Sample-2 seems to be correct to me since the inputHeight should be half of actual height.

    What is the issue with sample_2 now?

    Ram

  • Hi Ram,

    Sample-1 video is full size(in terms of height) video in which you can see play button(bottom left side) as well where Sample-2 video is exactly half in height of actual video there is not any play button is visible, it should be full size(same hight covered with Sample-1) video. Both this videos are for same location and captured with same camera. Sample-3 video is covering full height but having wrong resolution.

  • Hi Brijesh,

    Please refer the dataLayout table I posted earlier in this.

    Looks there is some mistake. When dataLayout = FIELD_SEPARATED, secondFieldWidht/height is 0, encoder treats it as 60 process call enocidng. It should be set to a non-zero value(ID 2)

    Santhosh,

    Can you please comment?

    Ram

  • Brijesh,

    I think you are messing up with resolutions for capture device and encoder. Please share few frames of raw data (YUV) fed to encoder in all three cases. 

    Raw data -> output of capture device i.e., encoder input

    How is your capture device configured? resolution ? fps ? How are fields stored , field separate or field interleaved manner? You cannot simply play with encoder settings unless you know the capture device behaviour.

    Thanks,

    Santosh

  • Hi Ram, Santhosh,

    We have tested capture encode application on EVM below is our observations.

    1. Test with default capture_encode application (Progressive Capture on ti8148EVM)

    Input Video : 1080i

    Output Encoded File(renamed by txt extension, so renamed back to .h264 extension) : 3463.evm_sample_1.txt

    2. Test with capture_encode application (Interlaced Capture on ti8148EVM)

    We added below code in capture_encode application for interlaced encoding

    file : component-sources/omx_05_02_00_46/examples/ti/omx/demos/capture_encode/src/ilclient_utils.c

    function : IL_ClientSetEncodeParams()

    ----------------------------------------------------------------------------------------------------------

    OMX_ERRORTYPE IL_ClientSetEncodeParams (IL_Client *pAppData)
    {
      ...
      ...

      OMX_INIT_PARAM (&tStaticParam);

      tStaticParam.nPortIndex = OMX_VIDENC_OUTPUT_PORT;

      eError = OMX_GetParameter (pHandle, OMX_TI_IndexParamVideoStaticParams,
                                 &tStaticParam);

      /* To use extended parameters */
      tStaticParam.videoStaticParams.h264EncStaticParams.rateControlParams.HRDBufferSize
                                                 = 4000000;
      tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.encodingPreset
                                                 = XDM_USER_DEFINED;
      tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.rateControlPreset
                                                 = IVIDEO_USER_DEFINED;

      /* for interlace, base profile can not be used */
      tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.profile = IH264_HIGH_PROFILE;
      tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.level = IH264_LEVEL_22;

      /* setting Interlace mode */
      tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.inputContentType = IVIDEO_INTERLACED;
      tStaticParam.videoStaticParams.h264EncStaticParams.bottomFieldIntra = 0;
      tStaticParam.videoStaticParams.h264EncStaticParams.interlaceCodingType = IH264_INTERLACE_FIELDONLY;
      tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.encodingPreset = XDM_USER_DEFINED;
      tStaticParam.videoStaticParams.h264EncStaticParams.videnc2Params.rateControlPreset = IVIDEO_USER_DEFINED;

      tStaticParam.videoStaticParams.h264EncStaticParams.intraCodingParams.lumaIntra4x4Enable = 309;
      tStaticParam.videoStaticParams.h264EncStaticParams.intraCodingParams.lumaIntra8x8Enable = 320;

     /* To set user-defined NAL Unit */
      tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluControlPreset = IH264_NALU_CONTROL_USERDEFINED;
      H264_SETNALU_MASK_SPS(tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskIntraPicture);
      H264_SETNALU_MASK_PPS(tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskIntraPicture);
      H264_SETNALU_MASK_SPS(tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskIDRPicture);
      H264_SETNALU_MASK_PPS(tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskIDRPicture);
      H264_SETNALU_MASK_SEI(tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskIDRPicture);
      H264_SETNALU_MASK_SPS(tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskStartOfSequence);
      H264_SETNALU_MASK_PPS(tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskStartOfSequence);
      H264_SETNALU_MASK_SEI(tStaticParam.videoStaticParams.h264EncStaticParams.nalUnitControlParams.naluPresentMaskStartOfSequence);

      /* To set VUI information */
      tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.vuiCodingPreset = IH264_VUICODING_USERDEFINED;
      tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.hrdParamsPresentFlag = 1;
      tStaticParam.videoStaticParams.h264EncStaticParams.vuiCodingParams.timingInfoPresentFlag = 1;

      tStaticParam.videoStaticParams.h264EncStaticParams.maxIntraFrameInterval = 0xFFFF;

       eError = OMX_SetParameter (pHandle, OMX_TI_IndexParamVideoStaticParams,
                                 &tStaticParam);

      ...
      ...
    }

    ----------------------------------------------------------------------------------------------------------

    Input Video : 1080i

    Output Encoded File (renamed by txt extension, so renamed back to .h264 extension) : 5140.evm_sample_2.txt

    Observation : Same jumping effect is there in encoded file.

    So we are facing same jumping effect issue for interlaced encoding in EVM as well.

  • Hi Ram, Santhosh,

    Please find attached required yuv file : https://shared.com/ejthg7977u

    Resolution : PAL

    FPS : 25

    Field Stored : Field Separated

    I have already posted capture device configuration in this post (

    2337.SetCaptureParams.txt
    OMX_ERRORTYPE IL_ClientSetCaptureParams (IL_Client *pAppData)
    {
    
      OMX_PARAM_VFCC_HWPORT_PROPERTIES sHwPortParam;
    
      OMX_PARAM_VFCC_HWPORT_ID sHwPortId;
    
      OMX_CONFIG_VFCC_FRAMESKIP_INFO sCapSkipFrames;
    
      OMX_PARAM_CTRL_VIDDECODER_INFO sVidDecParam;
    
      OMX_PARAM_BUFFER_MEMORYTYPE memTypeCfg;
    
      OMX_PARAM_PORTDEFINITIONTYPE paramPort;
    
      OMX_ERRORTYPE eError = OMX_ErrorNone;
    
      OMX_INIT_PARAM (&paramPort);
    
      /* set input height/width and color format */
      paramPort.nPortIndex = OMX_VFCC_OUTPUT_PORT_START_INDEX;
      OMX_GetParameter (pAppData->pCapHandle, OMX_IndexParamPortDefinition,
                        &paramPort);
      paramPort.nPortIndex = OMX_VFCC_OUTPUT_PORT_START_INDEX;
      paramPort.format.video.nFrameWidth = pAppData->nWidth;
      paramPort.format.video.nFrameHeight = pAppData->nHeight;
      paramPort.format.video.nStride = pAppData->nWidth;
      paramPort.nBufferCountActual = IL_CLIENT_CAPTURE_OUTPUT_BUFFER_COUNT;
      paramPort.format.video.eCompressionFormat = OMX_VIDEO_CodingUnused;
      /* Capture output in 420 format */
      paramPort.format.video.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
      paramPort.nBufferSize =
        (paramPort.format.video.nStride * pAppData->nHeight * 3) >> 1;
    
      if(pAppData->nScanFormat) {
      //paramPort.format.video.nStride = pAppData->nWidth << 1;
      paramPort.format.video.nFrameHeight = pAppData->nHeight >> 1;
      paramPort.format.video.nStride = pAppData->nWidth ;
      //paramPort.format.video.eColorFormat = OMX_COLOR_FormatYCbYCr;
      paramPort.format.video.eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
      paramPort.nBufferSize =
       // (paramPort.format.video.nStride * pAppData->nHeight) >> 1;
        (paramPort.format.video.nStride * (pAppData->nHeight) * 3) >> 1;
      }
        
      printf ("Buffer Size computed: %d\n", (int) paramPort.nBufferSize);
      printf ("set input port params (width = %d, height = %d)",
              (int) pAppData->nWidth, (int) pAppData->nHeight);
      OMX_SetParameter (pAppData->pCapHandle, OMX_IndexParamPortDefinition,
                        &paramPort);
    
      /* Setting Memory type at output port to Raw Memory */
      OMX_INIT_PARAM (&memTypeCfg);
      memTypeCfg.nPortIndex = OMX_VFCC_OUTPUT_PORT_START_INDEX;
      memTypeCfg.eBufMemoryType = OMX_BUFFER_MEMORY_DEFAULT;
      eError =
        OMX_SetParameter (pAppData->pCapHandle, OMX_TI_IndexParamBuffMemType,
                          &memTypeCfg);
    
      if (eError != OMX_ErrorNone)
        ERROR ("failed to set memory Type at output port\n");
    
      OMX_INIT_PARAM (&sHwPortId);
      /* capture on C-VIC card: HDMI & SDI on VIP1 port */
      if(pAppData->nIsHdmi)
      {
        sHwPortId.eHwPortId = OMX_VIDEO_CaptureHWPortVIP1_PORTA ; 
      }
      else
      {
        sHwPortId.eHwPortId = OMX_VIDEO_CaptureHWPortVIP1_PORTA ; 
      }
      eError = OMX_SetParameter (pAppData->pCapHandle,
                                 (OMX_INDEXTYPE) OMX_TI_IndexParamVFCCHwPortID,
                                 (OMX_PTR) & sHwPortId);
    
      OMX_INIT_PARAM (&sHwPortParam);
    
      sHwPortParam.eCaptMode = OMX_VIDEO_CaptureModeSC_NON_MUX;
      sHwPortParam.eVifMode = OMX_VIDEO_CaptureVifMode_16BIT;
      sHwPortParam.eInColorFormat = OMX_COLOR_FormatYCbYCr;
      sHwPortParam.eScanType = OMX_VIDEO_CaptureScanTypeProgressive;
      sHwPortParam.nMaxHeight = pAppData->nHeight;
      sHwPortParam.bFieldMerged   = OMX_FALSE;
    
      if(pAppData->nScanFormat) { 
        sHwPortParam.eScanType = OMX_VIDEO_CaptureScanTypeInterlaced;
        sHwPortParam.nMaxHeight = pAppData->nHeight >> 1;
        sHwPortParam.bFieldMerged   = OMX_FALSE;
        }
      
      sHwPortParam.nMaxWidth = pAppData->nWidth;
      sHwPortParam.nMaxChnlsPerHwPort = 1;
    
      eError = OMX_SetParameter (pAppData->pCapHandle,
                                 (OMX_INDEXTYPE)
                                 OMX_TI_IndexParamVFCCHwPortProperties,
                                 (OMX_PTR) & sHwPortParam);
    
      if(pAppData->nIsHdmi)
      {
        /* Set parameters for ADV controller */
        OMX_INIT_PARAM (&sHwPortId);
        /* capture on EIO card is component input at VIP1 port */
        sHwPortId.eHwPortId = OMX_VIDEO_CaptureHWPortVIP1_PORTA;
        eError = OMX_SetParameter (pAppData->pTvpHandle,
                                   (OMX_INDEXTYPE) OMX_TI_IndexParamVFCCHwPortID,
                                   (OMX_PTR) & sHwPortId);
        OMX_INIT_PARAM (&sHwPortParam);
        sHwPortParam.eCaptMode = OMX_VIDEO_CaptureModeSC_NON_MUX;
        sHwPortParam.eVifMode = OMX_VIDEO_CaptureVifMode_16BIT;
        sHwPortParam.eInColorFormat = OMX_COLOR_FormatYCbYCr;
        sHwPortParam.eScanType = OMX_VIDEO_CaptureScanTypeProgressive;
        sHwPortParam.bFieldMerged   = OMX_FALSE;
        sHwPortParam.nMaxHeight = pAppData->nHeight;
    
       if(pAppData->nScanFormat) {
          sHwPortParam.eScanType = OMX_VIDEO_CaptureScanTypeInterlaced;
          sHwPortParam.nMaxHeight = pAppData->nHeight >> 1;
          sHwPortParam.bFieldMerged   = OMX_FALSE;
         }
      
        sHwPortParam.nMaxWidth = pAppData->nWidth;
        sHwPortParam.nMaxChnlsPerHwPort = 1;
    
        eError = OMX_SetParameter (pAppData->pTvpHandle,
                                   (OMX_INDEXTYPE)
                                   OMX_TI_IndexParamVFCCHwPortProperties,
                                   (OMX_PTR) & sHwPortParam);
    
        OMX_INIT_PARAM (&sVidDecParam);
    
        sVidDecParam.videoStandard =  OMX_VIDEO_DECODER_STD_720P_60;
      
        /* setting ADV7611 component input */
        sVidDecParam.videoDecoderId = OMX_VID_DEC_ADV7611_DRV;
        sVidDecParam.videoSystemId = OMX_VIDEO_DECODER_VIDEO_SYSTEM_AUTO_DETECT;
      }
    
      return (eError);
    }
    
    ).

  • Hello Ram/Santosh/Feroz,

    If you guys play this YUV file posted by Brijesh in YUVTool, It shows both the fields are separate which means VFCC captures interlaced input as field separated. One more thing is to observe closely is "In Frame-16, bottom field has 1st vertical jump, In Frame-22, again bottom field has (2nd) jump, In Frame-23 both the fields have jump.

    So what we understood is,

    1) VPSS capture hardware misses/duplicates some of the scan lines of the captured video.

    2) Both the fields individually has jumps, so when it is encoded/rendered as Frame, it shows continuous and big jumps

    3) And as a result encoded data (in capture_encode demo) has jumping interlaced encoded video.

    We also did the same thing with EVM board with EIO which has TVP7002 decoder chip, in that also we are getting jumpy encoded video (posted by Brijesh) in above post. So the issue is not with the decoder chips which we used in our product (correct if we are wrong).

    Please respond quickly and give some directions so that we can move ahead.

    Regards,

    Hitesh

  • Hi Hitesh/Brihesh,

    We will download the YUV and test in stand-alone. I am still having soem doubts.

    1) What is the behaviour for this YUV with "encode" demo?

    2) Your earlier thread said, Capture(Interlaced) -> DEI -> Encode works properly. is this with TVP7002 as decoder?

    Santhosh,

    Please encode this yuv in stand-alone and let us know the behaviour.

    Thanks

    Ram

  • Hi Brijesh/Hitesh,

    Is it possible to share your ilclient for Capture--> encode example with TVP7002 as decoder for interlace encoding so that, I will try to reproduce the issue here?

    Thanks

    Ramprasad

  • Hitesh has already concluded saying that the issue is with capture device and not encoder HW/SW. And the same was even said by Ram in earlier replies. So now we will have to look more into capture HW rather than doubting on encoder.

    I could download the YUV but not able to play it or encode it. Is it PAL 576i ? 

    Question : For time being, is it okay if you that capture device captures in progressive mode and encoder streams it into interlaced bit stream ? This would be one more test to rule out doubt on encoder. 

    Capture :: 720 x 576 progressive

    Encoder Settings : 

     pVidEncComPvt->tVedEncInBufsPtr->contentType = IVIDEO_INTERLACED;
     pVidEncComPvt->tVedEncInBufsPtr->dataLayout = IVIDEO_FIELD_INTERLEAVED; Width = capture_width = 720 Height = Capture_height >> 1 = 288

    Thanks,

    Santosh


  • Hi Ram, Santosh,

    Please find our answers in-line to your questions.

    1) What is the behaviour for this YUV with "encode" demo?

    - YUV file that we captured is YCbCr and encode only demo requires YUV420SemiPlanar.

    - YUV file it self has jumping effect so it will also propogate to encoder as well.

    - Can you check that YUV file and let us know what is reason behind such jumping ? Am I doing any wrong in capture configuration or this is something know isuue in HDVPSS driver itself ?

    2) Your earlier thread said, Capture(Interlaced) -> DEI -> Encode works properly. is this with TVP7002 as decoder?

    - This is working for any decoder chip (TVP7002, ADV7611 and FPGA SDI decoder core)

    - This is only with progressive encoding while DEI is enabled.

    - Our observation is that DEI removes jumping effect of captured YUV data so encoder encodes it properly and we didn't have any jumping effects.

    Let me know if you need any more information.

  • Hi Ram,

    Please find attached ilclient.c and ilclient_utils.c

    0753.ilclient.c
    /*
     *  Copyright (c) 2010-2011, Texas Instruments Incorporated
     *
     *  Redistribution and use in source and binary forms, with or without
     *  modification, are permitted provided that the following conditions
     *  are met:
     *
     *  *  Redistributions of source code must retain the above copyright
     *     notice, this list of conditions and the following disclaimer.
     *
     *  *  Redistributions in binary form must reproduce the above copyright
     *     notice, this list of conditions and the following disclaimer in the
     *     documentation and/or other materials provided with the distribution.
     *
     *  *  Neither the name of Texas Instruments Incorporated nor the names of
     *     its contributors may be used to endorse or promote products derived
     *     from this software without specific prior written permission.
     *
     *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
     *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
     *  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     *  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
     *  CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
     *  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
     *  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
     *  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     *  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
     *  OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
     *  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     *
     *  Contact information for paper mail:
     *  Texas Instruments
     *  Post Office Box 655303
     *  Dallas, Texas 75265
     *  Contact information:
     *  http://www-k.ext.ti.com/sc/technical-support/product-information-centers.htm?
     *  DCMP=TIHomeTracking&HQS=Other+OT+home_d_contact
     *  ============================================================================
     *
     */
    
    /**
     *******************************************************************************
     *  @file  capture_encode_test.c
     *  @brief This file contains all Functions related to Test Application
     *
     *         This is the example IL Client support to create, configure & chaining
     *         of single channel omx-components using non tunneling 
     *         mode
     *
     *  @rev 1.0
     *******************************************************************************
     */
    
    /*******************************************************************************
     *                             Compilation Control Switches
     *******************************************************************************/
    /* None */
    
    /*******************************************************************************
     *                             INCLUDE FILES
     *******************************************************************************/
    
    /*--------------------- system and platform files ----------------------------*/
    #include <stdlib.h>
    #include <stdio.h>
    #include <pthread.h>
    #include <unistd.h>
    #include <xdc/std.h>
    
    /*-------------------------program files -------------------------------------*/
    #include "ti/omx/interfaces/openMaxv11/OMX_Core.h"
    #include "ti/omx/interfaces/openMaxv11/OMX_Component.h"
    #include "ilclient.h"
    #include "ilclient_utils.h"
    #include <omx_venc.h>
    #include <omx_vfpc.h>
    #include <omx_vfdc.h>
    #include <omx_vfcc.h>
    #include <omx_ctrl.h>
    
    OMX_BOOL gILClientExit = OMX_FALSE;
    typedef void *(*ILC_StartFcnPtr) (void *);
    /* ========================================================================== */
    /**
     * IL_ClientCbEventHandler() : This method is the event handler implementation to 
     * handle events from the OMX Derived component
     *
     * @param hComponent        : Handle to the component
     * @param ptrAppData        : 
     * @param eEvent            :
     * @param nData1            :
     * @param nData2            :
     * @param pEventData        :
     *
     *  @return      
     *  OMX_ErrorNone = Successful 
     *
     *  Other_value = Failed (Error code is returned)
     *
     */
    /* ========================================================================== */
    OMX_ERRORTYPE IL_ClientCbEventHandler (OMX_HANDLETYPE hComponent,
                                                  OMX_PTR ptrAppData,
                                                  OMX_EVENTTYPE eEvent,
                                                  OMX_U32 nData1, OMX_U32 nData2, 
                                                  OMX_PTR pEventData)
    {
      IL_CLIENT_COMP_PRIVATE *comp;
    
      comp = ptrAppData;
    
      printf ("got event");
      if (eEvent == OMX_EventCmdComplete)
      {
        if (nData1 == OMX_CommandStateSet)
        {
          printf ("State changed to: ");
          switch ((int) nData2)
          {
            case OMX_StateInvalid:
              printf ("OMX_StateInvalid \n");
              break;
            case OMX_StateLoaded:
              printf ("OMX_StateLoaded \n");
              break;
            case OMX_StateIdle:
              printf ("OMX_StateIdle \n");
              break;
            case OMX_StateExecuting:
              printf ("OMX_StateExecuting \n");
              break;
            case OMX_StatePause:
              printf ("OMX_StatePause\n");
              break;
            case OMX_StateWaitForResources:
              printf ("OMX_StateWaitForResources\n");
              break;
          }
          /* post an semaphore, so that in IL Client we can confirm the state
             change */
          semp_post (comp->done_sem);
        }
        else if (OMX_CommandPortEnable || OMX_CommandPortDisable)
        {
          printf ("Enable/Disable Event \n");
          semp_post (comp->port_sem);
        }
      }
      else if (eEvent == OMX_EventBufferFlag)
      {
        printf ("OMX_EventBufferFlag \n");
        if ((int) nData2 == OMX_BUFFERFLAG_EOS)
        {
          printf ("got EOS event \n");
          semp_post (comp->eos);
        }
      }
      else if (eEvent == OMX_EventError)
      {
        printf ("*** unrecoverable error: %s (0x%lx) \n",
                IL_ClientErrorToStr (nData1), nData1);
        printf ("Press a key to proceed\n");
      }
      else
      {
        printf ("unhandled event, param1 = %i, param2 = %i \n", (int) nData1,
                (int) nData2);
      }
    
      return OMX_ErrorNone;
    }
    
    /* ========================================================================== */
    /**
     * IL_ClientCbEmptyBufferDone() : This method is the callback implementation to 
     * handle EBD events from the OMX Derived component
     *
     * @param hComponent        : Handle to the component
     * @param ptrAppData        : app pointer, which was passed during the getHandle
     * @param pBuffer           : buffer header, for the buffer which is consumed
     *
     *  @return      
     *  OMX_ErrorNone = Successful 
     *
     *  Other_value = Failed (Error code is returned)
     *
     */
    /* ========================================================================== */
    
    OMX_ERRORTYPE IL_ClientCbEmptyBufferDone (OMX_HANDLETYPE hComponent,
                                              OMX_PTR ptrAppData, 
                                              OMX_BUFFERHEADERTYPE *pBuffer)
    {
    
      IL_CLIENT_COMP_PRIVATE *thisComp = (IL_CLIENT_COMP_PRIVATE *) ptrAppData;
      IL_CLIENT_INPORT_PARAMS *inPortParamsPtr;
      IL_CLIENT_PIPE_MSG localPipeMsg;
    
      OMX_ERRORTYPE eError = OMX_ErrorNone;
      int retVal = 0;
    
      inPortParamsPtr = thisComp->inPortParams + pBuffer->nInputPortIndex;
    
      /* if the buffer is from file i/o, write the free buffer header into ipbuf
         pipe, else keep it in its local pipe. From local pipe It would be given
         to remote component as "consumed buffer " */
      if (inPortParamsPtr->connInfo.remotePipe[0] == NULL)
      {
        /* write the empty buffer pointer to input pipe */
        retVal = write (inPortParamsPtr->ipBufPipe[1], &pBuffer, sizeof (pBuffer));
    
        if (sizeof (pBuffer) != retVal)
        {
          printf ("Error writing to Input buffer i/p Pipe!\n");
          eError = OMX_ErrorNotReady;
          return eError;
        }
      }
      else
      {
        /* Create a message that EBD is done and this buffer is ready to be
           recycled. This message will be read in buffer processing thread and and 
           remote component will be indicated about its status */
        localPipeMsg.cmd = IL_CLIENT_PIPE_CMD_EBD;
        localPipeMsg.pbufHeader = pBuffer;
        retVal = write (thisComp->localPipe[1],
                        &localPipeMsg, sizeof (IL_CLIENT_PIPE_MSG));
        if (sizeof (IL_CLIENT_PIPE_MSG) != retVal)
        {
          printf ("Error writing to local Pipe!\n");
          eError = OMX_ErrorNotReady;
          return eError;
        }
    
      }
    
      return eError;
    }
    
    /* ========================================================================== */
    /**
     * IL_ClientCbFillBufferDone() : This method is the callback implementation to 
     * handle FBD events from the OMX Derived component
     *
     * @param hComponent        : Handle to the component
     * @param ptrAppData        : app pointer, which was passed during the getHandle
     * @param pBuffer           : buffer header, for the buffer which is produced
     *
     *  @return      
     *  OMX_ErrorNone = Successful 
     *
     *  Other_value = Failed (Error code is returned)
     *
     */
    /* ========================================================================== */
    
    OMX_ERRORTYPE IL_ClientCbFillBufferDone (OMX_HANDLETYPE hComponent,
                                             OMX_PTR ptrAppData, 
                                             OMX_BUFFERHEADERTYPE *pBuffer)
    {
    
      IL_CLIENT_COMP_PRIVATE *thisComp = (IL_CLIENT_COMP_PRIVATE *) ptrAppData;
      IL_CLIENT_OUTPORT_PARAMS *outPortParamsPtr;
      IL_CLIENT_PIPE_MSG localPipeMsg;
    
      OMX_ERRORTYPE eError = OMX_ErrorNone;
      int retVal = 0;
    
      /* get the pipe corrsponding to this port, portIndex is part of bufferheader
         structure */
      outPortParamsPtr =
        thisComp->outPortParams + (pBuffer->nOutputPortIndex -
                                   thisComp->startOutportIndex);
    
      /* if the buffer is from file i/o, write the free buffer header into outbuf
         pipe, else keep it in its local pipe. From local pipe It would be given
         to remote component as "filled buffer " */
    
      if (outPortParamsPtr->connInfo.remotePipe[0] == NULL)
      {
        /* write the empty buffer pointer to input pipe */
        retVal = write (outPortParamsPtr->opBufPipe[1], &pBuffer, sizeof (pBuffer));
    
        if (sizeof (pBuffer) != retVal)
        {
          printf ("Error writing to Input buffer i/p Pipe!\n");
          eError = OMX_ErrorNotReady;
          return eError;
        }
      }
      else
      {
        /* Create a message that FBD is done and this buffer is ready to be used
           by other compoenent. This message will be read in buffer processing
           thread and and remote component will be indicated about its status */
        localPipeMsg.cmd = IL_CLIENT_PIPE_CMD_FBD;
        localPipeMsg.pbufHeader = pBuffer;
        retVal = write (thisComp->localPipe[1],
                        &localPipeMsg, sizeof (IL_CLIENT_PIPE_MSG));
        if (sizeof (IL_CLIENT_PIPE_MSG) != retVal)
        {
          printf ("Error writing to local Pipe!\n");
          eError = OMX_ErrorNotReady;
          return eError;
        }
    
      }
      return eError;
    }
    
    /* ========================================================================== */
    /**
     * IL_ClientOutputBitStreamWriteTask() : This task function is file writetask for
     * encoder component. 
     *
     * @param threadsArg        : Handle to the application
     *
     */
    /* ========================================================================== */
    
    void IL_ClientOutputBitStreamWriteTask (void *threadsArg)
    {
      //unsigned int dataRead = 0;
      OMX_ERRORTYPE err = OMX_ErrorNone;
      IL_CLIENT_COMP_PRIVATE *encILComp = NULL;
      OMX_BUFFERHEADERTYPE *pBufferOut = NULL;
      static unsigned int frameCounter = 0;
    
      encILComp = ((IL_Client *) threadsArg)->encILComp;
    
      /* use the initial i/p buffers and make empty this buffer calls */
      err = IL_ClientEncUseInitialOutputResources (encILComp);
    
      while (1)
      {
        /* Read filled buffer pointer from the pipe */
        read (encILComp->outPortParams->opBufPipe[0],
              &pBufferOut, sizeof (pBufferOut));
    
        /* write data to output file */
        fwrite (pBufferOut->pBuffer,
                sizeof (char),
                pBufferOut->nFilledLen, ((IL_Client *) threadsArg)->fOut);
        frameCounter++;
        if((frameCounter == encILComp->numFrames) || (gILClientExit == OMX_TRUE))
        {
          frameCounter = 0;
          semp_post(encILComp->eos);
          pthread_exit(encILComp);
        }
    
        /* Pass the input buffer to the component */
        err = OMX_FillThisBuffer (encILComp->handle, pBufferOut);
    
        if (OMX_ErrorNone != err)
        {
          /* put back the frame in pipe and wait for state change */
          write (encILComp->outPortParams->opBufPipe[1],
                 &pBufferOut, sizeof (pBufferOut));
          printf (" waiting for action from IL Client \n");
    
          /* since in this example we are changing states in other thread it will
             return error for giving ETB/FTB calls in non-execute state. Since
             example is shutting down, we exit the thread */
    
          pthread_exit (encILComp);
    
        }
      }
    
    }
    
    /* ========================================================================== */
    /**
     * IL_ClientConnInConnOutTask() : This task function is for passing buffers from
     * one component to other connected component. This functions reads from local
     * pipe of a perticular component , and takes action based on the message in the
     * pipe. This pipe is written by callback ( EBD/FBD) function from component and
     * from other component threads, which writes into this pipe for buffer 
     * communication.
     *
     * @param threadsArg        : Handle to a particular component
     *
     */
    /* ========================================================================== */
    
    void IL_ClientConnInConnOutTask (void *threadsArg)
    {
      IL_CLIENT_PIPE_MSG pipeMsg;
      IL_CLIENT_COMP_PRIVATE *thisComp = (IL_CLIENT_COMP_PRIVATE *) threadsArg;
      OMX_ERRORTYPE err = OMX_ErrorNone;
    
      /* Initially pipes will not have any buffers, so components needs to be given 
         empty buffers for output ports. Input bufefrs are given by other
         component, or file read task */
      IL_ClientUseInitialOutputResources (thisComp);
    
      for (;;)
      {
        usleep(10000);
    
        /* Read from its own local Pipe */
        read (thisComp->localPipe[0], &pipeMsg, sizeof (IL_CLIENT_PIPE_MSG));
    
        /* check the function type */
    
        switch (pipeMsg.cmd)
        {
    
          case IL_CLIENT_PIPE_CMD_EXIT:
            printf ("exiting thread \n ");
            pthread_exit (thisComp);
            break;
          case IL_CLIENT_PIPE_CMD_ETB:
            err = IL_ClientProcessPipeCmdETB (thisComp, &pipeMsg);
            /* If not in proper state, bufers may not be accepted by component */
            if (OMX_ErrorNone != err)
            {
              write (thisComp->localPipe[1], &pipeMsg, sizeof (IL_CLIENT_PIPE_MSG));
              printf (" ETB: wait \n");
              /* since in this example we are changing states in other thread it
                 will return error for giving ETB/FTB calls in non-execute state.
                 Since example is shutting down, we exit the thread */
              pthread_exit (thisComp);
              /* if error is incorrect state operation, wait for state to change */
              /* waiting mechanism should be implemented here */
            }
    
            break;
          case IL_CLIENT_PIPE_CMD_FTB:
            err = IL_ClientProcessPipeCmdFTB (thisComp, &pipeMsg);
    
            if (OMX_ErrorNone != err)
            {
              write (thisComp->localPipe[1], &pipeMsg, sizeof (IL_CLIENT_PIPE_MSG));
              printf (" FTB: wait \n");
              /* if error is incorrect state operation, wait for state to change */
              /* waiting mechanism should be implemented here */
              /* since in this example we are changing states in other thread it
                 will return error for giving ETB/FTB calls in non-execute state.
                 Since example is shutting down, we exit the thread */
              pthread_exit (thisComp);
    
            }
            break;
    
          case IL_CLIENT_PIPE_CMD_EBD:
            IL_ClientProcessPipeCmdEBD (thisComp, &pipeMsg);
    
            break;
          case IL_CLIENT_PIPE_CMD_FBD:
            IL_ClientProcessPipeCmdFBD (thisComp, &pipeMsg);
            break;
          default:
            break;
        }
      }
    }
    
    /* ========================================================================== */
    /**
     * IL_ClientProcessPipeCmdETB() : This function passes the bufefrs to component
     * for consuming. This buffer will come from other component as an output. To 
     * consume it, IL client finds its bufefr header (for consumer component), and 
     * calls ETB call.
     * @param thisComp        : Handle to a particular component
     * @param pipeMsg         : message structure, which is written in response to 
     *                          callbacks
     *
     */
    /* ========================================================================== */
    
    OMX_ERRORTYPE IL_ClientProcessPipeCmdETB (IL_CLIENT_COMP_PRIVATE *thisComp,
                                              IL_CLIENT_PIPE_MSG *pipeMsg)
    {
      OMX_ERRORTYPE err = OMX_ErrorNone;
      OMX_BUFFERHEADERTYPE *pBufferIn;
    
      /* search its own buffer header based on submitted by connected comp */
      IL_ClientUtilGetSelfBufHeader (thisComp, pipeMsg->bufHeader.pBuffer,
                                     ILCLIENT_INPUT_PORT,
                                     pipeMsg->bufHeader.nInputPortIndex,
                                     &pBufferIn);
    
      /* populate buffer header */
      pBufferIn->nFilledLen = pipeMsg->bufHeader.nFilledLen;
      pBufferIn->nOffset = pipeMsg->bufHeader.nOffset;
      pBufferIn->nTimeStamp = pipeMsg->bufHeader.nTimeStamp;
      pBufferIn->nFlags = pipeMsg->bufHeader.nFlags;
      pBufferIn->hMarkTargetComponent = pipeMsg->bufHeader.hMarkTargetComponent;
      pBufferIn->pMarkData = pipeMsg->bufHeader.pMarkData;
      pBufferIn->nTickCount = 0;
    
      /* call etb to the component */
      err = OMX_EmptyThisBuffer (thisComp->handle, pBufferIn);
      return (err);
    }
    
    /* ========================================================================== */
    /**
     * IL_ClientProcessPipeCmdFTB() : This function passes the bufefrs to component
     * for consuming. This buffer will come from other component as consumed at input
     * To  consume it, IL client finds its bufefr header (for consumer component),
     * and calls FTB call.
     * @param thisComp        : Handle to a particular component
     * @param pipeMsg         : message structure, which is written in response to 
     *                          callbacks
     *
     */
    /* ========================================================================== */
    
    OMX_ERRORTYPE IL_ClientProcessPipeCmdFTB (IL_CLIENT_COMP_PRIVATE *thisComp,
                                              IL_CLIENT_PIPE_MSG *pipeMsg)
    {
      OMX_ERRORTYPE err = OMX_ErrorNone;
      OMX_BUFFERHEADERTYPE *pBufferOut;
    
      /* search its own buffer header based on submitted by connected comp */
      IL_ClientUtilGetSelfBufHeader (thisComp, pipeMsg->bufHeader.pBuffer,
                                     ILCLIENT_OUTPUT_PORT,
                                     pipeMsg->bufHeader.nOutputPortIndex,
                                     &pBufferOut);
    
      /* call etb to the component */
      err = OMX_FillThisBuffer (thisComp->handle, pBufferOut);
    
      return (err);
    }
    
    /* ========================================================================== */
    /**
     * IL_ClientProcessPipeCmdEBD() : This function passes the bufefrs to component
     * for consuming. This empty buffer will go to other component to be reused at 
     * output port.
     * @param thisComp        : Handle to a particular component
     * @param pipeMsg         : message structure, which is written in response to 
     *                          callbacks
     *
     */
    /* ========================================================================== */
    
    OMX_ERRORTYPE IL_ClientProcessPipeCmdEBD (IL_CLIENT_COMP_PRIVATE *thisComp,
                                              IL_CLIENT_PIPE_MSG *pipeMsg)
    {
      OMX_ERRORTYPE err = OMX_ErrorNone;
      OMX_BUFFERHEADERTYPE *pBufferIn;
      IL_CLIENT_PIPE_MSG remotePipeMsg;
      IL_CLIENT_INPORT_PARAMS *inPortParamsPtr;
      int retVal = 0;
    
      pBufferIn = pipeMsg->pbufHeader;
    
      /* find the input port structure (pipe) */
      inPortParamsPtr = thisComp->inPortParams + pBufferIn->nInputPortIndex;
    
      remotePipeMsg.cmd = IL_CLIENT_PIPE_CMD_FTB;
      remotePipeMsg.bufHeader.pBuffer = pBufferIn->pBuffer;
      remotePipeMsg.bufHeader.nOutputPortIndex =
        inPortParamsPtr->connInfo.remotePort;
    
      /* write the fill buffer message to remote pipe */
      retVal = write (inPortParamsPtr->connInfo.remotePipe[1],
                      &remotePipeMsg, sizeof (IL_CLIENT_PIPE_MSG));
    
      if (sizeof (IL_CLIENT_PIPE_MSG) != retVal)
      {
        printf ("Error writing to remote Pipe!\n");
        err = OMX_ErrorNotReady;
        return err;
      }
    
      return (err);
    }
    
    /* ========================================================================== */
    /**
     * IL_ClientProcessPipeCmdFBD() : This function passes the bufefrs to component
     * for consuming. This buffer will go to other component to be consumed at input
     * port.
     * @param thisComp        : Handle to a particular component
     * @param pipeMsg         : message structure, which is written in response to 
     *                          callbacks
     *
     */
    /* ========================================================================== */
    
    OMX_ERRORTYPE IL_ClientProcessPipeCmdFBD (IL_CLIENT_COMP_PRIVATE *thisComp,
                                              IL_CLIENT_PIPE_MSG *pipeMsg)
    {
      OMX_ERRORTYPE err = OMX_ErrorNone;
      OMX_BUFFERHEADERTYPE *pBufferOut;
      IL_CLIENT_PIPE_MSG remotePipeMsg;
      IL_CLIENT_OUTPORT_PARAMS *outPortParamsPtr;
      int retVal = 0;
      pBufferOut = pipeMsg->pbufHeader;
    
      remotePipeMsg.cmd = IL_CLIENT_PIPE_CMD_ETB;
      remotePipeMsg.bufHeader.pBuffer = pBufferOut->pBuffer;
    
      outPortParamsPtr =
        thisComp->outPortParams + (pBufferOut->nOutputPortIndex -
                                   thisComp->startOutportIndex);
    
      /* populate buffer header */
      remotePipeMsg.bufHeader.nFilledLen = pBufferOut->nFilledLen;
      remotePipeMsg.bufHeader.nOffset = pBufferOut->nOffset;
      remotePipeMsg.bufHeader.nTimeStamp = pBufferOut->nTimeStamp;
      remotePipeMsg.bufHeader.nFlags = pBufferOut->nFlags;
      remotePipeMsg.bufHeader.hMarkTargetComponent =
        pBufferOut->hMarkTargetComponent;
      remotePipeMsg.bufHeader.pMarkData = pBufferOut->pMarkData;
      remotePipeMsg.bufHeader.nTickCount = pBufferOut->nTickCount;
      remotePipeMsg.bufHeader.nInputPortIndex =
        outPortParamsPtr->connInfo.remotePort;
    
      /* write the fill buffer message to remote pipe */
      retVal = write (outPortParamsPtr->connInfo.remotePipe[1],
                      &remotePipeMsg, sizeof (IL_CLIENT_PIPE_MSG));
    
      if (sizeof (IL_CLIENT_PIPE_MSG) != retVal)
      {
        printf ("Error writing to remote Pipe!\n");
        err = OMX_ErrorNotReady;
        return err;
      }
    
      return (err);
    }
    
    /* ========================================================================== */
    /**
     * IL_ClientSIGINTHandler() : This function is the SIGINT handler that will be
     * called when the user invokes CTRL-C. This is for demonstration purpose. Also
     * it assumes that the OMX chain is in EXECUTING state when CTRL-C is invoked
     *
     * @param sig             : Signal identifier
     */
    /* ========================================================================== */
    void IL_ClientSIGINTHandler(int sig)
    {
     gILClientExit = OMX_TRUE;
    }
    
    /* ========================================================================== */
    /**
     * Capture_Encode_Example() : This method is the IL Client implementation for 
     * connecting capture, dei and display, and Encode OMX components. This function
     *  creates configures, and connects the components.
     * it manages the buffer communication.
     *
     * @param args         : parameters( widt,height,frame rate etc) for this function
     *
     *  @return      
     *  OMX_ErrorNone = Successful 
     *
     *  Other_value = Failed (Error code is returned)
     *
     */
    /* ========================================================================== */
    
    /* Main IL Client application to create , intiate and connect components */
    int Capture_Encode_Example (IL_ARGS *args)
    {
      IL_Client *pAppData = NULL;
      OMX_ERRORTYPE eError = OMX_ErrorNone;
      OMX_U32 i, j;
      OMX_S32 ret_value;
      IL_CLIENT_PIPE_MSG pipeMsg;
      IL_CLIENT_OUTPORT_PARAMS *outPortParamsPtr = NULL;
      gILClientExit = OMX_FALSE;
    	static int interlaced = 1;
    
      /* Initialize application specific data structures and buffer management
         data */
      IL_ClientInit (&pAppData, args->mode, args->frame_rate,
    			args->bit_rate, args->num_frames, args->display_id, args->scalling, args->width, args->height, args->bframe);
    	//EI Start
    	if (strcmp ((char *) pAppData->mode, "1080i") == 0)
    	{
    		interlaced = 0;
    	}
    	//EI End
      printf (" openeing file \n");
    
      /* Open the file of data to be rendered.  */
      pAppData->fOut = fopen (args->output_file, "wb");
    
      if (pAppData->fOut == NULL)
      {
        printf ("Error: failed to open the file %s for writing \n",
                args->output_file);
        goto EXIT;
      }
    
      /* Initialize application / IL Client callback functions */
      /* Callbacks are passed during getHandle call to component, component uses
         these callabacks to communicate with IL Client */
      /* event handler is to handle the state changes , omx commands and any
         message for IL client */
      pAppData->pCb.EventHandler = IL_ClientCbEventHandler;
    
      /* Empty buffer done is data callback at the input port, where component let
         the application know that buffer has been consumed, this is not applicabel 
         if there is no input port in the component */
      pAppData->pCb.EmptyBufferDone = IL_ClientCbEmptyBufferDone;
    
      /* fill buffer done is callback at the output port, where component lets the
         application know that an output buffer is available with the processed data 
       */
      pAppData->pCb.FillBufferDone = IL_ClientCbFillBufferDone;
    
    	/******************************************************************************/
      /* Create the capture Component, component handle would be returned component 
         name is unique and fixed for a componnet, callback are passed to
         component in this function. component would be in loaded state post this
         call */
    
      eError =
        OMX_GetHandle (&pAppData->pCapHandle,
                       (OMX_STRING) "OMX.TI.VPSSM3.VFCC", pAppData->capILComp,
                       &pAppData->pCb);
    
      printf (" capture compoenent is created \n");
    
      if ((eError != OMX_ErrorNone) || (pAppData->pCapHandle == NULL))
      {
        printf ("Error in Get Handle function : %s \n",
                IL_ClientErrorToStr (eError));
        goto EXIT;
      }
    
      pAppData->capILComp->handle = pAppData->pCapHandle;
    
      /* This is control component, without ports. It is implemented as OMX
         component */
      eError =
        OMX_GetHandle (&pAppData->pTvpHandle,
                       (OMX_STRING) "OMX.TI.VPSSM3.CTRL.TVP",
                       pAppData->capILComp, &pAppData->pCb);
    
      printf (" control TVP compoenent is created \n");
    
      if ((eError != OMX_ErrorNone) || (pAppData->pTvpHandle == NULL))
      {
        printf ("Error in Get Handle function : %s \n",
                IL_ClientErrorToStr (eError));
        goto EXIT;
      }
    
      /* Configute the capture componet */
      /* calling OMX_Setparam in this function */
      IL_ClientSetCaptureParams (pAppData);
    
      printf ("enable capture output port \n");
    
      OMX_SendCommand (pAppData->pCapHandle, OMX_CommandPortEnable,
                       OMX_VFCC_OUTPUT_PORT_START_INDEX, NULL);
    
      semp_pend (pAppData->capILComp->port_sem);
    
    	/******************************************************************************/
      /* Create DEI component, it creatd OMX compponent for dei writeback, Int
         this client we are passing the same callbacks to all the components */
    
      eError =
        OMX_GetHandle (&pAppData->pDeiHandle,
                       (OMX_STRING) "OMX.TI.VPSSM3.VFPC.DEIMDUALOUT",
                       pAppData->deiILComp, &pAppData->pCb);
    
      if ((eError != OMX_ErrorNone) || (pAppData->pDeiHandle == NULL))
      {
        printf ("Error in Get Handle function : %s \n",
                IL_ClientErrorToStr (eError));
        goto EXIT;
      }
      pAppData->deiILComp->handle = pAppData->pDeiHandle;
    
      printf (" dei compoenent is created \n");
    
      /* omx calls are made in this function for setting the parameters for DEI
         component, For clarity purpose it is written as separate function */
    
      IL_ClientSetDeiParams (pAppData);
    
      /* enable input and output port */
      /* as per openmax specs all the ports should be enabled by default but EZSDK
         OMX component does not enable it hence we manually need to enable it. */
    
      printf ("enable dei input port \n");
      OMX_SendCommand (pAppData->pDeiHandle, OMX_CommandPortEnable,
                       OMX_VFPC_INPUT_PORT_START_INDEX, NULL);
    
      /* wait for both ports to get enabled, event handler would be notified from
         the component after enabling the port, which inturn would post this
         semaphore */
      semp_pend (pAppData->deiILComp->port_sem);
    
    	//EI Start
    	if (interlaced)
    	{
      printf ("enable dei output port 0 \n");
      OMX_SendCommand (pAppData->pDeiHandle, OMX_CommandPortEnable,
                       OMX_VFPC_OUTPUT_PORT_START_INDEX, NULL);
      semp_pend (pAppData->deiILComp->port_sem);
    	}
    	//EI End
    
      printf ("enable dei output port 1 \n");
      OMX_SendCommand (pAppData->pDeiHandle, OMX_CommandPortEnable,
                       OMX_VFPC_OUTPUT_PORT_START_INDEX + 1, NULL);
      semp_pend (pAppData->deiILComp->port_sem);
    
    	/******************************************************************************/
      /* Create the H264 encoder Component, component handle would be returned
         component name is unique and fixed for a componnet, callback are passed
         to componnet in this function. component would be loaded state post this
         call */
    
      eError =
        OMX_GetHandle (&pAppData->pEncHandle,
                       (OMX_STRING) "OMX.TI.DUCATI.VIDENC", pAppData->encILComp,
                       &pAppData->pCb);
    
      printf (" encoder compoenent is created \n");
    
      if ((eError != OMX_ErrorNone) || (pAppData->pEncHandle == NULL))
      {
        printf ("Error in Get Handle function : %s \n",
                IL_ClientErrorToStr (eError));
        goto EXIT;
      }
    
      pAppData->encILComp->handle = pAppData->pEncHandle;
    
      /* Configute the encode componet, ports are default enabled for encode comp,
         so no need to enable from IL Client */
      /* calling OMX_Setparam in this function */
      IL_ClientSetEncodeParams (pAppData);
    
    	/******************************************************************************/
    
    	/******************************************************************************/
    	/* Create and Configure the display component. It will use VFDC component on  */
    	/* media controller.                                                          */
    	/******************************************************************************/
    	//EI Start
    	if (interlaced)
    	{
      /* Create the display component */
      /* getting display component handle */
      eError =
        OMX_GetHandle (&pAppData->pDisHandle, "OMX.TI.VPSSM3.VFDC",
                       pAppData->disILComp, &pAppData->pCb);
      if (eError != OMX_ErrorNone)
      {
        ERROR ("failed to get handle\n");
      }
    
      printf ("found handle %p for component %s \n", pAppData->pDisHandle,
              "OMX.TI.VPSSM3.VFDC");
    
      pAppData->disILComp->handle = pAppData->pDisHandle;
    
      printf (" got display handle \n");
      /* getting display controller component handle, Display contrller is
         implemented as an OMX component, however it does not has any input or
         output ports. It is used only for controling display hw */
      eError =
        OMX_GetHandle (&pAppData->pctrlHandle, "OMX.TI.VPSSM3.CTRL.DC",
                       pAppData->disILComp, &pAppData->pCb);
      if (eError != OMX_ErrorNone)
      {
        ERROR ("failed to get handle\n");
      }
    
      printf ("found handle %p for component %s\n", pAppData->pctrlHandle,
              "OMX.TI.VPSSM3.CTRL.DC");
    
      /* omx calls are made in this function for setting the parameters for display 
         component, For clarity purpose it is written as separate function */
    
      IL_ClientSetDisplayParams (pAppData);
    
      /* as per openmax specs all the ports should be enabled by default but EZSDK 
         OMX component does not enable it hence we manually need to enable it */
      printf ("enable input port \n");
    
      OMX_SendCommand (pAppData->pDisHandle, OMX_CommandPortEnable,
                       OMX_VFDC_INPUT_PORT_START_INDEX, NULL);
    
      /* wait for port to get enabled, event handler would be notified from the
         component after enabling the port, which inturn would post this 
         semaphore */
    
      semp_pend (pAppData->disILComp->port_sem);
    	}
    	//EI End
    	/******************************************************************************/
    
      /* Connect the capture to dei, This application uses 'pipe' to pass the
         buffers between different components. each compponent has a local pipe,
         which It reads for taking buffers. By connecting this functions informs
         about local pipe to other component, so that other component can pass
         buffers to this 'remote' pipe */
    
      printf (" connect call for capture-Dei \n ");
    
      IL_ClientConnectComponents (pAppData->capILComp,
                                  OMX_VFCC_OUTPUT_PORT_START_INDEX,
                                  pAppData->deiILComp,
                                  OMX_VFPC_INPUT_PORT_START_INDEX);
    
      printf (" connect call for dei- encoder \n ");
    
      IL_ClientConnectComponents (pAppData->deiILComp,
                                  OMX_VFPC_OUTPUT_PORT_START_INDEX + 1,
                                  pAppData->encILComp, OMX_VIDENC_INPUT_PORT);
    	//EI Start
    	if (interlaced)
    	{
      printf (" connect call for dei-display \n ");
    
      /* Connect the dei to display, even ports are concted to encoder, while odd
         ports would be connected to display */
      IL_ClientConnectComponents (pAppData->deiILComp,
                                  OMX_VFPC_OUTPUT_PORT_START_INDEX,
                                  pAppData->disILComp,
                                  OMX_VFDC_INPUT_PORT_START_INDEX);
    	}
    	//EI End
    	/******************************************************************************/
    
      /* OMX_SendCommand expecting OMX_StateIdle, after this command component will 
         wait for all buffers to be allocated as per omx buffers are created during 
         loaded to Idle transition IF ports are enabled ) */
    
      eError =
        OMX_SendCommand (pAppData->pTvpHandle, OMX_CommandStateSet,
                         OMX_StateIdle, NULL);
      if (eError != OMX_ErrorNone)
      {
        printf ("Error in SendCommand()-OMX_StateIdle State set : %s \n",
                IL_ClientErrorToStr (eError));
        goto EXIT;
      }
    
      semp_pend (pAppData->capILComp->done_sem);
    
      eError =
        OMX_SendCommand (pAppData->pCapHandle, OMX_CommandStateSet,
                         OMX_StateIdle, NULL);
      if (eError != OMX_ErrorNone)
      {
        printf ("Error in SendCommand()-OMX_StateIdle State set : %s \n",
                IL_ClientErrorToStr (eError));
        goto EXIT;
      }
    
      /* Allocate I/O Buffers; componnet would allocated buffers and would return
         the buffer header containing the pointer to buffer */
      for (i = 0; i < pAppData->capILComp->outPortParams->nBufferCountActual; i++)
      {
        eError = OMX_AllocateBuffer (pAppData->pCapHandle,
                                     &pAppData->capILComp->outPortParams->
                                     pOutBuff[i],
                                     OMX_VFCC_OUTPUT_PORT_START_INDEX, pAppData,
                                     pAppData->capILComp->outPortParams->
                                     nBufferSize);
    
        if (eError != OMX_ErrorNone)
        {
          printf
            ("Capture: Error in OMX_AllocateBuffer() : %s \n",
             IL_ClientErrorToStr (eError));
          goto EXIT;
        }
      }
      printf (" Capture outport buffers allocated \n ");
    
      semp_pend (pAppData->capILComp->done_sem);
    
      printf (" Capture is in IDLE state \n");
    	/******************************************************************************/
    
      eError =
        OMX_SendCommand (pAppData->pDeiHandle, OMX_CommandStateSet,
                         OMX_StateIdle, NULL);
      if (eError != OMX_ErrorNone)
      {
        printf ("Error in SendCommand()-OMX_StateIdle State set : %s \n",
                IL_ClientErrorToStr (eError));
        goto EXIT;
      }
    
      /* Since DEI is connected to capture output, buffers would be used from
         capture output port */
      for (i = 0; i < pAppData->deiILComp->inPortParams->nBufferCountActual; i++)
      {
    
        eError = OMX_UseBuffer (pAppData->pDeiHandle,
                                &pAppData->deiILComp->inPortParams->pInBuff[i],
                                OMX_VFPC_INPUT_PORT_START_INDEX,
                                pAppData->deiILComp,
                                pAppData->capILComp->outPortParams->nBufferSize,
                                pAppData->capILComp->outPortParams->
                                pOutBuff[i]->pBuffer);
    
        if (eError != OMX_ErrorNone)
        {
          printf ("Error in OMX_UseBuffer()-input Port State set : %s \n",
                  IL_ClientErrorToStr (eError));
          goto EXIT;
        }
      }
      printf (" Dei input port use buffer done \n ");
    
      /* DEI is dual o/p port OMX component; allocate buffers on both ports */
    	//EI Start
    	if (interlaced)
    	{
    		j = 0;
    	}
    	else
    	{
    		j = 1;
    	}
    	//EI End
    	for (; j < pAppData->deiILComp->numOutport; j++)
      {
        outPortParamsPtr = pAppData->deiILComp->outPortParams + j;
        /* buffer alloaction for output port */
        for (i = 0; i < outPortParamsPtr->nBufferCountActual; i++)
        {
          eError = OMX_AllocateBuffer (pAppData->pDeiHandle,
                                       &outPortParamsPtr->pOutBuff[i],
                                       OMX_VFPC_OUTPUT_PORT_START_INDEX + j,
                                       pAppData, outPortParamsPtr->nBufferSize);
          if (eError != OMX_ErrorNone)
          {
            printf
              ("Error in OMX_AllocateBuffer()-Output Port State set : %s \n",
               IL_ClientErrorToStr (eError));
            goto EXIT;
          }
        }
      }
      printf (" DEI outport buffers allocated \n ");
    
      /* Wait for initialization to complete.. Wait for Idle stete of component
         after all buffers are alloacted componet would chnage to idle */
    
      semp_pend (pAppData->deiILComp->done_sem);
    
      printf (" DEI is in IDLE state \n");
    
    	/*******************************************************************************/
    
      /* OMX_SendCommand expecting OMX_StateIdle, after this command component
         would create codec, and will wait for all buffers to be allocated */
      eError =
        OMX_SendCommand (pAppData->pEncHandle, OMX_CommandStateSet,
                         OMX_StateIdle, NULL);
      if (eError != OMX_ErrorNone)
      {
        printf ("Error in SendCommand()-OMX_StateIdle State set : %s \n",
                IL_ClientErrorToStr (eError));
        goto EXIT;
      }
      /* since encoder is connected to dei, buffers are supplied by dei to
         encoder, so encoder does not allocate the buffers. However it is informed
         to use the buffers created by dei. encode component would create only
         buffer headers corresponding to these buffers */
    
      for (i = 0; i < pAppData->encILComp->inPortParams->nBufferCountActual; i++)
      {
    
        outPortParamsPtr = pAppData->deiILComp->outPortParams + 1;
    
        eError = OMX_UseBuffer (pAppData->pEncHandle,
                                &pAppData->encILComp->inPortParams->pInBuff[i],
                                OMX_VIDENC_INPUT_PORT,
                                pAppData->encILComp,
                                outPortParamsPtr->nBufferSize,
                                outPortParamsPtr->pOutBuff[i]->pBuffer);
    
        if (eError != OMX_ErrorNone)
        {
          printf ("Error in encode OMX_UseBuffer(): %s \n",
                  IL_ClientErrorToStr (eError));
          goto EXIT;
        }
      }
      printf (" encoder input port use buffer done \n ");
    
      /* in SDK conventionally output port allocates the buffers, encode would
         create the buffers which would be consumed by filewrite thread */
      /* buffer alloaction for output port */
      for (i = 0; i < pAppData->encILComp->outPortParams->nBufferCountActual; i++)
      {
        eError = OMX_AllocateBuffer (pAppData->pEncHandle,
                                     &pAppData->encILComp->outPortParams->
                                     pOutBuff[i], OMX_VIDENC_OUTPUT_PORT,
                                     pAppData,
                                     pAppData->encILComp->outPortParams->
                                     nBufferSize);
        if (eError != OMX_ErrorNone)
        {
          printf ("Error in OMX_AllocateBuffer()-Output Port State set : %s \n",
                  IL_ClientErrorToStr (eError));
          goto EXIT;
        }
      }
    
      printf (" encoder outport buffers allocated \n ");
    
      semp_pend (pAppData->encILComp->done_sem);
    
      printf (" Encoder state IDLE \n ");
    	/******************************************************************************/
    	//EI Start
    	if (interlaced)
    	{
      /* control component does not allocate any data buffers, It's interface is
         though as it is omx componenet */
      eError =
        OMX_SendCommand (pAppData->pctrlHandle, OMX_CommandStateSet,
                         OMX_StateIdle, NULL);
      if (eError != OMX_ErrorNone)
      {
        printf ("Error in SendCommand()-OMX_StateIdle State set : %s \n",
                IL_ClientErrorToStr (eError));
        goto EXIT;
      }
    
      semp_pend (pAppData->disILComp->done_sem);
    
      printf (" ctrl-dc state IDLE \n ");
    
      eError =
        OMX_SendCommand (pAppData->pDisHandle, OMX_CommandStateSet,
                         OMX_StateIdle, NULL);
      if (eError != OMX_ErrorNone)
      {
        printf ("Error in SendCommand()-OMX_StateIdle State set : %s \n",
                IL_ClientErrorToStr (eError));
        goto EXIT;
      }
      /* Since display has only input port and buffers are already created by DEI
         component, only use_buffer call is used at input port. there is no output
         port in the display component */
      for (i = 0; i < pAppData->disILComp->inPortParams->nBufferCountActual; i++)
      {
    
        outPortParamsPtr = pAppData->deiILComp->outPortParams;
    
        eError = OMX_UseBuffer (pAppData->pDisHandle,
                                &pAppData->disILComp->inPortParams->pInBuff[i],
                                OMX_VFDC_INPUT_PORT_START_INDEX,
                                pAppData->disILComp,
                                outPortParamsPtr->nBufferSize,
                                outPortParamsPtr->pOutBuff[i]->pBuffer);
    
        if (eError != OMX_ErrorNone)
        {
          printf ("Error in Display OMX_UseBuffer()- %s \n",
                  IL_ClientErrorToStr (eError));
          goto EXIT;
        }
      }
      printf (" display buffers allocated \n waiting for IDLE");
      semp_pend (pAppData->disILComp->done_sem);
    
      printf (" display state IDLE \n ");
    	}
    	//EI End
    	/******************************************************************************/
    	//EI Start
    	if (interlaced)
    	{
      /* change state tho execute, so that component can accept buffers from IL
         client. Please note the ordering of components is from consumer to
         producer component i.e. capture-dei-encoder/display */
      eError =
        OMX_SendCommand (pAppData->pctrlHandle, OMX_CommandStateSet,
                         OMX_StateExecuting, NULL);
      if (eError != OMX_ErrorNone)
      {
        printf ("Error in SendCommand()-OMX_StateIdle State set : %s \n",
                IL_ClientErrorToStr (eError));
        goto EXIT;
      }
    
      semp_pend (pAppData->disILComp->done_sem);
    
      printf (" display control state execute \n ");
    
      /* change state to execute so that buffers processing can start */
      eError =
        OMX_SendCommand (pAppData->pDisHandle, OMX_CommandStateSet,
                         OMX_StateExecuting, NULL);
      if (eError != OMX_ErrorNone)
      {
        printf ("Error from SendCommand-Executing State set :%s \n",
                IL_ClientErrorToStr (eError));
        goto EXIT;
      }
    
      semp_pend (pAppData->disILComp->done_sem);
    
      printf (" display state execute \n ");
    	}
    	//EI End
    	/******************************************************************************/
    
      /* change state to execute so that buffers processing can start */
      eError =
        OMX_SendCommand (pAppData->pEncHandle, OMX_CommandStateSet,
                         OMX_StateExecuting, NULL);
      if (eError != OMX_ErrorNone)
      {
        printf ("Error from SendCommand-Executing State set :%s \n",
                IL_ClientErrorToStr (eError));
        goto EXIT;
      }
    
      semp_pend (pAppData->encILComp->done_sem);
    
      printf (" encoder state execute \n ");
    	/******************************************************************************/
    
      /* change state to execute so that buffers processing can start */
      eError =
        OMX_SendCommand (pAppData->pDeiHandle, OMX_CommandStateSet,
                         OMX_StateExecuting, NULL);
      if (eError != OMX_ErrorNone)
      {
        printf ("Error from SendCommand-Executing State set :%s \n",
                IL_ClientErrorToStr (eError));
        goto EXIT;
      }
    
      semp_pend (pAppData->deiILComp->done_sem);
    
      printf (" dei state execute \n ");
    	/******************************************************************************/
    
      /* change state to execute so that buffers processing can start */
      eError =
        OMX_SendCommand (pAppData->pCapHandle, OMX_CommandStateSet,
                         OMX_StateExecuting, NULL);
      if (eError != OMX_ErrorNone)
      {
        printf ("Error from SendCommand-Executing State set :%s \n",
                IL_ClientErrorToStr (eError));
        goto EXIT;
      }
    
      semp_pend (pAppData->capILComp->done_sem);
    
      printf (" capture state execute \n ");
    
      eError =
        OMX_SendCommand (pAppData->pTvpHandle, OMX_CommandStateSet,
                         OMX_StateExecuting, NULL);
      if (eError != OMX_ErrorNone)
      {
        printf ("Error from SendCommand-Executing State set :%s \n",
                IL_ClientErrorToStr (eError));
        goto EXIT;
      }
    
      semp_pend (pAppData->capILComp->done_sem);
    
      printf (" capture control ( TVP ) state execute \n ");
    
    	/******************************************************************************/
    
      /* Create thread for writing bitstream and passing the buffers to encoder
         component */
      pthread_attr_init (&pAppData->encILComp->ThreadAttr);
    
      if (0 !=
          pthread_create (&pAppData->encILComp->outDataStrmThrdId,
                          &pAppData->encILComp->ThreadAttr,
                          (ILC_StartFcnPtr) IL_ClientOutputBitStreamWriteTask, pAppData))
      {
        printf ("Create_Task failed !");
        goto EXIT;
      }
    
      printf (" file write thread created \n ");
    
      pthread_attr_init (&pAppData->encILComp->ThreadAttr);
    
      /* These threads are created for each component to pass the buffers to each
         other. this thread function reads the buffers from pipe and feeds it to
         component or for processed buffers, passes the buffers to connected
         component */
      if (0 !=
          pthread_create (&pAppData->encILComp->connDataStrmThrdId,
                          &pAppData->encILComp->ThreadAttr,
                          (ILC_StartFcnPtr) IL_ClientConnInConnOutTask, pAppData->encILComp))
      {
        printf ("Create_Task failed !");
        goto EXIT;
      }
    
      printf (" encode connect thread created \n ");
    
      pthread_attr_init (&pAppData->deiILComp->ThreadAttr);
    
      if (0 !=
          pthread_create (&pAppData->deiILComp->connDataStrmThrdId,
                          &pAppData->deiILComp->ThreadAttr,
                          (ILC_StartFcnPtr) IL_ClientConnInConnOutTask, pAppData->deiILComp))
      {
        printf ("Create_Task failed !");
        goto EXIT;
      }
    
      printf (" dei connect thread created \n ");
    
      pthread_attr_init (&pAppData->capILComp->ThreadAttr);
    
      if (0 !=
          pthread_create (&pAppData->capILComp->connDataStrmThrdId,
                          &pAppData->capILComp->ThreadAttr,
                          (ILC_StartFcnPtr) IL_ClientConnInConnOutTask, pAppData->capILComp))
      {
        printf ("Create_Task failed !");
        goto EXIT;
      }
      printf (" capture connect thread created \n ");
    
    	//EI Start
    	if (interlaced)
    	{
      if (0 !=
          pthread_create (&pAppData->disILComp->connDataStrmThrdId,
                          &pAppData->disILComp->ThreadAttr,
                          (ILC_StartFcnPtr) IL_ClientConnInConnOutTask, pAppData->disILComp))
      {
        printf ("Create_Task failed !");
        goto EXIT;
      }
      printf (" display connect thread created \n ");
    	}
    	//EI End
      printf (" executing the application now!! \n");
    
    	/******************************************************************************/
      /* Waiting for this semaphore to be posted by the bitstream write thread */
      semp_pend(pAppData->encILComp->eos);
    	/******************************************************************************/
      printf(" tearing down the capture-encode example\n ");
    
      /* tear down sequence */
    
      /* change the state to idle */
      /* before changing state to idle, buffer communication to component should be 
         stoped , writing an exit message to threads */
    
      pipeMsg.cmd = IL_CLIENT_PIPE_CMD_EXIT;
    
      write (pAppData->deiILComp->localPipe[1],
             &pipeMsg, sizeof (IL_CLIENT_PIPE_MSG));
    
      write (pAppData->capILComp->localPipe[1],
             &pipeMsg, sizeof (IL_CLIENT_PIPE_MSG));
    	//EI Start
    	if (interlaced)
    	{
      write (pAppData->disILComp->localPipe[1],
             &pipeMsg, sizeof (IL_CLIENT_PIPE_MSG));
    	}
    	//EI End
      write (pAppData->encILComp->localPipe[1],
             &pipeMsg, sizeof (IL_CLIENT_PIPE_MSG));
    
      /* change state to idle so that buffers processing would stop */
      eError =
        OMX_SendCommand (pAppData->pCapHandle, OMX_CommandStateSet,
                         OMX_StateIdle, NULL);
      if (eError != OMX_ErrorNone)
      {
        printf ("Error from SendCommand-Idle State set :%s \n",
                IL_ClientErrorToStr (eError));
        goto EXIT;
      }
    
      semp_pend (pAppData->capILComp->done_sem);
      printf (" capture state idle \n ");
    
      /* change state to idle so that buffers processing would stop */
      eError =
        OMX_SendCommand(pAppData->pTvpHandle, OMX_CommandStateSet,
                        OMX_StateIdle, NULL);
      if (eError != OMX_ErrorNone)
      {
        printf("Error from SendCommand-Idle State set :%s \n",
               IL_ClientErrorToStr(eError));
        goto EXIT;
      }
    
      semp_pend(pAppData->capILComp->done_sem);
      printf(" control tvp state idle \n ");
    
    
      /* change state to idle so that buffers processing can stop */
      eError =
        OMX_SendCommand (pAppData->pDeiHandle, OMX_CommandStateSet,
                         OMX_StateIdle, NULL);
      if (eError != OMX_ErrorNone)
      {
        printf ("Error from SendCommand-Idle State set :%s \n",
                IL_ClientErrorToStr (eError));
        goto EXIT;
      }
    
      semp_pend (pAppData->deiILComp->done_sem);
    
      printf (" DEI state idle \n ");
    
    	//EI Start
    	if (interlaced)
    	{
      /* change state to execute so that buffers processing can stop */
      eError =
        OMX_SendCommand (pAppData->pDisHandle, OMX_CommandStateSet,
                         OMX_StateIdle, NULL);
      if (eError != OMX_ErrorNone)
      {
        printf ("Error from SendCommand-Idle State set :%s \n",
                IL_ClientErrorToStr (eError));
        goto EXIT;
      }
    
      semp_pend (pAppData->disILComp->done_sem);
    
      printf (" display state idle \n ");
    
      /* change state to execute so that buffers processing can stop */
      eError =
        OMX_SendCommand(pAppData->pctrlHandle, OMX_CommandStateSet,
                        OMX_StateIdle, NULL);
      if (eError != OMX_ErrorNone)
      {
        printf("Error from SendCommand-Idle State set :%s \n",
               IL_ClientErrorToStr(eError));
        goto EXIT;
      }
    
      semp_pend(pAppData->disILComp->done_sem);
    
      printf(" display control state idle \n ");
    	}
    	//EI End
    
      /* change state to execute so that buffers processing can stop */
      eError =
      OMX_SendCommand (pAppData->pEncHandle, OMX_CommandStateSet,
                       OMX_StateIdle, NULL);
      if (eError != OMX_ErrorNone)
      {
        printf ("Error from SendCommand-Idle State set :%s \n",
                IL_ClientErrorToStr (eError));
        goto EXIT;
      }
    
      semp_pend (pAppData->encILComp->done_sem);
    
      printf (" Encoder state idle \n ");
    
    	/******************************************************************************/
    	//EI Start
    	if (interlaced)
    	{
      eError =
        OMX_SendCommand (pAppData->pDisHandle, OMX_CommandStateSet,
                         OMX_StateLoaded, NULL);
      if (eError != OMX_ErrorNone)
      {
        printf ("Error from SendCommand-Idle State set :%s \n",
                IL_ClientErrorToStr (eError));
        goto EXIT;
      }
      /* During idle-> loaded state transition buffers need to be freed up */
      for (i = 0; i < pAppData->disILComp->inPortParams->nBufferCountActual; i++)
      {
        eError =
          OMX_FreeBuffer (pAppData->pDisHandle,
                          OMX_VFDC_INPUT_PORT_START_INDEX,
                          pAppData->disILComp->inPortParams->pInBuff[i]);
        if (eError != OMX_ErrorNone)
        {
          printf ("Error in OMX_FreeBuffer : %s \n", IL_ClientErrorToStr (eError));
          goto EXIT;
        }
      }
    
      semp_pend (pAppData->disILComp->done_sem);
    
      printf (" display state loaded \n ");
    
      /* control component does not alloc/free any data buffers, It's interface
         is though as it is omx componenet */
      eError =
        OMX_SendCommand(pAppData->pctrlHandle, OMX_CommandStateSet,
                        OMX_StateLoaded, NULL);
      if (eError != OMX_ErrorNone)
      {
        printf("Error in SendCommand()-OMX_StateLoaded State set : %s \n",
               IL_ClientErrorToStr(eError));
        goto EXIT;
      }
    
      semp_pend(pAppData->disILComp->done_sem);
    
      printf(" ctrl-dc state loaded \n ");
    	}
    	//EI End
    	/******************************************************************************/
    
      /* change the encoder state to loded */
      eError =
        OMX_SendCommand (pAppData->pEncHandle, OMX_CommandStateSet,
                         OMX_StateLoaded, NULL);
      if (eError != OMX_ErrorNone)
      {
        printf ("Error from SendCommand-Idle State set :%s \n",
                IL_ClientErrorToStr (eError));
        goto EXIT;
      }
      /* During idle-> loaded state transition buffers need to be freed up */
      for (i = 0; i < pAppData->encILComp->inPortParams->nBufferCountActual; i++)
      {
        eError =
          OMX_FreeBuffer (pAppData->pEncHandle, OMX_VIDENC_INPUT_PORT,
                          pAppData->encILComp->inPortParams->pInBuff[i]);
        if (eError != OMX_ErrorNone)
        {
          printf ("Error in OMX_FreeBuffer : %s \n", IL_ClientErrorToStr (eError));
          goto EXIT;
        }
      }
    
      for (i = 0; i < pAppData->encILComp->outPortParams->nBufferCountActual; i++)
      {
        eError =
          OMX_FreeBuffer (pAppData->pEncHandle, OMX_VIDENC_OUTPUT_PORT,
                          pAppData->encILComp->outPortParams->pOutBuff[i]);
        if (eError != OMX_ErrorNone)
        {
          printf ("Error in OMX_FreeBuffer : %s \n", IL_ClientErrorToStr (eError));
          goto EXIT;
        }
      }
    
      semp_pend (pAppData->encILComp->done_sem);
    
      printf (" encoder state loaded \n ");
    	/******************************************************************************/
    
      eError =
        OMX_SendCommand (pAppData->pDeiHandle, OMX_CommandStateSet,
                         OMX_StateLoaded, NULL);
      if (eError != OMX_ErrorNone)
      {
        printf ("Error from SendCommand-Idle State set :%s \n",
                IL_ClientErrorToStr (eError));
        goto EXIT;
      }
      /* During idle-> loaded state transition buffers need to be freed up */
      for (i = 0; i < pAppData->deiILComp->inPortParams->nBufferCountActual; i++)
      {
        eError =
          OMX_FreeBuffer (pAppData->pDeiHandle,
                          OMX_VFPC_INPUT_PORT_START_INDEX,
                          pAppData->deiILComp->inPortParams->pInBuff[i]);
        if (eError != OMX_ErrorNone)
        {
          printf ("Error in OMX_FreeBuffer : %s \n", IL_ClientErrorToStr (eError));
          goto EXIT;
        }
      }
    
    	//EI Start
    	if (interlaced)
    	{
    		j = 0;
    	}
    	else
    	{
    		j = 1;
    	}
    	//EI End
      /* DEI is dual o/p port OMX component; allocate buffers on both ports */
    	for (; j < pAppData->deiILComp->numOutport; j++)
      {
        outPortParamsPtr = pAppData->deiILComp->outPortParams + j;
        /* buffer alloaction for output port */
        for (i = 0; i < outPortParamsPtr->nBufferCountActual; i++)
        {
          eError = OMX_FreeBuffer (pAppData->pDeiHandle,
                                   OMX_VFPC_OUTPUT_PORT_START_INDEX + j,
                                   outPortParamsPtr->pOutBuff[i]);
          if (eError != OMX_ErrorNone)
          {
            printf ("Error in OMX_AllocateBuffer()-Output Port State set : %s \n",
                    IL_ClientErrorToStr (eError));
            goto EXIT;
          } /* if (eError) */
        } /* for (i) */
      } /* for (j) */
    
      semp_pend (pAppData->deiILComp->done_sem);
    
      printf (" dei state loaded \n ");
    
    	/******************************************************************************/
    
      eError =
        OMX_SendCommand (pAppData->pCapHandle, OMX_CommandStateSet,
                         OMX_StateLoaded, NULL);
      if (eError != OMX_ErrorNone)
      {
        printf ("Error from SendCommand-Idle State set :%s \n",
                IL_ClientErrorToStr (eError));
        goto EXIT;
      }
      /* During idle-> loaded state transition buffers need to be freed up */
      for (i = 0; i < pAppData->capILComp->outPortParams->nBufferCountActual; i++)
      {
        eError =
          OMX_FreeBuffer (pAppData->pCapHandle,
                          OMX_VFCC_OUTPUT_PORT_START_INDEX,
                          pAppData->capILComp->outPortParams->pOutBuff[i]);
        if (eError != OMX_ErrorNone)
        {
          printf ("Error in OMX_FreeBuffer : %s \n", IL_ClientErrorToStr (eError));
          goto EXIT;
        }
      }
    
      semp_pend (pAppData->capILComp->done_sem);
    
      printf (" capture state loaded \n ");
    
      /* ctrl tvp component does not alloc/free any data buffers, It's interface
         is though as it is omx componenet */
      eError =
        OMX_SendCommand(pAppData->pTvpHandle, OMX_CommandStateSet,
                        OMX_StateLoaded, NULL);
      if (eError != OMX_ErrorNone)
      {
        printf("Error in SendCommand()-OMX_StateLoaded State set : %s \n",
               IL_ClientErrorToStr(eError));
        goto EXIT;
      }
    
      semp_pend(pAppData->capILComp->done_sem);
    
      printf(" ctrl-tvp state loaded \n ");
    
    	/******************************************************************************/
    
      /* free handle for all component */
    
      eError = OMX_FreeHandle (pAppData->pCapHandle);
      if ((eError != OMX_ErrorNone))
      {
        printf ("Error in Free Handle function : %s \n",
                IL_ClientErrorToStr (eError));
        goto EXIT;
      }
      printf (" capture free handle \n");
    
      eError = OMX_FreeHandle(pAppData->pTvpHandle);
      if ((eError != OMX_ErrorNone))
      {
        printf("Error in Free Handle function : %s \n",
               IL_ClientErrorToStr(eError));
        goto EXIT;
      }
    
      printf(" ctrl-tvp free handle \n");
    
      eError = OMX_FreeHandle (pAppData->pEncHandle);
      if ((eError != OMX_ErrorNone))
      {
        printf ("Error in Free Handle function : %s \n",
                IL_ClientErrorToStr (eError));
        goto EXIT;
      }
      printf (" encoder free handle \n");
    
      eError = OMX_FreeHandle (pAppData->pDeiHandle);
      if ((eError != OMX_ErrorNone))
      {
        printf ("Error in Free Handle function : %s \n",
                IL_ClientErrorToStr (eError));
        goto EXIT;
      }
    
      printf (" dei free handle \n");
    
    	//EI Start
    	if (interlaced)
    	{
      eError = OMX_FreeHandle (pAppData->pDisHandle);
      if ((eError != OMX_ErrorNone))
      {
        printf ("Error in Free Handle function : %s \n",
                IL_ClientErrorToStr (eError));
        goto EXIT;
      }
    
      printf (" display free handle \n");
    
      eError = OMX_FreeHandle(pAppData->pctrlHandle);
      if ((eError != OMX_ErrorNone))
      {
        printf("Error in Free Handle function : %s \n",
               IL_ClientErrorToStr(eError));
        goto EXIT;
      }
    
      printf(" ctrl-dc free handle \n");
    
      if (pAppData->fOut != NULL)
      {
        fclose(pAppData->fOut);
        pAppData->fOut = NULL;
      }
    	}
    	//EI End
    
      /* terminate the threads */
    
      pthread_join (pAppData->encILComp->connDataStrmThrdId, (void **) &ret_value);
    
      pthread_join (pAppData->deiILComp->connDataStrmThrdId, (void **) &ret_value);
    
      pthread_join (pAppData->capILComp->connDataStrmThrdId, (void **) &ret_value);
    	//EI Start
    	if (interlaced)
    	{
      pthread_join (pAppData->disILComp->connDataStrmThrdId, (void **) &ret_value);
    	}
    	//EI End
      pthread_join(pAppData->encILComp->outDataStrmThrdId, (void **) &ret_value);
    
      IL_ClientDeInit (pAppData);
    
      printf ("IL Client deinitialized \n");
    
      printf (" example exit \n");
    
    EXIT:
      return (0);
    }
    
    /* Nothing beyond this point */
    

    4617.ilclient_utils.c

    Let me know if you need any more information.

  • Hi Santosh,

    I have verified that YUV file by downloading and playing in YUV Player.

    Please find below snaps having all information of YUV file. Try to play in YUV Tools with below settings.

    As per your question we did encoder setting for interlace encoding and capture setting for progressive capture.

    Input : 576p

    Output : https://shared.com/x23okllfi1

    Observation : If you play this encoded file, It has issue of croma offset as a result color is not proper but in Elecard player if you play with Y only data setting there is no jumping in encoded file.

    So we can conclude that issue is not with interlace encoding but in interlace capture.

    Let me know if you need any more information.

  • Thanks Brijesh,

    I tried to integrate your files. I am getting compilation errors for the the new variables added by you.

    Can you please share ilclient.h and ilClient_uitls.h also?

    Thanks

    Ram

  • Hi Brijesh,

    I just came to know, there is one bug in VFCC component for interlaced capturing.

    Can you please try applying the attached patch and let me know if this resolves the issue?

    Thanks

    Ram

  • Hi Brijesh,

    .patch extension was not uploaded. I have renamed it to .txt

    3386.interlaced_capture_fix.txt
    diff -crB omx-ti81xx-src_05_02_00_48/src/ti/omx/comp/vfcc/src/omx_vfcc_drvif.c michael_field_merge/omx-ti81xx-src_05_02_00_48/src/ti/omx/comp/vfcc/src/omx_vfcc_drvif.c
    *** omx-ti81xx-src_05_02_00_48/src/ti/omx/comp/vfcc/src/omx_vfcc_drvif.c	2013-04-26 16:58:21.326176677 +0530
    --- michael_field_merge/omx-ti81xx-src_05_02_00_48/src/ti/omx/comp/vfcc/src/omx_vfcc_drvif.c	2013-04-26 18:47:55.850424171 +0530
    ***************
    *** 1209,1215 ****
              storagePrms.bufferFmt = FVID2_BUF_FMT_FRAME;
              /* capture would give fid as top or bottom field in case of interlace */
              if (pVFCCComPvt->hwPortProperties.eScanType == OMX_VIDEO_CaptureScanTypeInterlaced) {
    !          storagePrms.bufferFmt = FVID2_BUF_FMT_FIELD;
               }
              storagePrms.fieldMerged = pVFCCComPvt->bFieldMerged;
              status = FVID2_control (pVFCCComPvt->fvidHandle[handleId],
    --- 1209,1220 ----
              storagePrms.bufferFmt = FVID2_BUF_FMT_FRAME;
              /* capture would give fid as top or bottom field in case of interlace */
              if (pVFCCComPvt->hwPortProperties.eScanType == OMX_VIDEO_CaptureScanTypeInterlaced) {
    !            if(pVFCCComPvt->bFieldMerged == OMX_FALSE) {
    !               storagePrms.bufferFmt = FVID2_BUF_FMT_FIELD;
    !            }
    !            else {
    !               storagePrms.bufferFmt = FVID2_BUF_FMT_FRAME;
    ! 	   }
               }
              storagePrms.fieldMerged = pVFCCComPvt->bFieldMerged;
              status = FVID2_control (pVFCCComPvt->fvidHandle[handleId],
    

  • Hi Ram,

    Please find attached capture_encode application.

    I am also verifying your patch and update you soon.

    Please change file extension to .tgz

    8156.capture_encode.txt
    ��$R�=ks�Ʋ���?bΦ�������U�:{sR*Y�c!�h�����y������U%F3===�=�=3�Y�
    �yHM�����߼�S�Tj������^�=���VkU���7�Zeg����}ʫ���{o�ދP���Yd���FW�����
    3����CYiv��>P����+����+�_٭�`}u~�!�ut�����w�IǎGI�N�1����k��<�35�ul+r|/����Y7$��w�XB�<�0�#�x��a�sg��̾ft�Á��#2a�z��n
    E�\�r匨��+긮��4W�����ͯll�����eK׷-����{+:���������u�(��Gs��/htM)|퓳ފ2�Νhz�5D��0��Fd곈��
    9 �<�6��l+����*�3wB������ٙ69 ���.�B2�?J�R�X��wL��O� �h�	���>��q>0��/��������je���v�Z�۫n��k<K�︶�P/2aj��4��>�/d��?8��{!������(�����W����G����)o��+܆�d
    �.�e�W-�8Ft�E�|J��������C[޼OG@8��y�3�����Ц�����
    ��5�H���󈣙�#g,=C�X`��#͜�
    �'th謈�����5�@���G�
    g4:P��!�{8I�=�����,��
    �$S8x<?rlZ����'霏2K�j��3�a�j��s50bp:���*T#����� p18Q���D\z�9=��;��mƳf	�_�`0	8JHQ�D��=э2���j��'�A)Ee������l�\q=��P/���qt��"����ڨ|��A�Q�<����G78�
    bt[��z_#���~қZ��J�4���}��t@N���7H�ӄ�Π�](x[7��[�+��D����A�}����: ����@׌"�;����wN���Nw@���>�A�()Ӗ4%�9���Sx��m}������I���a���z�~�kh��ԍF���i�P=����n/��{���0aU�C>ր��q[€�z_kpdɯ0�l���:����4W���������!i���'0��#8�j���l1���@9�v�������74㐴�g��Њ�ˠ�;�9���㡡s>ꝁ��{�@���%��͛��㰁a��gD����ĝ�jP�Gs�Ց%p�1H�b���Aj���������뻈�\7��P7Hݟס�!>��?SJ-yB&z�ԛ�t�lja�R�8�R�i�l��,�3aQ0�
    ����=��h��0��a.Rr�ߐ������jZ�(`�+�߫���P�0���\���޾,ћ�9%۟��]��=��ٸ�r�R�Vc;�e��hQP4�� �q�;���B˾�����Q����S�1G�-H�m����a�����d��L�����V�0OM3�݈��V�z۔��zo���
    �����f�;�����
    K�45(w���(�+p.#���eT�bu���vl���<H�2n#	�zspJ�'_��Ze��7�)���E��F]��|��->%��MEFKo�ڴ��_$�-𧄁�s��F�Yǰ��KgшX�vT1��կ����.Ȣc}�-��8���8y��ӛEBҭ���T�.-x\����
    ���~��	�q�nv��4���ˀ�r���>F����y�8�&�0�3ܞ�*�`�cǥ?���p�QD8&=��‰2� F�C�C�bc�4Kp����nMgt��10o.X(t팢�z�R%�.x���J�9�
    0��w0��&��(%[�9(������IJ<"�vQ D���)��-� ��/�;��|�iШ!֣=�a�SQE��z4�Ȃ���k|���M�<��`���W�����D���Jԧb}"qI#�=뙽��	�^�<�����ς��yZA�u������ `k
    ��"����Ƿ�{̙x|�-�,�� p.=��Gp�5#8���=�9�	w����)�`M�J�P�@>���L�bL�'��c�/6��N?���	8CF����?���C:�:3�@��`|�[g�Cw�r��ҳ����A|��5�1=����W��5x��yS���U6���l��6��f�o��������m���$��-��އS�#�_�gZJ�(�
    &m'���s����7�ns!3��󫕸"e��AK�]�|A�D��3���ǐ^�j����\7�{�|\9��������=�l�C,���G��P�����5�Ɔ��^�v�":�Z+(�-[
    �������b¿�h����c��u.�B0e�ȶ�l���.C����܋ "+��;:��&��[LCX�#pc����MB�1LXʍ��S�g7e��ز)+��ά��j��K߆����Ӛȍ�l;����T����fl�,y��~�ށ@���������FdN_��f�؟{<n*�I��/��+D6�"�^�Ciw'�U�x���P��D>�<%`gKC��=b9Mt
    `�s˫G��o�=aSlHK\ؑ�6/!���7HS��_��ΐ�#rk/��.����ni�ͳD�E�uK��'��r1j{�!1����b�2v�3�8$�"k�*����+��NIw�\1�}���;��D��3�Ҁ����MlԀ�br��\�m�v�E�/X��:;��gs{J ��dt���Aon� ,v+�'��o(�:\r�AH�2�<��b�gO��r�+�3�� �*�Șȹ��-������{~�����N�*���c�s<h[
    SC���x/'� ��A(��ia���ې�=�z8�_D��94�">_~�W�Ǟ��ƓDg����P���c5���$}J(P!�"y'-7XEEc�{:���K��-��JF'���b�������x��DDgD���`5��������NE}^S�|��T4+�9��;�	:»�ұ[�=]
    ڲ8���:4�U1n�A,$R֋��Čq�o���ޙ��Xa����/�d��	��"���܈
    =��)&58\����#�s�^�'f�{�/'�E�&T�ĺ���Y4v��Vzڎ7����f�O5�e� �c�$b^R��_iX$�x����>�:�<zh��Mp��䈎���ߋ������� ���H����b#�X�1s-��(1���x7��Th}�zօK���ô+nS�H��q
    �Ȋ�
    T���j����O̶�IkW�Ծ�|����AĹ��Jxt����W��	MϓF��a��;@��������͕p�4\	@���D����b��� 06!D�E��ůb뼉]�Ɍ���vA�8f91�<��+T��I^������Ĝ�ص�7I���vJ6�&Z��U�q��,9��o�lП�O�����Uk���vv�{��^�ٜ�m��6��������os��g:�����Wҍ�ɒ��t�Kl���Oz��2�Wb�FpH�P��;��a�C������,��)�^Y�>�R�	j�+�7�D+"�}0…:�,� �p�T��.n��A��8�����$�!�HbA*7�F�a��N��2"bSG���͏ś�x�r4�����υ˯���y��s���k��7������������ݭ�o�?_�٬�6���o��۬�6����ϴ�{���ldh�������Nk-;�`r@��/�)����uO��'�R>��/�����0�w��r<C!�w(rṢ́..�S��s��t��oi���뤟��&���� �ty>�z�O���I
    �8�3)�{��TSY�WM�;��\��z���q��t���^RjG!����w�m2���o<L��z���{x�V~ MV�Q��zQX yQ����@��|�$�Y_���ג/�a�a
    5�G�]F�8g�A���4#JQ+@���y�i�H<9֗�Ud>�i,b5u� q#�tC�*�B�u}�*UM����� U�a�꽵�U�ǜ�8�-0;K��X?�C?�f�st���.Q�x�`�]�#҂	X���
    ��� ^:*�`튱�3��~�<��b���8\"�'~0���Sb|��y?~�-��}��s�H�*��y�k���?@�	3�9Z?K�9P&��HX�Ҙ�2���ƉGX��`f N�2��
    �79ҸK^�jG�}��x�@�X��*Ⱥ�b���J�;��G���D?�\���<\���[#�b�4�:h��RI��©�P{��#�����g��$s�'!=�����E ��_������_0f.�,�0:����Y���}��Z\S�����0�M����<���}g����+J%]�L��s%5C�v�g�/_�BE�aX�b��fe	D�\M��U��Y�
    ���Z2��m-ך$�=#���1={^q�E�]?1���bph��VF�����	�>o�X �&sOǮ�8�y@�g$_��޽) Y�ܰ��߈Be	Ei�%mqG�|3��%�9�۔���w	�{"�	��%X\�#_j���IR��f��XT�g�H%s��^%<�ѭС&t�*B�˦.,����P;n~�o��畘n|=u��][$�pCy$��ʘ'�P�!%�r!��7_Ey�7UŢ~)������O(�)fUeM��@�)aٲ�y⻆0:�'<S�W^zT�mi\z�_Iԫ��g�r<t�0X�ea{zO3όq�}�	�_Od�M���m���
    ���rE�9/���j@��u����=��IO]�=1N��g����{���ӪqHivV i>q(r`xE�.)
    �RB��x��G��K��=$D篾r����2@-.�O%�Ì~�f��孈��,�e�#�¸�~I`B��\�]Sg�n'	����+�Ҧ 5�r��,c�X,����d?��K��Sa��J} Xi��rCb����Hv�*$ᚃ$p��O��H�A
    ��v�˴-�Po�4c�Os���o�����ᭂ<�C��� �Ke�$j��[�"�F�ynm�|%��k�uQ5�?T��AΘ0뼎��/$P��Gar��X�
    YxJ�
    ���J���Z�g#��”n�5M��]p��B�#5���K2ic�'Km�t��54�T x�ӵJ��u��B�*_'�i�"�+�i�U#����;��j�z���{�]؃��_���������~�Sc���i�!.�T��u�
    y��a�ق���_<s�qL䈃%�:�U>	�Ľ�q�E�j�����ј����3��u4 �]�d|���W����u#�֣#4������Vf�q�S~��ĈM�Z�^<`km��ؾI�&�����e1��e�E���X��D�"Fy�D�`%�
    ʄ>�z8QR\ʬ�l���F�!��W��	��H�\�\�wb�t�g��7\�zW�A�-#4�
    �ʀ�O��u��u�����?�F\��t?��녔�
    �c8�.1A�$��U��7;�.��H�;��-y�-�q��=@l�_�W3~�3?��ϊY��	慐#�*��.a���O+�Ru[��Ĝ�4���K�o\z���/)d��m��z�{�97dsRz���D��Y}9")Fy�����X'���!�|�j�����rl��#-��k���ڸ�����|���N�c;c������w�J�wf=BjL�ڢ���L��[�Y{�����Q�Y�ԩ�ԩ��0C{�
    X��(&A���@J�뇵<	z�#fHބ�f��uςc��\�ֻ�o@����\���-ˎ��
    ��7�mW�=1���ٛ��<Xa�95��h4����Sy�;��PE��1�穼����֣{4l�&G��c���2�zؒ���A���k�Ý������h<���W_��D7%�����s�k���Ƹ�8>E�䁰�Ƶݑ��ØOHd���be�a�f+�$øp� ��~�CB�����h�b�ThB$�`s���I]���惮n�C�̀��.�]���
    �Uߟ`]�z���_yD`e�DK�H�[z�42C)�]zk��<o&�r��*`�m��F0
    ��
    A��|���K��&�CI2�Iab�i@Xպ���)
    m���w4��U�y��#����`�$�<�/����,l=��E�a�E�"zW�>,ז���:*�Mb�D8h'�Γ�Hڲ��6�3��p��x�ϐ"X�A�F}H��q��L��T"u;�z${�]{�aɭ�.��LJ���V%�d�<`�L�?�m���R[�AD�R�,�lQ�|b�n�C�g�UfXe؇��
    =�CDTZ�D�ofC�$q�
    �6v{=o���YXɖ%Ly�	t��k���A�I��huNo�&��W��vk�����L�y�x���M�
    �
    1@ܼIt:Ԛ�%jB�zX��2�Zb�Q��iV�}c1�?ʍ�G������Q�~)K���8��p5�JV5�&���j���9�:J�+�+��u�W�Bu��3�:���xn�C~fc�0��C�s}y:�SP��/mw)�%ZPq,�ir(�.�Q��m(��0�ʦ��lz���!0���-�\H���%���Z^aGW�:�:�*��Y���f�0�0^O\'>R�	��5F�Yg.�}��0�p�2��:ݑ��;�52�}"�t�`~)b ��e�a�=6U���b"�?�c�b��{*�������b����h�[9u�9O�x�44��*mZ��&f,��A�b��*�f	��c�J�b�V��SK}WD�� i��-T���;���N?x:7f|�����&X��Db[P����}$S�y�t��f�	6Kc��Nk�,���XҢ+��&
    js�,?R�tb�qR���asȌ�=2�(Z�cDG_!#��g_7'��W`E!G�x�:HY���i��j�s�=PT�G�,o"~Ʀ9߰�OE��r�	���H����)'����'w��&��"f���1���?SҮ>r�#s5g)$��	$K�`����b�]XSM�VjDJGH��Y"�O�/%Ջ�)��c��	�*�f8��D9�)�@�֐yS"�0޵�[kb9�r�
    ���8U�����";�t��V���'����%��b�#�-\N��+$�$�.J��8�����{�B�s��ڂd�t��~��)gש{q+O��$2���ݕ�w��Ś���$V�L0f]���<li���,-0I���1����l1��bfL�1-2)���$ć��,"f�픿VΟ��#�_���Y���,���n"[��EW��<����;L��Ln��QUi7O�+E�S>
    ��/�M���8�N���=C;7�C8D�_J�����|�V���B�s�K`�������3��'�����Gי�`ܶ��
    t�P00�q���+�^�!>�V��G�V����*���LDa�����OVǾL�;>y�8��
    ����1 2�DO�m�	����%�^�ؙ��i���	6����5%o,�;,0v�YoK\������y�O�V+ϧ��P�����^��M�̗�W��	���j_(�s?P����/�w~��	�f�+a��i�/%�q��A.��‚R�m�)"��*P59�+m�/-H.K�>$�*j[h9�u�a���=�nw�O�<ᗗ��_�B���C�F��ߗo�@�o�@���H��%�����N�u($��bγi��M�B��ȡ�A?�-�P�n��~ik��o0h� �?�]4\CG[�Nz�7�x^���`c��y�L� M1�8yTC�b��
    �u6ynl��`;0��˧Z�W_j�E����T������E"�"�ɇ14���J�HF��(�f�q-ScV��ˁ��;��~9��M�A�0`*�
    ��x�r�\EPo��nK�!������*j�p�
    JC�v����q�RlE���КO*�E+R��f�P��U3
    �t�oY"~)�
    yG��,�>ZLo��d������E&��u@[o�,"u�����{�
    ��1_)�z\�4|�D	���,B��lp���U�
     aXG���/��=ʱǸ�ڽ�-Eq�Tnq��[��e�޿5I���ɚ ˽���CQou*qJྺ�-e�ÍR6T`�*]��0�^��G6�G����[����Lͫ��
    ��)F#oL
    "��DkH*�[rz��L��"(����t'�:־E^�_��;�Wl�ŋF�u��xqT�<-K
    p�{4�MY�^��+�5�נ	�i����P@>1�oBR�S���b��)��#��J���y�B���E��&�bF-��T{"��dfyˁ�f��1�Q��\s"H�fYAݲؾh<���7YH" m�Q��D�Y�C�J��f�BddQݛ�R&#!��	�BHB��۪s��h sǣ�����
    ᐠ�3'�$��m����c�j���u�J=�[co�BTAX66%���}���m�v�mw�
     ?*��Xo��BF
    �٨�:�A����$�U�_��7*E��i��|+���a�i�{���F�ٷj��I�t��!2d�1�2�����vu�^t����k��2��?�b�x@�9Bɠ�x'��F��<li�Y�$DO`v���",#�0��F_$LTӆ�O��
    ���1�Er���#/�������ؐD��u��ǒ�
    �xއ�EX��t�r�,Q�(�&��b��/
    �i�Pﳅ	a�bx'�Aqq����A.g��l0��W!��)�ӣ]�"!�V��+��O�(�Z����d�텤Q��W:�`;�&�!ӆ�R��"~eL�*=��dq���l�]rLp��M����]n�����W�iR��b�J��Kc],���f��6�-���22{L3g+x*P�
    �.hMr���g,i ZĖԨb�}�����#fI�'y em���$�1�B,-�cE�O%�����=4�Ĉ����2��t�h�7f����!]U+ƾ�8�š���RG&[������Yg�T��F��惐4�%�/d`���dQE�Z�T.� Q��)`⩉"t<�B����S�I
    Ljv5�ވ��m"�$Iqb�h�&n��lF���Y�vC�sO����Lb�O�ld)N�,4�Ca��
    Mݑ-z���-��S���~M%�=�7B�:�7��J��N�I��a_�.�h�},��T��"[׌i&#���:�L�.��jr����4Ig}��8	I�%2K��DrQ9���)3�.�?�C��G'F�LT44�LҦ�A(���o�VZ��>�ڛgkxR�|���Q�ǎg*#]z�[<|������
    G�3�DK���	��LF�B��G#jX�9T��xQ��`��Wy�k�/�z��TaWu�A��')�q}�>��)�ư��}cp��co�J+c��A,����X�p�w�:�~��3W�����C.�ѶR���L�	���$�a�5
    �y�$���a"ّIhˢE��t�Cgh[�ho&�9A� b���B��Š����ِ��0���*�&W����Hn�Gz�&��Y����(kX[P��Rr������X�r�H*�-b��^�nPp0.99�L���'��%���$�N�$��c��T&,c8�t�Kd��R��mnm[�;��&�Ѹ�u�g$+\��pX�.*�vܝ���7��a�d��������f��/"۽�TVQ��"�F������]$B�pG<Z��Q��@憺��ly��y����^���<#�nfR�S���	Q�#h�~�Sst��	������)H�����|*�^;j'DW�\�#���Cx��9h��bx6�£p\a�#?�>��[=�	�>�|��$s����?>��px��NUZd��]
    
    %��G&)}R��Aٌc1��va�R�� ����t���㙸�\�*�:��¢�,��ꍥ7�	����$a47����-�V�����"�U��>L�cK�;�(�w&\ò�(���F��
    9N'�<�E�O��<��nX����/I;o4�{�P�b��6�c���!����j�i�@DID�&g
    E�ؓW��I��mt4�	/����jH_�I�H�|��3�׆�'�
    ���6�ϵs���^��Tc�$�wa��Tj}y?E�C���+u)b��̛��#>�H��1����_�Tz�#qy�'���[����'AZ�d��O�51����Tф��{�d�ey�?�J鴷ǟE�3b/KhX�#s���������Ww1��/P?}�8��v��s�O8}i87|d%ٻ4q�Ő��r�g���\h�8�)�Xљ�@�˜�,��)�ʠ�2�݃�2l�ǒz��1��dذ	:�����T�h�{<=u�ܔ?�W�T�6�������x 	L�N]MK�T�{P���&�7��4=�c�Ev�;�<*v���E�\��]97=�;k%k����H���k�aGE�5�UDHg�]�͖�v0M��j��Hb�~&g�ȍ�v��HtwU
    w�]������Aݯ�?\�Q3{q�����%	j�+ҟDRKT��Fb!�����Z���B�G�a��΀���VGŐ�g+6�ոD����z��ۓQ	9$�uE�9#7g^�O�7M��j�y96���}��1���ɾ^y����iV:��ͩ�*�J$��f�M�bOS��dSE�U��_O�|��s,��KנQs�"�,f��q�4+�%,� :�.E�1�0��h,����
    �i��i�3RD�
    �d:��{���_�ʳ�����c��<_��(���iր�RXc����,���)�R
    �$�$Pm�P��r5aa]�Hhlq[5l�����K� na���X�H��C%�,�0�_?2��C�GB��9hk��"�j��$D��%�f�X����I�.�M�����
    �vgF�ɆnFb��g��� aF�1GC	#�+���;�M;����Vm*W�b��y	�[���q>�����l���~�ڛ5��z�P�CZ�Qo��F6!���K`
    x�w�Aߡ\����7O�L#�ʹ�>�}�e��=8�ٴ�XO��'��B^���J1�R���%���܃Y��.�?���^S�F���:ࡲۉ>��t,�.�q��gC�
    ŕ���ٸft�N�S�����R�g�%�o{���!v�^��:�CT��kZ~�F�Z��A�{T'+�@�N[�l��خ5��]׿Gl���ֆ)*։�=%����Ʒ�|s_�k�
    �a\&�oO�Sޮ��bUJڊ:5(	3^�����(m�ʙם����ja����-� ��
    ���.�5A���Od'�
    !E�c��t��!X1������l<h�x���!��.R�W�3s'�BI��%���M�h���>G��H��\��l*��&&�vn��HO�����[�遽�o������>e��o����p8)�\�U�kX�U�)f��R�E2�;�n&q��B�9o��ٯ�}���5?f��8^�.��B~n��Ͻ���e�Ƶ.��g�꘱N����r�Ȯy��|&��d�Ɔ(���l�@��B�|��WY9����Ov(^#���52��%�Wſ��qY��ZK�0>�N�q>\�Up!g����3T�J�yį�K
    ̰�d����H��9��.Vs7_g]eg;�q�Kܥ�'>k������L:�T������wBI�znO�p��К徛�Н�/�D��E�ea���Z�q��_*����"�_q��G
    ��F����x%K�Z(�ї�E�)g��{��Aw�E�(&�)'�V�*�q�|�y��8t�_M`K�)����_dt��]�C*���h���=r�{�7���2#�2!X<�x�y|�����䱦���\��ͬt$�G2�d��4���ᇠ��H5D�����݈d����*q���ub����4�����T%	�E����t���(j-2�x��W��R]_z�J���'��bf���,��嫁�8�Xv{�3��f�{�ű�]���S ��~��/TL���Uy1g�\C�!B.��)��1�&����lތ����ٖ��ԛun���g{�L�аD����I
    ���4�T���B��F��Ў^�J���Ъ��%u˖XuNX��L�j����3{��ᯡ�`p6K��P�l<���t���h����^y|�{� �a��L{;��C�t�3{+�Q�g����������{��K�^�ewoo��r��Wz���/���0��g���/��x��}a�γ
    ��TƓ�����uo��+햶�?��
    �4p�Q0�·��L�NƘ��Woz@�fS�rN,-:��Z0�O{|��Ô�]A���g�x��c�,hf8��W�B��M#?��͎�t|�S�!��B�r5���ܺ0X,�w�f(ǣ7{-G`�1u������INWD��^�o�
    ���.K�g
    rl�9����t��7-��z5�#G#��׀Dd2�Tܣ���A+3���RO��zh�D\35s�g�Ou������LF��#�g��`7�i�S�*��t�b�$&�����P�!<��DG�?4���"���t��|ȟĽm��I����n�iՏ���͚7�u<H�:���cͩ�����s\?�֚-�|V��g�{xޮË���|J�����{��Z��ԛ�{�8q�A�Y>k��V�q�*'�U��m��F��z�9qO�6k�bd���N��9�5+��|螸�����>����ò�(7�n���ܤ���F�Usp�U�U9)���jF=;���Y�i�ONB3��;�5a
    LU�)�`��Ów���Z��3�U�D�]>)8�F����R��̫�|_@�@�����CA(�T˧�0������7k�8|K����v����^��[��[����z��wު��v�:�&r�j~��\��{֮5�獶[?ۂ�P����z�^?�i�����0ƒփ��ߚc�\A�	�+m�(�	m�u�joOܷ��JM���-�s[�-XB���\��]�>�������O��a�1�[�z��D@��+Ј@X9K�vH3d�f"dxWZM�"'��5�k� �a����E�9r^�x��>U��A7�\�Ջ��/�:��g��띝����E�Ӭ8��p'��̼�5�vlc���t�#�ƶ��v3@O���l��x��ƛ�{<z�i���G�=��֛:�������K����Λ5>cP���z�90��Y�_����c��|��o�����D^��xzg����Ɠ�Y|;�~�v�T!p��LE��t��v�Q:��lǧ�O7��;lA�z�맋U���z���Ih{����ql��/Rb�+�h��dН!��|��ӹy�^z{5�}ۏy�F����PY1+w��>�.��`�*�Ƴ�I�%��%�m��U����|��x��~�Uk��O�;���?:�Fks��i7���l�獳������R-��~ߨa��;�}ܹ8w��R�n,�6TIm�Usn
    G�A��n��
    �r�m�y֝~&[�)��l/�Om��پr~�´��~r���[��OO7�<q�n_:?^�3�qkN��܏�b��8�;�B��Ώ��]�#�1��@��ǭC�H��Ϯ�͵zs���ӿF�����)t��ᐠ�{&�Ϩ0�
    8n��[��4qv�W{���N(�?q������Q�U�%�h��ڧYR�u~�C�*�T`gTPU�u�ˆ*4�vx}��ȯ�+�����H�����N�la~��<���N�+�1�rO�1(N���wh�?�$��j�V5��;����Ԅmg��KR&0��6�N�t(
    ��)�ص�c�nl�hL|Lm�+������JF[/BV&�ȴ��)��������N߻�(~�y��]P��5l_�a���U/����=%�R�[X��nЈ�:[��}F[q:QQ9��G�Te��i'�v�ލ�Mr���I�୥jP���m��m�*������8	w�.�Z�W���mfW�-���	UO��c�!e����>���Z֛;s��7��T�bQ��.L��4�>���Rx�oaz��_n���P��d &H�O~J\���&σ�x��g\,��>!����v�8Oǯ�^_����^߾�~�}��6H;���7�c��ƣFK�෧LΟ����ܟ¦�K���<��V�wǑ{R�� �*J�]��YU��֕Mήz趭��6gW=;?��[�2n��z����O�슠Q�6�ޭB�'O~{*iqJM�ت��
    ʜ�G�8��wn�},�0�ͮs\C}^T�dn�c�&��#�G~0�qb��b'%��8lo�0�5�k$�'9|r�uo��y��e>
    �#��F�DrAl�����r>�NG�F��ą�q�/�>>�ޡ �H�D�&�c��k��MVp�%l�Eko��]�U�r�u?J�"�'��g�kQ�.��X�-������;�#�LG����ِH�u�9-�L̀P{
    ���5çQ��~i�����������hqZ��ƾ������E����hRf^�E9�>F�>��-z�v��=��؝S�����X?v���1E��q���vm��2�ޟ�cn�'O��H��Z��.��~<#0��
    |,c|��7R��_^;��}�5Q_�]c@���$���F~	
    �^��A���T�ŵ=
    E��P�B������˴�0g0FҵG�hrt$�Sh$�>4~�y2N��]u烙�T������O���+��¦蓯"��M{N?:�-�?�qB�r^lm!{�񅺇7�3��w����y�F��|�T������iLh��7�O�,€ïq"������#F�-��o�A��0n���aR�ԥ���~$-VO���T��g��ď������O�n-?��WЖ������EaC�#1�ۤ�#��a3B{h$W�`0�,%9�M���=��v�x���aBB�)rŽ�'v4,9I�,�.��.���54��_�����]J+ܮ�{U앃�����>E�5R��uf/R���۬qΧ^�q���<�]�����%E���@��_s-qCjGd����Q_Y���2`$~2�*�U�(2���7M����(�7��Set4����F]�19��}���%��`��`�~�3�?,�㘃�tϞ���la!�4hTO�@�~�W���2�{��
    �W��i���u$��M��K���ژM�����E�F����̼�)���Y8|�
    �y�SG����[:ғ�'����6ȝS܇#�k�r������y_q��T�C}���r�BoAa���4#O�G�~zC��nM�ҧ��RU��'}�:��6@Ү�f"��50��Gj��hv)v���E�pX���t�*�BJ,�ԳM��-�*#:�7NW�}�Ī�$d�C؃��h͜HGŁ�u�xN$��e��d]�<�}��N�M�S2�?�"�ςSL_���α�.��A��;��tv�l��Mr$�)�#��ՈҺ������`��$�Z�Yo��3��fΩ	�o�Q����`�e��σ�"�'ը��TVM���!˕US��7�D��#n{q�>���ܰȗx����n-�E-��e+��F��t/��Z=��L$F_1t"�!�7�W��9a͐"O��y0��߁�ࡗ����N�;6
    6
    �ϖ.�	�G���uL#0Kq�PF^:[�7�Rf��R��.eK��{BPuo�T��"�qby��ǖ�;�����F�4���FPuw�T��"������ǖ��@�����F�4��{�����CPP����CP��
    �j$��EC���[�W��іL�&
    ��Ês{���^
    m���=Hq5�W��_z��+F��#=G`�!���� �걖���#��#�16�pNS0C�/�ũ�v{"��<K*I)EY�����>s�Ѧc�A�=1+��c�P��#7�ݗ��gnjRPnl����yYh��
    gX3U���
    0tv~j��j�R������(7�����V��ŒS�nO��]U]2a_ o_N]��j�A�`�="�a��6��7ƨ,Fs��hpW�v�w ���Gׂ0N����܌Z2�ںv�-f]���6�m�y�x��3�t�54&fqF?��*��i���e�L�NAJN€r��R�\Åe'���=�tL�A��-�8�"�=aBiΡ�������\3!iD���tY��x��!ӯee����;=�
    *J���_���R.TJ�:�DFX�O6���%�P���0����{>�������:R��>o֤�����Q�	���Y[�$&6��s_٢����,����y������R��0S--J>rA��i�
    0:YD��IvD
    4�5Ɯ�WDT�N6��������fG�	0>S�B�R�61�]�c(�._��T	��^�{>Tw*{	hK��S�[;�/[�O�+�Ck�IX����VIE�8>��йf}�d	������k�m��
    a��X�N�Og�$�®A`��,��}yF$� `��Һ�D%�h(��Ž��8�{%�/�J�J��:v��CCٛdGN-����m���'J�r��P��Œ=j�������s�D`���0`O��[q�-�H�Ϡ7P��n "1
    c��}�����e;p�#�	�Iشw�������
    /=�	/�<V�R��\"H#�8m&h�`�*-	|+�{�`&�o�����\ʰ"�D��v;½Y������%hrCԞp����+N�s�yЩ��M�=�n+���*���!Ga:5a����E��@%��!�~_E$X��ݓ4p�}��@\^��@����4��O.-
    $a��$�$립�3D���
    FH;7�5�X~���s_~'Y(��#�.HXr%�0a8Gy;�{B⻸XZ0J��/��{a��킊N��<�72�Ģ��U��,�����+H
    E“`˩-�rX�2��3�S%������ҷ��[���p@}�s�����y���ł�N�QeyeG��L3iZFP��(��CZS�eq$O�+��>�ƭ�n�{"|��Y!%��쳸���6OH>e�_����锩>���?������fPӥ.=��"�gsӗ�_
    �m5���{��ĀŌ��1p�l��c�}P��\M0�7v���s���Ai��L��ȅ�m�9�amCiI0D�EH�f�I0����Xb�f[�G��ax��1�lW��s��++,K��C�u�<��������[���c��� �&d
    �Ӌ��9Ƒ�:��c��?�MrQd�.a�ޘ����$R"WcF���TA��J/ʌf�b���L�Z����X���$e7�6��b)�oc�.����UO�ݝ�l��Kn�v��k1R"WciSOL���l��㋥ќj�Y!W����B�5�ʠ^{$UZ�t?!b����0�"|������%PI����&�w����o�a���%��;����W���nR�븜B�0x~���-OD].���c�'���;��K�'
    |ce��g�.0��U�<i3�0�-��`��qrM�cgYM�V���|�1q�Y��y���}��{��3���ݓ.>����YD*,>�Eg���a�ߐ&׬�Ͳ�-�,]����~�ۥ����j0�̓;T0���M�&e�����>���jQ�ˍ�k2'6P��[��2�N�LD�
    g���wK��	z�� s��ٽ(�s22g`΃ͧ��u�R٭]0;��a�{V����^�ܻ���e�����QY
    �bq�¤�Z�q>�8ߎ~z�TV!X,�!D��?x��Z��
    ��c��7�F|�����O�sM�����G�����g�q�e<宓�=K7�x�8��4���r�A������Z�
    �Y��h�H�M�^�?V��H'��Zd���}h��Ιy�|�GH~�}u�,c}���q}^f|m:Y�7&��U����eK�Z�LE��;�r��2c'<����3�k���c�3>.�2cx��Qb��|�}\+Wk�g�4�<�I�c#��:T	�R)�\{���=9�6&�:��	���F{�FC]_`L��J̈c��z�͝9��S�.RQA;`��F&�H$_���ܖ���Zvc��6$�|���y�0�V��V�!6�jj�m��ܜ�t�lHG[1��uj+q��\\��}^a}�3����!�5�Q?9> ���g�]"G��)/�Ua5;�vC��/��lS��������@�M���˸�u��Epa��.�S��1.6�e�a���c�!,	pMK$��XyY��B��Y+�V {i$~���p�9l�6�lf���3/���f��p�A����j�tN�	�x�Y{;�N_ڰ$zhe"����٩{�t�T��j�G�Xʱ����]�Q�z��S��GV>Ȯ���	�<�`��,�;ڣq��󶴛���Cp4e��B���<<�Q��Z��@ye��b`yKia��@ƅ�����N˧�P$���?�6�+ă;�t�g	�G �,0�F��"-u�f����B%�ݒ��Gϛ,Ҟ?2=S�@t�}8�P��D����hK+����1b=b�|�
    �_�Nc���CI))8�,��u*EJi�v䞹��@kl���^Q�yG�ވ��6�M��ʹ�-l��
    ` .�{�\�C_�i�I��j1��7]������V��'���<���3"�q�(7Ƶ�%&ˤ��š�/��iU�t#�ź�J�.�c}�`��Z&UD��f�<���ud�+1��ń�x��	��$E��HQD9C��5���\�(�`?����"�`�^�ʪ�֬��`���p��-��9|հU�˔�Ў�v2��p	y���c%C�����82�������X,�R��\�E��˖V�M��=k��#�瑁�C���P'�F�梱���#�D�� =�L����Q�t)r��0����yH��+d�|�����m��j?t��9��;�k*J�-b�
    ߵ�6�I'��k�!n2���}��-4��l�{����| ��C��;|��s" �&�:(���!v��� )`%$�"�yȒ/�*���;�9��F��vk-'8�U�w�\íʒ"@=�u���o���������0��G"�-X
    W�͓΅[��*�j�)j\���׋��nyZ;�7�,@�m�M��ՇP�$	G~#�'&���؎�l�̈́Q��Z��@��`<�BӨ��ɱ3+�z4A��.#�Ϫ���`˜ڹq�>�#wƒ#kR+�QW�I1�Ǹȹ<d=l��YQ�T0j��
    �U��R���2�����J��&@�������Z�S����ġ��m$�i�"Q���$�:��O���� 
    -o�7�Qw;y�z�f8�E!tg�L
    ɪ"S�ؙI�/��Ώ?�H��A�r��r�б$�h�]L�	-r0���t�1q�(n4v�2Mr��N��*��7����������;L�B����$)\p���N��ȏ������`("�^ܾٽ�%hwD�f2ʡ��8U3�z�$�m�<	��:�x��'D$cQ6��@l�NyI�=[�	E�߄�+�2���5�fH5d���0�:q�V�� e*L�ȩ�u�9�s�%)E���3��m��u�Rѓ�d�a�a]Z��	�PN�7y���(lE�1F����F���|똠JeC���7@���8|ߪt��g��sB[���TU|��<t�њ�(/!��zݑ�K�.��t����i`t�������G�7�z�&��Y��U��+�e��R2����/4/#Q������]�Q\9S��d�H���h4�)�Wa��u/�N٨�io:�`�
    klH���1�Խq���Q!��-]h��Aqt�\��P�v���"�NH�*Rn9�}��S?���f�+P��1ˀ?�r��#9��I�F���@6h�i_4dR���ӯ��o�N�͈��|(��.IJp����C��
    -�?7��X�pf���,J9F3����g�B�CN��S�<s�%�fZ$�oG���ծv��F�eIj�"?��;d�A��
    �Lw����06�Oe�ӪX:��:��7��̧2�l �i`��J���c~1����&���vD3�j�� �b�.�y���3�_���v�S>o�v������<x<_d3�;mi]�2�h�_�]Δ��Y���(�A�{�����*)�=��$��d�m���R�;.�UOj|J"��nG�k��J�~��Nj���
    C�x7� �F��~�Yk��\��2m�x��J 6�m�6	T8��#���՛�嶪�P��S3a����Z��g�S�"��fջ�ݪ9�V��VEg��}y��$\�|Q����&�x�4&ϯ%_?SN��	�o���<�vr�pD%V�l��H�]ĉJR�z+$=, ����1�V�������#�\�e'2>)�t�DG�z��(S�׹?���^2b��f��Dy�#x1���s����������%��-�P�9\�9�{`�v�S����3]n�B��lh���6v1��n���ۓ0�����a��<��볝�s�pQ����iV�z���O&���x��Ɠ���l����j
    &��l5˞�|��Bـy���E�5���R�2�+C��-E�d*�ڛq'Vk
    �>=7�'m�����/�u�v�R�}5�K�3��B_qY������4@4K�`�h�S2�'	��KB`S"]�f<�@
    �
    	ya�u�2q@m�2���l�u��u�3�`�Yy��<����ؚ���ֻ����Fb�3�y�	O�'|V�#�:�������1�lw��Y�-�B�Nsu$�s2Mg����ޒYc�:.!�����$�1b���7�0fy�1��̧S���Ȉ��d5F�9��=1��)y�ECQ����@��^�}:�G����[���{���В6?�Ч���,~paq�(b�qXf�PͬW�L�y��.���F��O�3Z�LJ�;U�3]b����TnV:ʩ7/�{�KS�j��ݥ$�szS�K��9f�u�!:'��G�3�Ɍ|� �l�p����`>AK/�}և�g�(��w��O�I8�׶3���w^D]	W���PX�N�챆�Q\��9d�������s�x
    ���~��F�=�%�:�����8/-�[�9yi0�.�a�j�Y;�����-{J��b��1��i��6���	w)��z75(�9nV�1"}��獳_��`����<AZ��,:��������d;�U�2�i�^/:*��{`��l��b� �$��U��j۳�(	�Eٰsڨ<,Y�B�������g��3u���3��̍F�T *	�{��]k��+K���x6�G�E�����jJ�7+�r�.5�Α[;���N��öz������n�e�I\�������>��ލ_~e�:�����=���W��v�fAÛn�3K�|�c�eQ{�`}�N��y„9��9��������T�UkS��r��V����1�`F3t�$p5|:dߊ��Y{�ϹW��o�Y}�j������M���U��u�	x��p�Џ�"K��pi^;�-ڨ۔��ԫ���0ZC��S�M��
    �ؑr-̓�	?��*��_A����	�}-�;�~��C�c;�r���%���gDll�|�e{w�ӫ��#��5V����v<��Rr��5�mR�@z�z2�p��8 7x�
    Ʒ�&�'�*q�v3]���G�,�@n�^���Cȶp��$L��ï�����{0�L��i�=�[z����x˺?Le?F�H�*��vߋ�: F[��A=jM����8��9����C�O�����,u�=c<��4�;MF�<�(ʨ�'��bZ?o=@jANF�5��rBޙBP\?(`�$L��.V�%���r��(��~,����#Ǖ���3jPM	�����Q�A՟r4���'�f�TCo���GR�x�3��F'�|#'���F��e�?���Z����A'�n�a�A^�������9�%Q^y
    lT:��#��a��*	��D�~���җ6X��ƴax�|���!�K��>:���Hq�U벂w����}^����b�iT:g秕���Y�Qk���͇�k��#V�1哷��Y�
    vX�z%�4k���9�'Ƥ�gZ燭�i�%�r�]o:Ak~�´�>
    
    Wc�o�߅-��X�߆��ס�ő��ۛ�w�����K+�٦c]MpR�m�ܸ�d+��G�p�h��	
    ӏw�1ү���>9�%H�,6!͛ :A����}�����o�U$�E�W�`�|τ���p_4�Vd��ʎg�B�62bn��{1�R	���P!�R�挹�J���V�a��^����ˣBi�L+�+�"�wǑF�*��!��/ً|�%�����y-���
    �L����Cs�/ϽF�Z�҄Y������FC\�W�����Le�C�l��.!�"Ơ�m5
    �"�u��!� fN�c�@����9�IjD�2���[�B7%\r��DV��[)-�Ym&t�%���F2ŝٳa2�Ԍ�����Lߎ����T�f���T��6��h�w�O��ꩋ�{;��ݜk}�n�qR~/���gʲ������J�*�C3��y ��`O,�f��Y�me�����~�����W�w�W�d,�ײ�,��}(�a�+���+��t=�r|�,q�����֐,B��Q�!��!s�JpT�F�����k�]~��I8�p�b'�g�+N�A�5�-u����\��7��x~4����B��A��>��y���~s;�m�9B$��v,�
    Y֨أ�<d��
    �B��	�8!�Q�p�-*��TE��b�t]<ie��'���x4��t�H��Z�|ß���ǔޕC)�~U}��]�~%���ԯV���"@��pZ�����h��bL�����'$��W�%e���фslZeF�k
    �V���6)���W�q�5�J+޾�>�آq
    ����lx�R�OՂa^ �raʶN�gD��3ܨ"q���'�]L$�~wz'�A���͕�<��\�z���?q
    �ԭ�i�l���@
    'f �t�:��/��%s�԰���8�ָi�5�g��5�<�Ϋ�X�J8n���s�6ϑΘr�#�cׁ�T��5u����3��;y�������6ޔB�4�p笪���k�첀Ց<���G��ey��Gˁ���/e�V��:�n�%��A��,���?��,�<!|pBX��"�����*��k�\�4�Ps}�P�P�𲜃��U�t�M���t�Zm���@��n?�\�Y+�aԭ�[��~ކ�t��I�n<W�*=!T1�t�޹g�����;4�N>�_5ͽ'����)u�_�)w���"��BXO���Nٿh;�g?��ǛR.��S��s� �#�;\'�,�^�#�Z*l�DM��⾃T���Z_bm�(5�;Yt5��9c�mn�jNJ��x���k��x����̡E���̫n�h�/?F�oq�Q�GEr���j�5:�4l�Qg#�ή�s\��+F�����nq���4�vZU�ͳv����9ό�Xwެ������be�ډB>--w'�;cV�ҧ8�����ZJJ�\E��&0�؄1�d)�Hf�EK.�PU�7�(��h�&q�O���MP?ċ�#��FAv�w�ް�`,����F�hf�?�YX���a�&�������7�ɯH"�֬$82i��9h��H<c�m5�D#����M�'�"�I����J	��D���h�C�X�u�(ܾ�P
    �������"�\�ક*Oa��:����
    v1�hkJ�t)��6���,����}%��I�*��ɲD�OF,s���l:�����o�[RS�
    ��8(4fS�3 [�K��j�„�#�z�p|��pF��-��G}�.����)�z珎����]���cI���sO�@eVN�B�W���?�x���cv��j6����ܱV�t���w��w������1�+@zh�Wv2�u��w���x��J����{�h`�����;��Sv��#؅���l>4N��9��D��qeކh��<X�g�'f��;jB��6kQ�+iתJ�V������t�T(m�'ņ/I!�0�ET���܂᭯'�����^�oT@�$�""sbNB֤1
    ��S�;��]�}g�[e?ѨҟD;����Yq��
    -�N��g�G�U.�[���2�N�]���nѣ"}��r)�F������$���ާ��"�2�m?�(=�l,Ύt{�O�:����藖��PN::�Ԥ��!DX4��
    ,+,�N���^�����8O�7���މ�pw�GO^+c<K`���
    1��njb�Ȋ/���e6�E��b��:Ĵ�3_	{L�搤s<��ȯ'F�m����_$ĈI�9ö�|F�:
    ��8}�_����[v��	�����ݗ�v��G�T�{�������
    �-��������������j���,=���b}CH~�(�:�Ct�%>����`;�?���������������������z	�����_Z�4��?���'Ze<�������r�J��m��n�i{�������/��߽����}����@��M�K���<M� ����i�.��~�S�ώ��/���p�y���
    tZ<�CFـ�"��K��X�J:���|��]d��abd�g7Da`�gx�r|��P�xF㙏�=X��Q�2:�Y�#�^{��?�Ŕ�@�p�h`��yϻ����ɦ��-pW��&:DE�A��@/��8@Q1�x��Tw&�q`����q����Y��3��X]�iT�B�z�L0��xF��:�����ٗM]�wV0���"��s���C�s����N�F���X�f�>v[N�~�~Wn���Ѭ�=�����5�Ro�oRP���I��l9峪C����v^<-���Sj?���;��1W}�	����� ��,���Z��g��s�^p���vN�S�
    ����Y-��S?rNkM�l������<r�g��tXv@�n���r��j�7�V��)��^9)���jF=;���Y�i�ONB3��;�5a
    LU�)�`���:�	W�f��ƙ�*���]>)8�F����R��̫�|_@�@�����CA(�T˧�0������7k�8|�l���v�y[�W	��Z�­�Z�I�E�;o�
    �K�L�Sv�v�=x��U�%8R���y�T�`���`�e�^%���h�0P,�a����q
    �5��2�������'�m��9��=q���*5	�:���mն`	�r��we�����K��?
    �0�Ev�#�\�pq
    ��E�hD ��%P;c]u{3�,��t'DN��k��0A�5�_]�]�p��y�����s�T��@r�W/�^�H�{���&�wvnoo�?�O���/��Ý��3�z�#`6�m�]�#�ƶ��v�Q������*��7m�x<���nc�{�?�7���}���5|��1����_�����#@��r:�P>)�a_�v���I�s��l����$�PEl�=��+E��X1��C�:�sb�_76n�~?�	�{f�#���疧��'���[���������>?���<��������(�?��������5��|�v�_e�<>�L�b��\N}�4(b'�����`���l���4�n�t��u5�4�@f��%="0��y�V!�O�g�X���2�۪�e܃7��o	��iݢ��l�y(;�-���1Q&N@�ݓZkc�}��;�
    � �=
    T<]Zͤ�����0���	���@�2F��=�*G>֣�?>�����R��{���W/^��r������M���C���=��ߣ����=���ߣ����}M��}�㞈"ѓ�ӺՀ)��ey<���z{�1D��NH�_�,���d0��8)P�ޯs�!_{�>yI�2�H�;�X�t�<�<��-U)�/9(yh^�9]�����������2��0��1�Q�=C/Ֆ��L)U�2-,���Oj��f�Z�.�v��nnv�N�� ��leL��Cox�Mla��>�
    t�a|�)��:X�Aji���b7����/`퐕E��i�r�-}��j8g��hM
    6���H��JK��h�5�&�l��#3)]Gȁɝg큅�(�l���Is6����hf��넑�hmQx���l1�HkP �
    �����7�����0X��Zsv�k�!�A�E��`$|Zp�^;06�k�)����:H;' �uB�&��N��)7߶�Ֆ!9�0e�?ÅY����F�3�L%'����N(�����}��q�đ!ws:\���p��ȲM�U���|��rV>�uZ���xb� �
    JX�`���i��h��v��v���Т�gg��t�*`���=	ة�j��hH�K�x�O���[,!�����Sk:;��/���-�IE���ytU'~F�3�@]ㄞ�=�ءg4���}4~�i�q��q���Ml#4/��MA�O�W6���7]೾4�Xq\+�bN�$�M\
    ��d��ƒE��|E�r`ĚiH0C�J0��Dfm�J}>{�ؓ�d�0,�2�t���VI�#���(���!��ݙX��h&�;�U��8ա�t�Y��+`���-4��$�s�R����T�A��h^���4�j�xrњM���i�#�꯸ک���P͂����ׁ�;o�?qr��l�;�M�[�~�������X	-d�m�:��j(Z!��Q��a5�N���n[~�ep�v)��ϯ����T���I���Iq�`�6�Y�c���kC�F6	
    ��6�A�qc�����`���4\��daEv�X:)�v�~�p�T�I�a�O�i}�w��
    �mF��vgxG���PA����'�2B�H�d?xW[~0ʪ(�fY��"M����.c�u��e��QG��p�j]�k͐;�+ΧS�`�'w$�H�Z
    V��A__�
    �6��3M�ۉ6c�
    �k'&�-<�/�-�C��Ƣ�t~~lV�押(T�2�8"lh���V���T�E.�A
    ��~���^�W�(C��ACG���a��D��^��
    GQ%���9��2ځ�EG �|e4���A��p1#X�"�E��:܀�;6��a/�G�L�Y���>ɨ�Ϻ#5���#��k��'V�nU�.�c�p����0���9&��D^\7ߙ��(XΤ}3I��0ڱ�Q��������@���\��ͥ�� �q`y�lJ*�!�T�G��g���Bx�M��Na����2��@RKS���I���C[oi35��\��"�4��T1l�?���%�+�;ذ��pdD'KH�c4E?��V.	�E�C��h�|o�Be޶F	[$X��B}��.��Nr�������B.� 3���*8���+������%/)WR;�T$�+�_o9F4�Ɂ�E)��Vd�U/<p��o�&���ڡ=���l1�rA4�cL^���2�8��r<]G�gķ�(cD ��@O�ƾ�5��/nD 2a#:�FT�!c��L��fX�U\!�H�v[�	��Tnۅ��?x�iӨ
    '����c���0���Y�t-�Xy*��2en�3d�~�`��[vB4AcCn��[��-!�T<�)xO��2���k}�GBZc�/Ը�G��ߝg���=��t�bxj��k��'����g������!�����?/J�������>�������MM=�?�?�?�?���������r�j�OQ�4�k�)�j�e_�F^`�A�
    �h/r���1^p�y�#WLH"x6(����a���2�Q���\CkU����$�P���Q�Χ�Λ�/����dB|�Q�=��� wR;{����/B�G>[��=�4��I��Y˓[����O��W{Q����Q�{��Q�{����G��Q�{�����I�{����d�?-�|��O�N����?�/��?������S�����Og��x�iGg��O��i�����y��^8_��p���꺢��4=x���?Ȟ
    �ss��Eߢ�&�])������Ö ����@>1-+]>�
    g23O��R��6�����lj�|t(ݑ�mf�,CSA�#��8pF˅ "ʆt�W�$0�_ʞԖ����R�M��*y��u/T6�u����/u�I�-J��E-�����
    *�q�#�	ٹ�t4��O{ע�e���sLή��U�5Zw��	��o����
    7�a]d�&<���a��ú�k��j���l����[�.\jB��S Y��a��+�6L�nh�<��)��
    �3����r�ܚ2�J��r
    �Še:��9�U��f_��Y8Fa��7�~�P�[��)+����}�����_�x��=��W�T,9!����F������dcÿ�~u6�kS*mf>&
    ��n�[�4z�ǩ6(߽�v޲+c�Y�����hn�n9N��ӣ{� Qr�"M.��W���EuR-8<Ow�7K`�o�/�8��C�N�@c�D!d���5���
    !�vj?ךg��ʕZ}��P�4g�1���'=����	?�������rę�]'�?�y�F�SW��xڝrX�/��`O^��{����uo�1�L��x�����7�m��	�����@�AѸ�"s��E;n
    �ްw��+�=����p3U������h'��a���nH��P@؅�_��p�	HA����J�?�1v�r��� �a�6z�l~P#�gR3W�p#���δ7d�z����#;(��]�EHC�F��H��S/�3O�*l��|���̍�R-z��UZr�����h��'x{ڀ���/ԠfG�"�1��(a���N��+Nx�>��oNLs�րc�M�r��ô�E]��0�O
    R[
    	�蜺������)���vy�G)�ƴA�`N�V[�>�ϗ���8
    �i]{�9�_H$A��>J]��׃�L�?@�Qf�+_���ф"��!�Q�S*�E��T�N�o[N�7C8_iB���v�L��W|N�g@��N�B�J�]}K����ct�M	���j@l
    t���_���pI�����V�)�_:���R�z;�|��i����N�����[#�ׯ�u�_����{�X�
    FH9r�jA�Roֶ
    ���q���+ 5k�}G
    *�!�30�X�
    i����f�N	��S��@�%��GZ�D��G�����y|����y|����y|������

  • Hi Ram,

    Thank you for this patch. I have tried this patch and tested application but still there is same problem of jumping effect in encoded file.

    Are you able to compile our capture_encode application source ?