4-1.¿Àµð¿À ¸®»ùÇøµ

ºñµð¿À´Â ´ëÃæ µÈ °Å °°À¸´Ï ÀÌÁ¦ ¼Ò¸®¸¦ ³» º¸ÀÚ. ¾Õ ¿¹Á¦¿¡¼­ ¿Àµð¿À ½ºÆ®¸²À» öÀúÈ÷ ¹«½ÃÇß¾ú´Âµ¥ ÀÌÁ¦ ¿µ»ó¿¡ ¸ÂÃç ¼Ò¸®¸¦ ³» º¼ °ÍÀÌ´Ù. µ¿¿µ»óÀÇ »ç¿îµå´Â ´Ù¾çÇÑ ÄÚµ¦À¸·Î ¾ÐÃàµÇ¾î ÀÖ¾î ÀÌ´ë·Î´Â Ãâ·ÂÇÒ ¼ö ¾ø´Ù.

½ºÆ®¸²¿¡¼­ ÆÐŶÀ» ²¨³» ÄÚµ¦¿¡°Ô Àü´ÞÇÏ¸é ¾ÐÃàÀ» Ç®¾î ÁÖÁö¸¸ ÀÌ Æ÷¸Ëµµ ´Ù¾çÇÏ´Ù. ÃÖÁ¾ Ãâ·Â ÀåÄ¡°¡ Á÷Á¢ Áö¿øÇÏÁö ¸øÇϸé Æ÷¸ËÀ» ¹Ù²ã¾ß ÇÑ´Ù. ÀÌ ÇÁ·ÎÁ§Æ®¿¡¼­ »ç¿ëÇÏ´Â Waveform ¶óÀ̺귯¸®´Â Á¤¼öÇüÀÇ »ùÇø¸ ´Ù·ê ¼ö ÀÖ¾î µ¿¿µ»óÀÇ ¿Àµð¿À Æ÷¸ËÀ» Á÷Á¢ Ãâ·ÂÇϱ⠾î·Æ´Ù. È®Àå ±â´ÉÀ» ¾²¸é °¡´ÉÀº ÇÏÁö¸¸ º¹Àâµµ°¡ Áõ°¡ÇÑ´Ù.

Æ÷¸ËÀ» ¹Ù²Ù¸é¼­ À½Áúµµ Ãâ·Â ÀåÄ¡¿¡ ¸Â°Ô ¹Ù²ã¾ß ÇÑ´Ù. ¼Ò½º°¡ ¾Æ¹«¸® 5.1 ä³Î·Î µÇ¾î À־ Ãâ·Â ÀåÄ¡°¡ 2ä³Î¹Û¿¡ Áö¿øÇÏÁö ¾ÊÀ¸¸é ¼Ò¿ë ¾ø´Ù. Æ÷¸Ë°ú À½ÁúÀ» ¿øÇÏ´Â ÇüÅ·Π¹Ù²Ù´Â °ÍÀ» ¸®»ùÇøµÀ̶ó°í Çϸç FFmpegÀº ¼ÒÇÁÆ®¿þ¾î ¸®»ùÇøµ(swr) ±â´ÉÀ» Á¦°øÇÑ´Ù. ´ÙÀ½ ÇÔ¼ö·Î º¯È¯ ¹æ½ÄÀ» ÁöÁ¤ÇÏ¿© ¸®»ùÇøµ ÄÁÅؽºÆ®¸¦ »ý¼ºÇÑ´Ù.

 

 struct SwrContext *swr_alloc_set_opts(struct SwrContext *s, int64_t out_ch_layout, enum AVSampleFormat out_sample_fmt, int out_sample_rate, int64_t  in_ch_layout, enum AVSampleFormat  in_sample_fmt, int  in_sample_rate, int log_offset, void *log_ctx)

 

Àμö°¡ ¾ÆÁÖ ¸¹´Ù. ù ¹ø° Àμö s´Â ÀÌ¹Ì ¸¸µé¾î ³õÀº ÄÁÅؽºÆ®°¡ ÀÖÀ¸¸é ¿É¼ÇÀ» ÂüÁ¶Ç쵂 ¾øÀ¸¸é NULL·Î ÁöÁ¤ÇÑ´Ù. out Á¢µÎ°¡ ºÙÀº 2, 3, 4¹ø° Àμö´Â ä³Î ·¹À̾ƿô, »ùÇà Æ÷¸Ë, »ùÇà ·¹ÀÌÆ®À̸ç Ãâ·Â Æ÷¸ËÀÌ´Ù. Ãâ·Â ÀåÄ¡°¡ Áö¿øÇÑ´Ù¸é ¿øÇÏ´Â Çü½ÄÀ» ¸¶À½´ë·Î ÁöÁ¤ÇÒ ¼ö ÀÖ´Ù.

