¸ÖƼ ½º·¹µå´Â º¹ÀâÇÏ°í ³À̵µ°¡ ³ô´Ù. ¿Ï¼ºµÈ ¿¹Á¦¸¸ º¸´Ï ½±´Ù°í
´À³¥ ¼öµµ ÀÖÁö¸¸ ½ÇÁ¦·Î ¸¸µé¾î º¸¸é º°º° ÈñÇÑÇÑ °ñÄ¡ ¾ÆÇ ¹®Á¦°¡ ¿©±â Àú±â¼ ÅÍÁø´Ù. Áö±Ý±îÁö ¸¸µç
Äڵ嵵 ¿Ïº®ÇÏÁö´Â ¾ÊÁö¸¸ ½ÃÇà Âø¿À¸¦ °ÅÃÄ ¸¸µé¾îÁø °ÍÀÌ´Ù.
½º·¹µå µ¿±âÈ´Â ÀÌ·ÐÀûÀ¸·Î ¹è¿î´Ù°í Çؼ Å͵æÇÒ ¼ö ÀÖ´Â ±â¼úÀº ¾Æ´Ï´Ù. Á÷Á¢
°Þ¾î º¸°í ¹®Á¦¸¦ Ç®¾î ºÁ¾ß ÇÑ´Ù. ÀÌ ¿¹Á¦¸¦ ¸¸µé¸é¼ ƯÈ÷ ´ÙÀ½°ú °°Àº »çÇ׿¡ À¯ÀÇÇØ¾ß Çϴµ¥ ÀϹÝÀûÀÎ
¸ÖƼ ½º·¹µå ±¸Á¶¿¡ °øÅëÀûÀ¸·Î Àû¿ëµÇ´Â ÀÌ·ÐÀÌ´Ù.
- ½º·¹µå°£¿¡ Æ÷ÀÎÅ͸¦ °øÀ¯Çؼ´Â ¾ÈµÈ´Ù. Æ÷ÀÎÅÍ°¡ °¡¸®Å°´Â ´ë»óü°¡ ¾ðÁ¦ ¾î¶»°Ô ¹Ù²ðÁö ¾Ë ¼ö ¾ø¾î ¿ÏÀüÇÑ »çº»ÀÌ ¾Æ´Ï´Ù. Ç®À» ÆÐŶ Æ÷ÀÎÅÍ ¹è¿·Î ÀÛ¼ºÇÑ´Ù°í ÇØ º¸ÀÚ.
AVPacket *vPool[psize];
ÆÐŶÀ» ÇÒ´çÇÏ¿© Ç®¿¡ ³Ö¾îµÑ ¼ö ÀÖ°í Æ÷ÀÎÅͷεµ ÆÐŶÀÇ Á¤º¸¸¦ ÀÚÀ¯·Ó°Ô ÀÐ°í ¾µ ¼ö´Â ÀÖ´Ù. ±×·¯³ª Æ÷ÀÎÅÍ´Â ¿ÏÀüÇÑ »çº»ÀÌ ¾Æ´Ï±â ¶§¹®¿¡ ´ë»óü°¡ ¾ðÁ¦ ¾î¶»°Ô ¹Ù²ðÁö ¾Ë ¼ö ¾ø´Ù. Æ÷ÀÎÅÍ°¡ ¾Æ´Ñ ±¸Á¶Ã¼ ÀÚü¸¦ ´ëÀÔ¹Þ¾Æ¾ß ÇÑ´Ù. ±×·¯¸é »óÀ§ ½º·¹µå¿¡¼
Ç®À» ¾î¶»°Ô ¹Ù²Ù´õ¶óµµ »çº»Àº ¿ÂÀüÈ÷ ÂüÁ¶ÇÒ ¼ö ÀÖ´Ù.
- AVFrame ±¸Á¶Ã¼´Â ½º·¹µå°£¿¡ °øÀ¯ÇÒ ¼ö ¾ø´Ù. µ¿¿µ»óÀº ¿ÏÀüÇÑ À̹ÌÁöÀÇ ÁýÇÕÀÌ ¾Æ´Ï¶ó ÀÌÀü, ÀÌÈÄÀÇ À̹ÌÁö¿¡ ´ëÇÑ
º¯ÈºÐ¸¸ ±â·ÏÇØ ³õ´Â´Ù. Å° ÇÁ·¹ÀÓ(I Frame)¸¸ ¿ÏÀüÇϸç P, B ÇÁ·¹ÀÓÀº I ÇÁ·¹ÀÓ¿¡¼ ¹Ù²ï Á¤º¸¸¸ °¡Áö°í ÀÖ´Ù.
±×·¡¼ avcodec_receive_frame ÇÔ¼ö´Â ÆÐŶ¿¡¼»Ó¸¸
¾Æ´Ï¶ó ÀÌÀü ÇÁ·¹ÀÓµµ ÂüÁ¶ÇÏ¿© ÇöÀç ÇÁ·¹ÀÓÀ» ¸¸µé¾î ³½´Ù. ÆÐŶÀº
unref¸¦ ¼öµ¿À¸·Î ÇØ¾ß ÇÏÁö¸¸ ÇÁ·¹ÀÓÀº ÀÌ ÇÔ¼ö ³»ºÎ¿¡¼ ¾Ë¾Æ¼ unref¸¦ Çϵµ·Ï
µÇ¾î ÀÖ´Ù. ÇÁ·¹ÀÓÀÇ Á¤º¸¸¦ °è¼Ó Àç»ç¿ëÇϱ⠶§¹®¿¡ ¿¬¼ÓÀûÀÎ »ç¿ëÀ» º¸ÀåÇØ ÁÖ¾î¾ß ÇÑ´Ù. Ç®¿¡ ³Ö¾î ³õ°í ´ÙÀ½ ½º·¹µå¿¡¼ ÀÌ¾î¼ »ç¿ëÇϱ⠾î·Æ´Ù.
receive ÇÔ¼ö°¡ unref¸¦
ÇÏÁö ¸øÇϵµ·Ï ÇÁ·¹ÀÓÀ» ÀÐÀº ÈÄ memset ÇÔ¼ö·Î ÇÁ·¹ÀÓÀ» Áö¿ö ¹ö¸®¸é µÈ´Ù. ±×·¯³ª ÀÌ·¸°Ô µÇ¸é ÀÌÀü ÇÁ·¹ÀÓÀÌ »ç¿ëÇÏ´ø ¹öÆÛ¸¦ Á¤¸®ÇÒ ±âȸ°¡ ¾ø¾î Áö¼ÓÀûÀÎ ¸Þ¸ð¸® ´©¼ö°¡ ¹ß»ýÇÑ´Ù. ÇÁ·¹ÀÓÀ» ´Ù ¾´ ÈÄ unref¸¦ ¼öµ¿À¸·Î È£ÃâÇÏ¸é ´Ù¿îµÈ´Ù. receive ÇÔ¼ö¿¡¼ ÇÁ·¹ÀÓÀ» ¾î¶² ½ÄÀ¸·Î Á¤¸®ÇÏ´ÂÁö Á¤È®È÷ ¾Ë±â ¾î·Æ´Ù.
ÇÁ·¹ÀÓÀ» ´Ù¸¥ ½º·¹µå¿¡°Ô Àü´ÞÇÏ·Á¸é »çº»À» ¶° ¿ÏÀüÇÑ º¹»çº»À» ¸¸µé¾î¾ß ÇÑ´Ù.
À§ ¿¹Á¦´Â av_frame_clone ÇÔ¼ö·Î »çº»À» ¶° Ç®¿¡ ÀúÀåÇÑ´Ù.
- ½º·¹µå³¢¸® µ¿±âÈÇÏ·Á¸é Å©¸®Æ¼Äà ¼½¼Ç, ¹ÂÅؽº µîÀÇ µ¿±âÈ °´Ã¼°¡ ÇÊ¿äÇÏ´Ù. Ç®ÀÇ ¿©À¯·®À» °ü¸®ÇÏ·Á¸é ¼¼¸¶Æ÷¾î°¡
Àû´çÇÏ°í ºñÆ®¸Ê Á¦ÀÛ ¿Ï·á »ç½ÇÀ» ¾Ë¸± ¶§´Â À̺¥Æ®°¡ Á¦°ÝÀÌ´Ù. ÀÌ ÇÁ·ÎÁ§Æ®´Â ²À ÇÊ¿äÇÑ °÷¿¡ ¹ÂÅؽº¸¸
»ç¿ëÇÏ°í Àִµ¥ À̺¸´Ù´Â ´õ ¸¹Àº µ¿±âÈ °´Ã¼°¡ ÀÖ¾î¾ß ÇÑ´Ù.
put, get º¯¼ö³ª Ç®ÀÇ Ã·ÀÚ°¡ µ¿±âÈ °´Ã¼ÀÇ ¿ªÇÒÀ» ´ë½ÅÇÏ°í
Àִµ¥ Ç®ÀÇ »óÅ¿¡ µû¶ó ¼ø¼´ë·Î Àб⠶§¹®¿¡ Å« ¹®Á¦°¡ ¾ø´Ù. ±×·¯³ª °øÀ¯ÇÏ´Â º¯¼ö´Â ¿ø·ÐÀûÀ¸·Î µ¿±âÈÇÏ´Â
°ÍÀÌ ¿Ç´Ù. ´ÙÀ½ ¹®ÀåÀÌ ¶§·Î´Â ¹®Á¦°¡ µÉ ¼öµµ ÀÖ´Ù.
if (++vget == psize) vget = 0;
++vget ÇÏ´Â Áß°£¿¡ ´Ù¸¥ ½º·¹µå¿¡¼ ÀÌ º¯¼ö°ªÀ» ÀÐÀ¸¸é Áõ°¡ÁßÀÇ
°ªÀ» ÀÐ°Ô µÇ¾î ¹Î°¨ÇÑ ¹®Á¦°¡ ¹ß»ýÇÑ´Ù. ¹®Á¦¸¦ ¾Ë¸é¼µµ µ¿±âȸ¦ ÇÏÁö ¾ÊÀº ÀÌÀ¯´Â Win32 ½Ã½ºÅÛÀº 32ºñÆ® °ªÀÇ Áõ°¨¿¡ ´ëÇØ ¿øÀÚ¼ºÀ» º¸ÀåÇϱ⠶§¹®ÀÌ´Ù. ¶Ç ÇÑÂÊÀº º¯°æ¸¸ ÇÏ°í ÇÑÂÊÀº Àб⸸ Çϴµ¥´Ù º¯°æ Äڵ尡 ´ë±â°¡ Ç®¸®´Â Á÷ÈÄ¿¡ ÀÖ¾î ½ºÀ§ÄªÀÌ ¹ß»ýÇÒ È®·üÀÌ
°ÅÀÇ ¾ø´Ù.
ÀÌ·± ¿©·¯ °¡Áö Çΰ迡 ÀÇÇØ ÆíÀÇ»ó µ¿±âÈ °´Ã¼¸¦ »ç¿ëÇÏÁö ¾Ê¾ÒÁö¸¸ ¿ø·ÐÀûÀ¸·Î´Â »ç¿ëÇÏ´Â °ÍÀÌ ¿Ç´Ù. Â÷ÈÄ ÇÁ·Î±×·¥ÀÌ ´õ º¹ÀâÇØÁö°í ´Ù¾çÇÑ »óȲÀÌ ¹ß»ýÇÒ ¼ö ÀÖ´Ù¸é ÀÎÅͶô ÇÔ¼ö¸¦ ¾²´Â °ÍÀÌ Àû´çÇÏ´Ù.