5-5.¸ÖƼ ½º·¹µåÀÇ ÇÔÁ¤

¸ÖƼ ½º·¹µå´Â º¹ÀâÇÏ°í ³­À̵µ°¡ ³ô´Ù. ¿Ï¼ºµÈ ¿¹Á¦¸¸ º¸´Ï ½±´Ù°í ´À³¥ ¼öµµ ÀÖÁö¸¸ ½ÇÁ¦·Î ¸¸µé¾î º¸¸é º°º° ÈñÇÑÇÑ °ñÄ¡ ¾ÆÇ ¹®Á¦°¡ ¿©±â Àú±â¼­ ÅÍÁø´Ù. Áö±Ý±îÁö ¸¸µç Äڵ嵵 ¿Ïº®ÇÏÁö´Â ¾ÊÁö¸¸ ½ÃÇà Âø¿À¸¦ °ÅÃÄ ¸¸µé¾îÁø °ÍÀÌ´Ù.

½º·¹µå µ¿±âÈ­´Â ÀÌ·ÐÀûÀ¸·Î ¹è¿î´Ù°í Çؼ­ Å͵æÇÒ ¼ö ÀÖ´Â ±â¼úÀº ¾Æ´Ï´Ù. Á÷Á¢ °Þ¾î º¸°í ¹®Á¦¸¦ Ç®¾î ºÁ¾ß ÇÑ´Ù. ÀÌ ¿¹Á¦¸¦ ¸¸µé¸é¼­ ƯÈ÷ ´ÙÀ½°ú °°Àº »çÇ׿¡ À¯ÀÇÇØ¾ß Çϴµ¥ ÀϹÝÀûÀÎ ¸ÖƼ ½º·¹µå ±¸Á¶¿¡ °øÅëÀûÀ¸·Î Àû¿ëµÇ´Â ÀÌ·ÐÀÌ´Ù.

 

- ½º·¹µå°£¿¡ Æ÷ÀÎÅ͸¦ °øÀ¯Çؼ­´Â ¾ÈµÈ´Ù. Æ÷ÀÎÅÍ°¡ °¡¸®Å°´Â ´ë»óü°¡ ¾ðÁ¦ ¾î¶»°Ô ¹Ù²ðÁö ¾Ë ¼ö ¾ø¾î ¿ÏÀüÇÑ »çº»ÀÌ ¾Æ´Ï´Ù. Ç®À» ÆÐŶ Æ÷ÀÎÅÍ ¹è¿­·Î ÀÛ¼ºÇÑ´Ù°í ÇØ º¸ÀÚ.

 

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ºñÆ® °ªÀÇ Áõ°¨¿¡ ´ëÇØ ¿øÀÚ¼ºÀ» º¸ÀåÇϱ⠶§¹®ÀÌ´Ù. ¶Ç ÇÑÂÊÀº º¯°æ¸¸ ÇÏ°í ÇÑÂÊÀº Àб⸸ Çϴµ¥´Ù º¯°æ Äڵ尡 ´ë±â°¡ Ç®¸®´Â Á÷ÈÄ¿¡ ÀÖ¾î ½ºÀ§ÄªÀÌ ¹ß»ýÇÒ È®·üÀÌ °ÅÀÇ ¾ø´Ù.

ÀÌ·± ¿©·¯ °¡Áö Çΰ迡 ÀÇÇØ ÆíÀÇ»ó µ¿±âÈ­ °´Ã¼¸¦ »ç¿ëÇÏÁö ¾Ê¾ÒÁö¸¸ ¿ø·ÐÀûÀ¸·Î´Â »ç¿ëÇÏ´Â °ÍÀÌ ¿Ç´Ù. Â÷ÈÄ ÇÁ·Î±×·¥ÀÌ ´õ º¹ÀâÇØÁö°í ´Ù¾çÇÑ »óȲÀÌ ¹ß»ýÇÒ ¼ö ÀÖ´Ù¸é ÀÎÅͶô ÇÔ¼ö¸¦ ¾²´Â °ÍÀÌ Àû´çÇÏ´Ù.