in Á¢µÎ°¡ ºÙÀº 5, 6, 7¹ø° Àμö´Â ÀÔ·Â Æ÷¸ËÀ» ÁöÁ¤ÇÑ´Ù. ÇÁ·¹ÀÓÀ¸·ÎºÎÅÍ ¾òÀº Æ÷¸Ë, »ùÇ÷¹ÀÌÆ®¸¦ ³Ñ°Ü ÁÖµÇ Ã¤³Î ·¹À̾ƿôÀº ä³Î ¼ö·ÎºÎÅÍ ¼±ÅÃÇÑ´Ù. ä³ÎÀº ¼Ò¸®ÀÇ °³¼öÀÌ°í ä³Î ·¹À̾ƿôÀº °¢ ¼Ò¸®¸¦ ¾î¶² ½ºÇÇÄ¿¿¡ Ãâ·ÂÇÒ °ÍÀΰ¡¸¦ ÁöÁ¤ÇÑ´Ù. ½ºÇÇÄ¿º°·Î Àü¸é ¿ÞÂÊÀº 1, Àü¸é ¿À¸¥ÂÊÀº 2, Àü¸é Áß¾ÓÀº 4, ¿ìÆÛ´Â 8 ½ÄÀ¸·Î ºñÆ®°¡ ÇÒ´çµÇ¾î ÀÖÀ¸¸ç Èĸé°ú Áß¾Ó ½ºÇÇÄ¿ÀÇ Á¿쿡µµ º¸Á¶ ½ºÇÇÄ¿¸¦ µÑ ¼ö ÀÖ´Ù. ä³Î ¼ö¿¡ ¾î¿ï¸®´Â ·¹À̾ƿôÀº ´ÙÀ½ ÇÔ¼ö·Î ±¸ÇÑ´Ù.

 

int64_t av_get_default_channel_layout(int nb_channels)

 

ä³ÎÀÌ Çϳª ¹Û¿¡ ¾ø´Ù¸é Áß¾Ó ½ºÇÇÄ¿¿¡¼­ ¼Ò¸®°¡ ³ª¾ß ÇÏ´Ï ·¹À̾ƿôÀº 4°¡ µÈ´Ù. ½ºÅ×·¹¿À¶ó¸é ÁÂ¿ì ½ºÇÇÄ¿·Î ¼Ò¸®¸¦ ºÐ¹èÇϹǷΠ·¹À̾ƿôÀº 1, 2 µÑÀ» ºñÆ® ORÇÑ 3ÀÌ µÈ´Ù. ä³Î ¼ö°¡ ´õ ³ôÀ¸¸é ÈĸéÀ̳ª Áß¾Ó ½ºÇÇÄ¿ Á¿쿡µµ º¸Á¶ ½ºÇÇÄ¿¸¦ ¹èÄ¡ÇÒ ¼ö ÀÖ´Ù. µ¿¿µ»ó ¿øº»¿¡´Â ä³Î¼ö Á¤º¸¸¸ ÀÖÀ» »ÓÀÌ¸ç ¾îµð´Ù ¼Ò¸®¸¦ Ãâ·ÂÇÒ °ÍÀÎÁö, ä³Î ·¹À̾ƿôÀº »ç¿ëÀÚ°¡ ¼±ÅÃÇÏ´Â °ÍÀÌ´Ù.

ÀÌ ÇÔ¼ö´Â ä³Î ¼ö¿¡ µû¶ó ¹«³­ÇÑ ·¹À̾ƿôÀ» ¸®ÅÏÇÑ´Ù. ÀÌ °ªÀ» ±¸ÇØ »ç¿ëÇÏ¸é µÈ´Ù. µÚÂÊ Àμö µÑÀº ·Î±×¸¦ ³²±æ Àåºñ¿Í ·Î±× ·¹º§ÀÌµÇ ÇÊ¿ä ¾øÀ¸¸é 0, NULL·Î ÁöÁ¤ÇÑ´Ù. Àü´ÞÇÑ ¿É¼Ç´ë·Î ¸®»ùÇ÷¯¸¦ »ý¼ºÇÏ°í ¿É¼ÇÀ» ¼³Á¤ÇÏ¿© ¸®ÅÏÇÏ¸ç ¿¡·¯ ¹ß»ý½Ã NULLÀ» ¸®ÅÏÇÑ´Ù. ¿É¼ÇÀ» ¼³Á¤ÇÑ ÈÄ ´ÙÀ½ ÇÔ¼ö·Î ÃʱâÈ­ ÇÏ°í ´Ù »ç¿ëÇÑ ÈÄ ÇØÁ¦ÇÑ´Ù.

 

int swr_init(struct SwrContext *s)    

void swr_free(struct SwrContext ** s)       

 

ÀÌÁß Æ÷ÀÎÅ͸¦ ³Ñ±â¸é NULL±îÁö ´ëÀÔÇØ ÁØ´Ù. ¸®»ùÇ÷¯¸¦ ÁغñÇÑ ÈÄ ´ÙÀ½ ÇÔ¼ö·Î ¸®»ùÇøµÇÑ´Ù.

 

int swr_convert   (struct SwrContext *s, uint8_t **out, int out_count, const uint8_t ** in, int in_count )  

 

ù¹ø° Àμö·Î º¯È¯ ÄÁÅؽºÆ®¸¦ ÁÖ¸é ÁöÁ¤ÇÑ ¿É¼Ç´ë·Î º¯È¯ÇØ ÁØ´Ù. out´Â Ãâ·Â¿ë ¹öÆÛÀ̸ç out_count´Â Ãâ·Â ¹öÆÛÀÇ Å©±âÀÌµÇ ¹ÙÀÌÆ® ´ÜÀ§°¡ ¾Æ´Ï¶ó »ùÇà °³¼öÀÌ´Ù. Æò¸é Æ÷¸ËÀÎ °æ¿ì¸¦ À§ÇØ Ãâ·Â ¹öÆÛ´Â 2Â÷ ¹è¿­À» Àü´Þ¹ÞÁö¸¸ ÆÑ »ùÇ÷ΠÃâ·ÂÇÏ´Â °æ¿ì´Â ù ¹ø° ¹è¿­¸¸ »ç¿ëÇÑ´Ù.  inÀº ÀÔ·Â¿ë ¹öÆÛÀ̸ç ÆÑ »ùÇÃÀÎ °æ¿ì´Â ù ¹ø° ¹è¿­¸¸ »ç¿ëÇÑ´Ù. in_count´Â ÀÔ·Â ¹öÆÛÀÇ »ùÇà °³¼öÀÌ´Ù.

ÀÔ·ÂµÈ »ùÇú¸´Ù Ãâ·Â ¹öÆÛ°¡ ´õ ÀÛÀ¸¸é º¯È¯ÇÏÁö ¸øÇÑ ÀÔ·ÂÀº ¹öÆÛ¿¡ ³²°Ü µÐ´Ù. in°ú in_count¸¦ ¸ðµÎ 0À¸·Î Àü´ÞÇÏ¸é ¹öÆÛ¿¡ ³²Àº »ùÇÃÀ» ´Ù º¯È¯ÇÏ¿© ºñ¿î´Ù. ´Ù ÀÐÀ» ¶§±îÁö ·çÇÁ¸¦ µ¹¾Æ¾ß ÇÏ´Â ¹ø°Å·Î¿òÀÌ ÀÖ´Ù. ¹öÆÛ¸µÀ» ÇÇÇÏ·Á¸é swr_get_out_samples() ÇÔ¼ö·Î Ãâ·Â ¹öÆÛÀÇ ÃæºÐÇÑ Å©±â¸¦ ±¸ÇØ ¹Ì¸® ÇÒ´çÇÏ´Â °ÍÀÌ ÁÁ´Ù. ¾Æ´Ï¸é ¹Ì¸® ³Ë³ËÈ÷ ÇÒ´çÇØ ³õ´Â °Íµµ ±¦Âú´Ù. 20K¸é 5000°³ÀÇ »ùÇÃÀ» ÀúÀåÇÒ ¼ö ÀÖÀ¸¸ç ´ëºÎºÐÀÇ ÆÐŶÀº 2048°³ ÀÌÇÏÀÇ »ùÇÃÀ» °¡Áø´Ù.

º¯È¯µÈ »ùÇÃÀÇ °³¼ö¸¦ ¸®ÅÏÇÏ¸ç ¿¡·¯ ¹ß»ý½Ã À½¼ö¸¦ ¸®ÅÏÇÑ´Ù. »ùÇÃÀÇ °³¼ö¸¦ ¸®ÅÏÇÏ´Â °ÍÀÌÁö ¹ÙÀÌÆ® ´ÜÀ§°¡ ¾Æ´Ï¹Ç·Î °³¼ö¿¡ »ùÇÃÀÇ Å©±â¸¦ °öÇØ¾ß Á¤È®ÇÑ ¹ÙÀÌÆ®¼ö¸¦ ¾Ë ¼ö ÀÖ´Ù.