· KLDP.org · KLDP.net · KLDP Wiki · KLDP BBS ·
DemuxMPEG

DemuxMPEG

1.1. ½ÃÀÛÇϱâÀü¿¡

  • ÀÌ ¹®¼­¿¡ »ç¿ëµÈ ¿ë¾î´Â ÀϹÝÀûÀÎ ¿ë¾îÇؼ®°ú ´Ù¸¦¼ö ÀÖ½À´Ï´Ù. ÀÌ°ÍÀº ¾îµð±îÁö³ª ÇÊÀÚÀÇ °³º°Çؼ®¿¡ ÀÇÇÑ ºÒ¿ÏÀüÇÑ ºñÇ¥ÁؼöÁØÀÇ ¹®¼­ÀÓÀ» ÀǹÌÀÌ¸ç ½ÇÁ¦ ¿ë¾îÀÇ ¿ø¶æÀº ´Ù¸¥¹®¼­¸¦ º¸½Ã±â ¹Ù¶ø´Ï´Ù.
  • MPEGÀÇ ÀÌÇØ´Â Áö·çÇÑ bit ¿¬»êÀÇ ¹Ýº¹°ú °Ë»ö¿£ÁøÀÇ »ç¿ë¿¡ °¡±õ´Ù´Â »ý°¢ÀÌ µì´Ï´Ù. ÇÏÁö¸¸ ÆÐÅ·¹æ½Ä°ú ¾ÐÃà¹æ¹ý·Ð, ±×¸®°í ±×·¡ÇÈ󸮵¼­ ¸¹Àº ÈùÆ®¸¦ ¾òÀ»¼ö ÀÖ¾î ÇѹøÂë Àç¹Õ°Ô ½ÃµµÇغ¼¼ö ÀÖ´Â Çй®ÀÎ°Í °°½À´Ï´Ù.
  • ¼ö¹ÝµÇ¾î¾ß ÇÏ´Â ±âÃÊÁö½Ä: ¿¬°á¸®½ºÆ®(¹öÆÛ, ½ºÅÃ, Æ®¸®), ÇÒ´çÀü·«, ½Åȣó¸®, ³×Æ®¿÷(TCP,UDP), ¼öÇбâÃÊ(»ï°¢ÇÔ¼ö,¹Ì/ÀûºÐ,Åë°è,º¤ÅÍ,³í¸®/»ê¼ú¿¬»ê), ¾î¼Àºí¸®(CPUƯ¼º,¿ª¾î¼Àºí), ¿µ»óó¸®, ...

1.2. MPEG ÀÌ·ÐÀÇ ÀϹÝÈ­

1.2.1. ¿ë¾î Á¤ÀÇ

  • DMB : Digital Multimedia Broadcasting
  • CAT : Conditional access table
  • DTS : Decoding timestamp
  • ECM : Entitlement control message
  • EMM : Entitlement management message
  • ES : Elementary stream
  • NIT : Network information table
  • PAT : Program association table
  • PES : Packerized elementary stream
  • PCR : Program clock reference
  • PID : Packet indentifier
  • PMT : Program map table
  • PS : Program stream
  • PSI : Program specific information
  • PTS : Presentation timestamp
  • TS : Transport stream (ISO/IEC 13818-1)
  • TXT : Teletext
  • ME : Motion Estimation
  • MC : Motion Compensation
  • MV : Motion Vector
  • MB : Macro Block
  • DON : Decoding Order Number
  • FU : Fragmentation Unit
  • GDR : Gradual Decoder Refresh
  • SPS : Sequence Parameter Set
  • PPS : Picture Parameter Set
  • IDR : Instantaneous Decoding Refresh
  • MTAP : Multi-time Aggregation Packet
  • NRI : NAL Reference IDC
  • RBSP : Raw Byte Sequence Payload
  • SEI : Supplemental Enhancement Information
  • SI : Switching I
  • SNP : Single NAL unit Packet
  • SP : Switching P
  • STAP : Single-time Aggregation Packet
  • DPB : Decoded Picture Buffer
  • CAVLC : Context Adaptive Varable Length Coding
  • CABAC : Context Based Arithmetic Coding
  • VCL : Video Coding Layer
  • HRD : Hypothentical Reference Decoder
  • AU : Access Unit Delimiter
  • VOP : Video Object Plane
  • GOP : Group Of Picutres
  • GOV : Group Of Video Object Plane
  • POC : Picture Order Count
  • DHT : Discrete Hadamard Transform
  • FMO : Flexible Macroblock Ordering
  • ASO : Arbitary Slice Order
  • CPB : Coded Picture Buffer
  • VBV : Video Buffer Verifier
  • M1S : MPEG1 system
  • M2P : MPEG2 program
  • M2T : MPEG2 transport

1.2.2. »ö»óÀÇ Ç¥Çö

  1. R/G/B : »¡°­/ÃÊ·Ï/ÆĶû À¸·Î ÀÌ·ç¾îÁø ºûÀÇ »ï¿ø»öÀÇ °­µµÁ¶Àý¿¡ ÀÇÇÑ »ö Ç¥Çö ¹æ½ÄÀ¸·Î °¢ R/G/B °£ÀÇ »óÈ£ ¿¬°üÀÌ Ä¿¼­ ¾î´À ÇÑ°³ÀÇ »öÀÌ ´©¶ôµÇ¸é ½Ã°¢ÀûÀ¸·Î ±Ý¹æ ´À²¸Áý´Ï´Ù.
  2. YUV : Y´Â ¹à±â½ÅÈ£ÀÌ°í Cb, CrÀº »öÂ÷½ÅÈ£¶ó°í ÇÏ¿© ÀÌ 3°¡Áö ¼ººÐºñÀ²¿¡ µû¸¥ Ç¥Çö¹æ½ÄÀ¸·Î °¢ Y/Cb/Cr°£ÀÇ »óÈ£ ¿¬°üÀÌ À۾Ƽ­ ¾î´ÀÇÑ°³°¡ ´©¶ôµÇ´õ¶óµµ ½Ã°¢ÀûÀ¸·Î Å« Â÷À̸¦ ´À³¢±â ¾î·Æ½À´Ï´Ù.
    • MPEG¿¡¼­´Â 4:4:4, 4:2:2, 4:2:0, 4:0:2 µîÀÇ ºñÀ²À» »ç¿ëÇÕ´Ï´Ù.
  3. YCbCr <-> RGB ±Ù»çÄ¡ ºñÀ²°ø½Ä (º¸Á¤ÇÏÁö ¾ÊÀº °ø½Ä)
    Y = krR + kgG + kbB
    Cr = R - Y
    Cg = G - Y
    Cb = B - Y
    
  4. YCbCr <-> RGB ºñÀ²»ó¼ö°ø½Ä
    1 = kb + kr + kg
    kr = 0.299
    kg = 0.587
    kb = 0.114
    
    Y = krR + (1 - kb - kr)G + kbB
    Cb = 0.5(B - Y)/(1 - kb)
    Cr = 0.5(R - Y)/(1 - kr)
    
    R = Y + (1 - kr)Cr/0.5
    G = Y - 2kb(1 - kb)Cb/(1 - kb - kr) - 2kr(1 - kr)Cr/(1 - kb - kr)
    B = Y + (1 - kb)Cb/0.5
    
  5. YCbCr <-> RGB °£ÀÇ kb,kr,kg ºñÀ²»ó¼ö Àû¿ëÈÄ Á¤¸®µÈ °ø½Ä
    Y = 0.299R + 0.587G + 0.114B
    Cb = 0.564(B - Y)
    Cr = 0.713(R - Y)
    
    R = Y + 1.402Cr
    G = Y - 0.344Cb - 0.714Cr
    B = Y + 1.772Cb
    
  6. YCbCr <-> RGB º¯È¯ °ø½ÄÀ» "8:8:8" Æ÷¸Ë¿¡ ´ëÇÏ¿© ÃÖÀûÈ­ÇÑ °ø½Ä (Á¤¼ö°è»ê¹ý)
    Y = 0.299R + 0.587G + 0.114B = 77R/256 + 150G/256 + 29B/256
    Cb = -0.16874R - 0.33126Green + 0.5B = -(44R/256) - 87G/256 + 131B/256 +128
    Cr = 0.5R - 0.41869G - 0.08131B = 131R/256 - 110G/256 + 21B/256 +128
    
    R = Y + 1.402Cr = s_Y + (359Cr - 128)/256
    G = Y - 0.34414Cb - 0.71414Cr = Y - (88Cb - 128)/256 - (183Cr - 128)/256
    B = Y + 1.772Cb = s_Y + (454Cb - 128)/256
    
  7. RGB( 8 : 8 : 8 ) to YUV( YCbCr, 8 : 8 : 8 ) º¯È¯ ¿¹Á¦¼Ò½º
    void RGB_YCbCr(int s_Red, int s_Green, int s_Blue, int *s_Y, int *s_Cb, int *s_Cr)
    { /* º¯È¯°úÁ¤¿¡¼­ »ö°¨ ¼Õ½ÇÀÌ ¾à 5% ±îÁö ¹ß»ý */
     s_Red &= 0xff, s_Green &= 0xff, s_Blue  &= 0xff;
     *s_Y  = (int)(  ((19595 * s_Red) >> 16) + ((38470 * s_Green) >> 16) + ((7471  * s_Blue) >> 16)       );
     *s_Cb = (int)( -((11059 * s_Red) >> 16) - ((21709 * s_Green) >> 16) + ((32768 * s_Blue) >> 16) + 128 );
     *s_Cr = (int)(  ((32768 * s_Red) >> 16) - ((27439 * s_Green) >> 16) - ((5329  * s_Blue) >> 16) + 128 );
     *s_Y  = (int)(  (*s_Y  > 0) ? *s_Y  : 0);  *s_Y  = (int)((*s_Y  < 255) ? *s_Y  : 255        );
     *s_Cb = (int)(  (*s_Cb > 0) ? *s_Cb : 0);  *s_Cb = (int)((*s_Cb < 255) ? *s_Cb : 255        );
     *s_Cr = (int)(  (*s_Cr > 0) ? *s_Cr : 0);  *s_Cr = (int)((*s_Cr < 255) ? *s_Cr : 255        );
    }
  8. YUV( YCbCr, 8 : 8 : 8 ) to RGB( 8 : 8 : 8 ) º¯È¯ ¿¹Á¦¼Ò½º
    void YCbCr_RGB(int s_Y, int s_Cb, int s_Cr, int *s_Red, int *s_Green, int *s_Blue)
    { /* º¯È¯°úÁ¤¿¡¼­ »ö°¨ ¼Õ½ÇÀÌ ¾à 5% ±îÁö ¹ß»ý */
     s_Y &= 0xff, s_Cb &= 0xff, s_Cr &= 0xff;
     s_Cb -= 128;
     s_Cr -= 128;
     *(s_Red)   = (int)( s_Y + ((91881 *s_Cr)/65536) );
     *(s_Green) = (int)( s_Y - ((22554 *s_Cb)/65536) - ((46802*s_Cr)/65536) );
     *(s_Blue)  = (int)( s_Y + ((116130*s_Cb)/65536) );
    }
  9. À§ °ø½ÄÀ» Àû¿ëÇÏ¿© °¢ color format°£ÀÇ ÀÚÀ¯·Î¿î º¯È¯ÀÌ °¡´ÉÇÑ library¸¦ ¸¸µé¾î ºÃ½À´Ï´Ù. [http]»óÈ£º¯È¯library
  10. Linux frame buffer »ó¿¡¼­ÀÇ YUV Ç¥Çö
    • (ÀÌ°ÍÀ» ¿¹Á¦·Î º¸¿©ÁÙ±î? ¾Æ´Ï¸é Frame map ±¸Á¶¿¡ ´ëÇؼ­¸¸ ¼³¸íÇÒ±î?)

1.2.3. MMX

  1. Intel °è¿­ÀÇ CPU¿¡¼­ Á¦°øµÇ´Â MultiMedia eXtention ¸í·É¾î
    ±â´É °ªÀÇ ¼øȯÀÌ °í·ÁµÉ ¶§ ºÎÈ£°¡ °í·ÁµÉ ¶§ ºÎÈ£°¡ °í·ÁµÇÁö ¾ÊÀ» ¶§
    »ê¼úµ¡¼À PADDB, PADDW, PADDD PADDSB, PADDSW PADDUB, PADDUW
    »ê¼ú»¬¼À PSUBB, PSUBW, PSUBD PSUBSB, PSUBSW PSUBUB, PSUBUW
    »ê¼ú°ö¼À PMULL, PMULH
    »ê¼ú°ö¼ÀÀÚ¸®¿Ã¸² PMADD
    ºñ±³ PCMPEQB, PCMPEQW, PCMPEQD
    PCMPGTPB, PCMPGTPW, PCMPGTPD
    º¯È¯ PUNPCKHBW PACKSSWB PACKUSWB
    PUNPCKHWD PACKSSDW
    PUNPCKHDQ
    PUNPCKLBW
    PUNPCKLWD
    PUNPCKLDQ
    ³í¸®¿¬»ê ¹­À½ÀÇ ´ÜÀ§ Quad´ÜÀ§
    PAND
    PANDN
    POR
    PXOR
    PSLLQ
    PSRLQ
    Àü¼Û Double word Àü¼Û Quad word Àü¼Û
    MOVD MOVQ
    MMX »óŸ¦ ºñ¿ò EMMS
  2. Pack ¸í·É¾î : ¹ÙÀÌÆ®¿­¿¡ ´ëÀÀÇÏ´Â ¸í·É¾î ('P'·Î ½ÃÀÛÇÏ´Â ¸í·É¾î)
  3. Unpack ¸í·É¾î : ¹ÙÀÌÆ®¿­ÀÇ È¥ÇÕ¿¡ ´ëÀÀÇÏ´Â ¸í·É¾î
  4. ÁÖÀÇ: MMX´Â FPU¸í·É°ú È¥ÇÕÇؼ­ »ç¿ëÇÒ¼ö ¾ø½À´Ï´Ù. ÀÌ°ÍÀº FPUÀÇ ·¹Áö½ºÅÍ¿Í MMX ÀÇ ·¹Áö½ºÅÍ´Â °°Àº ·¹Áö½ºÅÍÀ̱⠶§¹®ÀÔ´Ï´Ù.

1.2.4. ÁÖ»ç¹æ½Ä

  • °°Àº Áֻ缱ÀÌ¶óµµ °ÝÇàÁÖ»ç·Î ±¸ÇöÇÒ °æ¿ì ÇÁ·¹ÀÓ¼ö°¡ ³ôÀº°Í°°Àº Âø°¢À» ÀÏÀ¸ÄÑ º¸´Ù ÀÚ¿¬½º·¯¿ö º¸ÀÌ°Ô µË´Ï´Ù. °°Àº 100°³ÀÇ Áֻ缱À» »ç¿ëÇÏ¿´À»¶§ °¢ ÇÁ·¹ÀÓÀÇ °¹¼ö°¡ °ÝÇàÁÖ»çÀÇ °æ¿ì 2¹è·Î º¸À̱⠶§¹®ÀÔ´Ï´Ù.
    1. ¼øÂ÷ÁÖ»ç (Progressive scanning) : Áֻ缱À» ¿ÞÂÊ¿¡¼­ ¿À¸¥ÂÊÀ¸·Î À§¿¡¼­ ¾Æ·¡·Î ¼øÂ÷ÀûÀ¸·Î ¹ß»ý½ÃÅ°´Â ¹æ½Ä
    2. °ÝÇàÁÖ»ç (Interlaced scanning) : ¿ÞÂÊ¿¡¼­ ¿À¸¥ÂÊÀ¸·Î À§¿¡¼­ ¾Æ·¡·Î ¼øÂ÷ÀûÀ¸·Î ¹ß»ýÇÏÁö¸¸ À§¿¡¼­ ¾Æ·¡·ÎÀÇ Áֻ缱Àº 2¹èÀÇ °£°ÝÀ¸·Î 1/2¸¸Å­ÀÇ Áֻ缱À» °ÝÀÚ·Î °¢°¢ ¹ß»ý½ÃÅ°´Â ¹æ½Ä

1.2.5. I/P/B picture

  • ÀÌ°ÍÀº ½Ã°£°ú °ø°£ ¸ðµÎ °ü¿©µÇ´Â È­¸é ¾ÐÃàÀÇ ¹üÀ§À̸ç IÀÇ °æ¿ì´Â °ø°£¿¡¸¸ °ü¿©ÇÏ´Â È­¸éÀÌ°í P, BÀÇ °æ¿ì´Â °ø°ü°¡ ´õºÒ¾î ½Ã°£ÀÌ °ü¿©µÇ¾î¾ß ÇÏ´Â È­¸éÀ̸ç BÀÇ °æ¿ì´Â ±¸Çö»ó ´Ù¼Ò ¾î·Æ´Ù´Â °ÍÀ» ÀÌÇØÇÒ¼ö ÀÖ½À´Ï´Ù.
    1. I (Intra picture) : ÇϳªÀÇ ¿ÏÀüÇÑ È­¸éÀ» ±¸¼ºÇÒ¼ö ÀÖ´Â È­¸éÀ¸·Î ¹Ù·Î ¹Ø¿¡ ¿À´Â P¿Í BÈ­¸éÀ» ±¸¼ºÇϴµ¥ ÂüÁ¶ÀûÀÎ ¿ªÇÒÀ» ¼öÇàÇÏ´Â ±âÁØÀÔ´Ï´Ù.
    2. P (Predictive picture) : °¡Àå ÃÖ±ÙÀÇ I ¶Ç´Â P È­¸éÀ¸·ÎºÎÅÍ ¿òÁ÷ÀÓÀÇ Â÷À̺κи¸À» ¾ÐÃàÇÑ È­¸éÀÔ´Ï´Ù. ´ç¿¬È÷ PÈ­¸é¸¸À¸·Î´Â Àüüȭ¸éÀ» °»½ÅÇÒ¼ö ¾øÀ¸¸ç Àû¾îµµ I È­¸éÀÌ ÇÑ°³ ÀÌ»ó ÀÖ¾î¾ß ÇÑ´Ù´Â ¿¹»óÀ» ÇÒ¼ö ÀÖÀ¸¸ç ¿òÁ÷ÀÓÀÌ ÀÖ´Â ¿µ¿ª¸¸À» ¾ÐÃàÇϹǷΠI È­¸éº¸´Ù ÀÛ´Ù´Â °Íµµ ¿¹»óÇÒ¼ö ÀÖ½À´Ï´Ù. ¿©±â¼­ Áß¿äÇÑ Á¡Àº P È­¸éÀº ½Ã°£¼±»ó¿¡¼­ °ú°ÅÀÇ È­¸éÀ¸·ÎºÎÅÍ Â÷ÀÌÁ¡¸¸À» ¾ÐÃàÇÏ´Â ¼ø¹æÇâ ¿¹Ãø¸¸À» Àû¿ëÇÕ´Ï´Ù.
    3. B (Bidirectionally predictive picture) : P¿Í ºñ½ÁÇÏ°Ô ÀÎÁ¢ÇÑ I¶Ç´Â P ¶Ç´Â B·ÎºÎÅÍÀÇ Â÷À̸¦ ¾ÐÃàÇÑ È­¸éÀÔ´Ï´Ù. P¿Í ´Ù¸¥Á¡Àº ½Ã°£¼±»ó¿¡¼­ °ú°Å ¹× ¹Ì·¡ µÎ°¡Áö ¸ðµÎ ¿¹ÃøÇÏ´Â °ÍÀÌ Â÷ÀÌÁ¡À̶ó ÇÒ¼ö ÀÖ½À´Ï´Ù.

1.2.6. ÇãÇÁ¸¸ºÎÈ£ (Huffman)

  • ÀÏ¹Ý ÇãÇÁ¸¸ : ÀÌ ¾ÐÃà¹æ½ÄÀº ºñ¼Õ½Ç¼º ¾ÐÃàÀ¸·Î ¹ß»ýÈ®·üÀÌ ³ôÀº µ¥ÀÌÅÍ¿¡ ´ëÇؼ­ º¸´Ù ÀûÀº ºñÆ®¸¦ ÇÒ´çÇÏ´Â ¹æ½ÄÀÔ´Ï´Ù. ¾ÆÁö¸¸ ÀÏ¹Ý ÇãÇÁ¸¸ ºÎÈ£¹æ½ÄÀº ¾ÐÃàÇÒ ¹üÀ§¸¦ ¹Ì¸® °Ë»öÇÏ¿© ¹ß»ýºóµµ¸¦ ÃàÀû½ÃÄѵξî¾ß ÇÏ´Â ´ÜÁ¡ÀÌ ÀÖ½À´Ï´Ù.
  • ÀûÀÀÈ­ ÇãÇÁ¸¸ : ÀÌ ¹æ½ÄÀº ÀÏ¹Ý ÇãÇÁ¸¸ ºÎÈ£¿Í °°ÀÌ ¹ß»ýÈ®·üÀÌ ³ôÀº µ¥ÀÌÅÍ¿¡ ÀûÀº ºñÆ®¸¦ ÇÒ´çÇÏ´Â °ÍÀº °°Áö¸¸ ¹Ì¸® ¾ÐÃàÇÒ ¹üÀ§¸¦ °Ë»öÇÏÁö ¾Ê°í ÀÌÁøÆ®¸®ÀÇ ±³È¯À» »ç¿ëÇÏ¿© Áö¼ÓÀûÀ¸·Î ¹ß»ýÈ®·ü¿¡ ÀûÀÀ½ÃÅ°´Â °ÍÀÌ ´Ù¸¨´Ï´Ù.

1.2.7. DPCM (Differntial PCM)

  • ÀÌ°ÍÀº ÀÏ·ÃÀÇ ½Ã°£¼±»ó¿¡¼­ º¯È­µÇ´Â °ªÀ» ±×´ë·Î ½Ã°£¼±»ó¿¡ ¹è¿­Çϱ⠺¸´Ù´Â ¾ÐÃàÀÇ È¿À²ÀûÀÎ ¹æ¾ÈÀ» °í¾ÈÇϱâ À§Çؼ­ ÀÎÁ¢ÇÑ ½Ã°£»ó¿¡ º¯È­µÈ °ªµé°£ÀÇ Â÷À̸¦ ¹è¿­ÇÏ´Â ¹æ½ÄÀÔ´Ï´Ù. ÀÌ°ÍÀº ¾ÐÃà¿¡ Á÷Á¢ÀûÀÎ ¿µÇâÀ» ÁÖÁö´Â ¾ÊÁö¸¸ °ªÀÇ ¹üÀ§¸¦ ÁÙÀÌ´Â È¿°ú°¡ ¹ß»ýÇÏ¿© ¾ÐÃà½Ã¿¡ ÀûÀº ºñÆ®¸¦ ´Ù·ç°Ô À¯µµÇÕ´Ï´Ù. Áï, ´ÙÀ½°ú °°Àº µ¥ÀÌÅÍ°¡ ÁÖ¾îÁø´Ù¸é ÀÌ°ÍÀ» DPCMÀ¸·Î ¹Ù²Ù¸é ±× ¾Æ·¡ÀÇ °ªÃ³·³ º¯È¯µÇ´Â°ÍÀÌ°í º¸½Ã¸é ¾Æ½Ã°ÚÁö¸¸ °ªÀÇ Å©±â°¡(¾çÀÌ ¾Æ´Õ´Ï´Ù!) ¸¹ÀÌ ÁÙ¾úÀ½À» È®ÀÎÇÒ¼ö ÀÖ½À´Ï´Ù.
    • ÁÖ¾îÁø ½Ã°£Àû µ¥ÀÌÅÍ : °ªÀÇ ¹üÀ§°¡ ¾Æ·¡ÀÇ °æ¿ì 1 ºÎÅÍ 10±îÁö 10´Ü°è¿´´Ù°í Çϸé
      ½Ã°£ÀÇ È帧 ->
      1 2 4 7 7 10 9 7 4 3 1
    • DPCMÀ¸·Î º¯È¯µÈ µ¥ÀÌÅÍ : ÀÌ·¸°Ô º¯È¯µÈÈÄ¿¡ -3 ºÎÅÍ 3±îÁö 7´Ü°è·Î ÁÙ¾ú³×¿ä.
      ½Ã°£ÀÇ È帧 ->
      1 1 2 3 0 3 -1 -2 -3 -1 -2
  • º¸½Ã°í¼­ µ¥ÀÌÅÍÀÇ ¹üÀ§°¡ ÁÙ¾îµç°ÍÀÌ ¾î¶² À̵æÀÏ±î ±Ã±ÀÇϽŠºÐµéÀÌ °è½Ç°Ì´Ï´Ù. µÚ¿¡ °è¼ÓµÇ´Â ±ÛµéÀ» ÀÐÀ¸½Ç¶§ ÀÌ ±Ã±ÀÇÔÀ» °è¼Ó ¿°µÎÇϸ鼭 Àо¼¼¿ä.

1.2.8. À̻꿩Çöº¯È¯ (DCT: Discrete Cosine Transform)

  • ¾ÐÃàÀÇ È¿À²À» ³ôÀ̱âÀ§ÇÑ ¼ö´ÜÁß¿¡ ÇÑ°¡Áö·Î ¿¬¼Ó¼ºÀ» º¸´Ù ±ä¹ÐÇÏ°Ô À¯ÁöÇϵµ·Ï ÇÏ¿© ¾ÐÃàÈ¿À²À» Áõ´ëÇÒ¼ö ÀÖ½À´Ï´Ù. ÁÖÆļö¼ººÐÀÇ Æ¯¼ºÀ» Àß È°¿ëÇÏ´Â ¼öÇÐÀûÀÎ º¯È¯¹æ½ÄÀÇ ÇϳªÀÔ´Ï´Ù.
  • ÀÏÁ¤Å©±âÀÇ ºí·ÏÀ¸·Î ¿µ¿ªÀ» ÂÉ°³¾î ÁÖÆļö ¼ººÐÀ¸·Î ºÐ¸®Çس»´Â ¹æ½ÄÀ¸·Î MPEG¿¡¼­´Â ÀúÁÖÆÄ ¼ººÐÀº Å« Â÷À̸¦ º¸ÀÌÁö ¾ÊÀ¸¹Ç·Î 0¿¡ ¼ö·ÅÇÏ´Â °ªÀÌ ¹ß»ýÇϵµ·Ï Á¤·ÄÇÏ°Ô µË´Ï´Ù. ¿©±â¼­ ÁÖÆļö ¼ººÐÀ̶ó ÇÔÀº ¿µ»óÀÇ °æ¿ì ÀÎÁ¢ÇÑ Çȼ¿°£ »ö»ó°ªÀÇ Â÷À̸¦ ¸»Çϸç 8x8ºí·Ï³»¿¡¼­ ÀüºÎ °°Àº »öÀ» °¡Á³À»¶§ ÀÎÁ¢ÇÑ »ö»ó°ªÀÇ Â÷ÀÌ´Â 0ÀÌ µÉ°ÍÀÔ´Ï´Ù. ÀÌ°ÍÀ» ¿ì¸®´Â ÀúÁÖÆļö¶ó°í ¿¹±âÇÏ°Ô µË´Ï´Ù.
  • 2Â÷¿ø¿¡¼­ 1Â÷¿ø º¯È¯ : DCT¿¡ ÁÖ¾îÁö´Â °ÍÀº ¿µ»óÀ¸·Î 2Â÷¿ø¿¡ ÇØ´çÇÕ´Ï´Ù. ÀÌ°ÍÀ» ¹º°¡ Çغ¸·Á°í ½ÃµµÇÑ´Ù¸é 1Â÷¿øÀ¸·Î ¼±ÇüÈ­ ÀÛ¼ºÀÌ ÇÊ¿äÇÕ´Ï´Ù. ÇÏÁö¸¸ ±×³É ¿ÞÂÊ¿¡¼­ ¿À¸¥ÂÊÀ¸·Î À§¿¡¼­ ¾Æ·¡·Î °ªÀ» 훝¾î ³»·Á°£´Ù¸é °íÁÖÆļö´Â °íÁÖÆļö³¢¸® ÀÎÀâÇÏ°í ÀúÁÖÆļö´Â ÀúÁÖÆļö³¢¸® ÀÎÁ¢Çϴµ¥´Â ¼öÆòÀûÀ¸·Î´Â ÀÌ·ç¾îÁö°ÚÁö¸¸ ¼öÁ÷ÀûÀ¸·Î´Â ÀüÇô ¾Æ´Ò°Ì´Ï´Ù. ¶§¹®¿¡ Áö±×Àç±× ½ºÄµ¹æ¹ýÀ» »ç¿ëÇÏ°Ô µË´Ï´Ù. Áï, ´ë°¢¼±À¸·Î ¿ÞÂÊ »ó´Ü¿¡¼­ ¿À¸¥ÂÊ ÇÏ´ÜÀ¸·Î Á÷¼±À» ±×¾úÀ»¶§ ±×¿¡ 90µµ ¹æÇâÀ¸·Î ½ºÄµÇÏ´Â ¹æ¹ýÀ» »ç¿ëÇÏ°Ô µË´Ï´Ù. ±×·¸°Ô µÇ¸é 2Â÷¿øÀÇ ÁÖÆļö¼ººÐÀ» º¸´Ù Àß ¹ÐÁý½Ãų¼ö ÀÖ°Ô µË´Ï´Ù. ¶ÇÇÑ MPEG-2¿¡¼­´Â Á»´õ º¹ÀâÇÑ Áö±×Àç±×¸¦ »ç¿ëÇÏ°Ô µÇ´Âµ¥ ÀÌ°ÍÀº ¸»·Î ¼³¸íÇϱ⠾î·Æ±º¿ä. ³ªÁß¿¡ ½Ã°£³ª¸é ±×¸²±×·Á¼­ º¸¿©µå¸®°Ú½À´Ï´Ù. MPEG-4, H.264 ¿¡ µé¾î¼­¸é¼­ ÀÌ°ÍÀº ÇÑÃþ °­È­µÇ¾ú½À´Ï´Ù.

1.2.9. ¾çÀÚÈ­ (Quantization)

  • ¾Æ³¯·Î±× ½ÅÈ£¸¦ µðÁöÅÐ ½ÅÈ£·Î ¹Ù²Ù´Âµ¥ À־ ¾î´ÀÁ¤µµÀÇ ·¹º§¹üÀ§¸¦ °¡Á®¾ß Çϴµ¥ ÀÌ·¯ÇÑ ÀûÁ¤ÇÑ ·¹º§·Î ¹üÀ§¸¦ °áÁ¤ÇÏ°í À̸¦ µðÁöÅÐÈ­ ÇÏ´Â ÀÛ¾÷À̶ó°í ¼³¸íÇÏ¸é µÉ±î ½Í½À´Ï´Ù. À̶§ ¼³Á¤ÇÑ ·¹º§¿¡ µû¶ó¼­ ¼öÄ¡¸¦ Ç¥ÇöÇÏ´Â ºñÆ®¼ö°¡ °áÁ¤µÇ´Âµ¥ ºñÆ®¼ö°¡ ÀûÀ»¼ö·Ï Data°¡ ÀÛ¾ÆÁö°í µÚ¿¡ ÈÄÇàµÇ´Â ºÎȣȭÀÇ È¿À²À» ³ôÀϼöÀÖ½À´Ï´Ù. ´Ü, ºñÆ®¼ö°¡ Àû¾îÁú¼ö·Ï ¼Õ½Ç·üÀÌ Á¸ÀçÇÏ°Ô µÇ¹Ç·Î ÀûÁ¤ÇÑ ·¹º§À» »ç¿ëÇØ¾ß ÇÕ´Ï´Ù.
  • ¸ðµç ¾Æ³¯·Î±× Àü±â½ÅÈ£¸¦ ÀûÀýÇÑ µðÁöÅÐ ¹üÀ§¸¦ °®´Â ·¹º§·Î º¯È¯ÇÒ¼ö ÀÖ½À´Ï´Ù.
  • ¾î¶² ¾Æ³¯·Î±× ½ÅÈ£ÀÇ ´ë¿ªÆø¿¡ ´ë·«ÀûÀ¸·Î 2¹è¼öÇÑ »ùÇøµ ÁÖÆļö¸¦ °¡Áö°í µðÁöÅÐÈ­ÇÏ°Ô µÇ¸é °ÅÀÇ ¿ÏÀüÇÏ°Ô ¾Æ³¯·Î±× ½ÅÈ£·Î ´Ù½Ã ¿ªº¯È¯ÀÌ °¡´ÉÇÑ°ÍÀ¸·Î ¾Ë·ÁÁ® ÀÖ½À´Ï´Ù. (ÀÌ°ÍÀº ShannonÀÇ »ùÇøµ ¿ø¸®¿¡¼­ ±× ±Ù°Å¸¦ ãÀ»¼ö ÀÖ½À´Ï´Ù.)

1.2.10. Hybrid coding

  • (°øºÎÁß)

1.2.11. Aspect ratio (È­¸éºñÀ²)

  • ResolutionÀ¸·ÎºÎÅÍ È­¸éºñÀ²À» °è»êÇÏ´Â ¿¹Á¦ ¼Ò½º
    /* 
     Copyright (C) Information Equipment co.,LTD.
     All rights reserved.
     Code by JaeHyuk Cho <minzkn@infoeq.com>
     CVSTAG="$Header: /var/httpd/kldp/wiki/data/text/RCS/DemuxMPEG,v 1.60 2009/09/02 17:33:55 kss Exp kss $"
    */ 

    #include <stdio.h> 

    typedef int t_gcm_value;

    static t_gcm_value _gcm_to_abs(t_gcm_value s_value)
    {
     static t_gcm_value sg_msb = (((t_gcm_value)1) << ((sizeof(t_gcm_value) << 3) - 1));
     t_gcm_value s_temp;
     s_temp = sg_msb >> ((sizeof(t_gcm_value) << 3) - 1);
     if(s_temp != ((t_gcm_value)1))
     { /* t_gcm_value is signed type */ 
      if((s_value & sg_msb) == sg_msb)
      { /* s_value < 0 */ 
       s_value = -s_value;
      }
     }
     return(s_value);
    }

    static t_gcm_value _gcm(t_gcm_value s_value1, t_gcm_value s_value2)
    {
     t_gcm_value s_temp;
     if(s_value1 < s_value2)
     { /* swap */ 
      s_temp = s_value1;
      s_value1 = s_value2;
      s_value2 = s_temp;
     }
     do 
     {
      s_temp = s_value1 % s_value2;
      if(s_temp == ((t_gcm_value)0))break;
      s_value1 = s_value2;
      s_value2 = s_temp;
     }while(1);
     return(_gcm_to_abs(s_value2));
    }

    void gcm(t_gcm_value s_value1, t_gcm_value s_value2)
    {
     t_gcm_value s_value;
     s_value = _gcm(s_value1, s_value2);
     (void)fprintf(stdout, "gcm(%4ld, %4ld) = %4ld (ASPECT RATIO=%ld:%ld)\n",
      (long)s_value1,
      (long)s_value2,
      (long)s_value,
      (long)(s_value1 / s_value),
      (long)(s_value2 / s_value));
    }

    int main(void)
    {
     /* test suite */ 

     gcm(640, 480);
     gcm(720, 480);
     gcm(960, 720);
     gcm(1280, 720);
     gcm(1440, 1080);
     gcm(1920, 1080);

     return(0);
    }

    /* End of source */ 
  • Resolution °ú Display aspect ratio °ü°è¸¦ »óÈ£°í·ÁÇÒ¶§ Pixel aspect ratio ¸¦ ±¸ÇÏ´Â ¿¹Á¦ (ÃÖ´ë°ø¾à¼ö ¾Ë°í¸®Áò)
    /*
     Copyright (C) Information Equipment co.,LTD.
     All rights reserved.
     Code by JaeHyuk Cho <mailto:minzkn@infoeq.com>
     CVSTAG="$Header: /var/httpd/kldp/wiki/data/text/RCS/DemuxMPEG,v 1.60 2009/09/02 17:33:55 kss Exp kss $"
    */

    #include <stdio.h>

    static int _gcm(int s_value1, int s_value2)
    {
     int s_temp;
     if(s_value1 < s_value2)
     { /* swap */
      s_temp = s_value1;
      s_value1 = s_value2;
      s_value2 = s_temp;
     }
     do
     {
      s_temp = s_value1 % s_value2;
      if(s_temp == 0)break;
      s_value1 = s_value2;
      s_value2 = s_temp;
     }while(1);
     return(((s_value2 >> ((sizeof(s_value2) << 3) - 1)) ^ s_value2) - (s_value2 >> ((sizeof(s_value2) << 3) - 1)));
    }

    void pixel_aspect_ratio(int s_resx, int s_resy, int s_ax, int s_ay, int *s_sax, int *s_say)
    {
     int s_value, s_x = s_resy * s_ax, s_y = s_resx * s_ay;
     if((s_x != 0) && (s_y != 0))
     {
      s_value = _gcm(s_x, s_y);
      *(s_sax) = s_x / s_value, *(s_say) = s_y / s_value;
     }
     else *(s_sax) = *(s_say) = 1;
    }

    void test(int s_resx, int s_resy)
    {
     int s_sax, s_say;
     (void)fprintf(stdout, "%4d x %4d | ", s_resx, s_resy);
     pixel_aspect_ratio(s_resx, s_resy, 4, 3, &s_sax, &s_say);
     (void)fprintf(stdout, "%3d:%3d   ", s_sax, s_say);
     pixel_aspect_ratio(s_resx, s_resy, 16, 9, &s_sax, &s_say);
     (void)fprintf(stdout, "%3d:%3d\n", s_sax, s_say);
     (void)fflush(stdout);
    }

    int (main)(void)
    {
     (void)fprintf(stdout,
      "===============================\n"
      "resolution  | 4:3disp  16:9disp\n"
      "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n");
     test(   0,   0);
     test(-720,-576);
     test( 720, 576);
     test( 768, 576);
     test(1024, 576);
     test( 720, 576);
     test( 768, 576);
     test(1024, 576);
     (void)fprintf(stdout,
      "===============================\n");
     return(0);
    }

    /* End of source */

1.2.12. ½Ã°£ÀÇ Ç¥Çö

  • ½Ã°£ÀÇ Ç¥Çö¹üÀ§
    • MPEG°è¿­¿¡¼­´Â ±âº»ÀûÀ¸·Î ÃÊ´ç 90kHzÀÇ »ùÇøµÀ» °®´Â Ŭ·°À¸·Î Ç¥ÇöÇϸç ÃÑ 33ºñÆ®·Î Ç¥ÇöÇÕ´Ï´Ù. ÇÏÁö¸¸ 90kHzº¸´Ù Á»´õ ¼¼¹ÐÇÑ ½Ã°£±âÁØÀ» µÎ±â À§Çؼ­ 27MHzÀÇ »ùÇøµÀ» °®´Â Ŭ·°À» ´õºÒ¾î »ç¿ëÇϱ⵵ ÇÕ´Ï´Ù.
    • ASF/WMV °è¿­¿¡¼­´Â 1kHzÀÇ »ùÇøµÀ» °®´Â Ŭ·°À¸·Î Ç¥ÇöÇϸç decoderÀÇ ±âÁؽð£À» º°µµ·Î Á¦°ø¹ÞÁö ¾Ê°í PTS¿¡¼­ Preroll timeÀ» »« (´Ü, 0ÀÌÇÏÀ϶§ 0À¸·Î Ãʱ⿡ °£ÁÖÇÏ´Â) °³³äÀ» »ç¿ëÇÕ´Ï´Ù. MS¿¡¼­ ¾î¶² ¹Ì·¡¸¦ À§Çؼ­ ±×·¨´ÂÁö´Â ¸ð¸£³ª ¾î¶²°÷Àº 32bitÀÌ°í ¾î¶²°÷Àº 64bit·Î ¿¹¾àÀ» Çصа÷ÀÌ ÀÖ½À´Ï´Ù. ÂüÀ¸·Î ¾Æ¸®¼ÛÇÑ ºÎºÐÀÔ´Ï´Ù. °³ÀÎÀûÀÎ ¿©´ãÀÌÁö¸¸ preroll ½Ã°£¸¸Å­À» Áö¿¬µÇ¾î¾ß ÇÏ´ÂÁÙ·Î ¾Ë°í ÀÖ¾úÀ¸³ª ±×°ÍÀ» STCÀÇ Á¶ÀÛÀ¸·Î °¡´ÉÇÏ´Ù´Â °ÍÀ» ¾Ë°Ô µÇ¾ú´Âµ¥ Âü ¿À¹¦ÇÕ´Ï´Ù. ¸¸µé¶§´Â ¸íÈ®ÇÑ ³í¸®°¡ ¸Ó¸®¼Ó¿¡ ÀÖ¾úÀ¸³ª ¸¸µé¾î³õ°í Àúµµ ÀÌÇØ°¡ ¾È°¡¹Ç·Î Åë°ú...
  • STC (System Clock Reference)
    • ½Ã°£ÀÇ Àý´ëÀû ±âÁؽð£À» ¸»ÇÕ´Ï´Ù. ¹Ø¿¡ ¼³¸íÇÏ´Â PCR, SCR, PTS µîÀº ÀÌ STC¸¦ ±âÁØÀ¸·Î ¹ß»ýÇÏ°í ¿òÁ÷ÀÌ°Ô µË´Ï´Ù. Decoder ÀÔÀå¿¡¼­´Â ù PCRÀ» ³»ºÎ Ŭ·°À¸·Î °¡Á®¿À´Â ½ÃÁ¡ºÎÅÍ ³»ºÎ Ŭ·°À» STC·Î °£ÁÖÇÒ¼ö ÀÖ½À´Ï´Ù. Encoder ÀÔÀå¿¡¼­´Â Encoder clock ÀÚü°¡ STC°¡ µÇ°ÚÁÒ. ÀÌ°ÍÀº Mux°úÁ¤¿¡¼­ PCR·Î ½Ç·Á Ãâ·ÂÀÌ µÇ´Â °ÍÀÔ´Ï´Ù.
  • PCR (Program Clock Reference)
    • ÇϳªÀÇ Ã¤³Î¿¡ ´ëÇÑ ±âÁØÀÌ µÇ´Â ½Ã°£À» ¸»ÇÕ´Ï´Ù. º¸Åë Transport stream ¿¡¼­ »ç¿ëµÇ´Â ½Ã°£±âÁØÀ» ¸»ÇÕ´Ï´Ù. Transport¿¡ ¿©·¯°³ÀÇ programÀÌ ½Ç¸®´Â °æ¿ì¿¡ º°µµÀÇ PCRÀ» °®À»¼öµµ ÀÖÁö¸¸ º¸ÅëÀº Çϳª·Î À¯ÁöÇÕ´Ï´Ù. (TS¿¡¼­´Â PMT¿¡¼­ PCR pid¸¦ ¸í½ÃÇÏ°Ô µÇ¸ç ÇØ´ç pid·ÎºÎÅÍ PCR/EPCRÀ» ÂüÁ¶¹ÞÀ»¼ö ÀÖ½À´Ï´Ù.)
  • SCR (System Clock Reference)
    • ½Ã½ºÅÛÀÇ ±âÁØÀÌ µÇ´Â ½Ã°£À» ¸»ÇÕ´Ï´Ù. º¸Åë Program stream ¿¡¼­ »ç¿ëµÇ´Â ½Ã°£±âÁØÀ» ¸»ÇÕ´Ï´Ù. ÇÏÁö¸¸ °á±¹ decodingÇÒ¶§´Â PCR¿Í SCRÀº °°Àº ¿ªÇÒÀÇ ±âÁؽð£ÀÌ µÈ´Ù°í ¿¹±âÇÒ¼ö ÀÖ½À´Ï´Ù. (PS¿¡¼­´Â Pack header¿¡¼­ À̸¦ ãÀ»¼ö ÀÖ½À´Ï´Ù.)
  • DTS (Decoding Time Stamp)
    • Decoder°¡ DecodingÀ» ¼öÇàÇÏ´Â ½ÃÁ¡ÀÇ ½Ã°£À» ¸»ÇÕ´Ï´Ù.
  • PTS (Presentation Time Stamp)
    • È­¸é¿¡ Ç¥ÃâµÇ¾î¾ß ÇÏ´Â ½Ã°£À» ¸»ÇÕ´Ï´Ù. Decoder¿¡ °ø±ÞÇÒ¶§ ÀÏÁ¤·®ÀÇ ¹öÆÛ»óÅ¿¡ ³õÀÌ°Ô µÇ°í Decoding½Ã¿¡ ¼Ò¸ðµÇ´Â ½Ã°£µµ ÀÖÀ¸¹Ç·Î DTS¿Í PTS´Â ¾à°£ÀÇ ½Ã°£Â÷¸¦ °®°í ÀÖÀ»°Ì´Ï´Ù.
  • ½Ã°£ÀÇ À¯Ãß
    • ¶§¶§·Î À§ÀÇ ½Ã°£Á¤º¸¸¦ ¸ðµÎ ÃëÇϴ°ÍÀÌ ¿ÀÈ÷·Á ºÒÇÊ¿äÇÒ¶§°¡ ÀÖÀ»°Ì´Ï´Ù. À̶§´Â PTS¸¸À¸·Î PCR/SCR/STC, DTS ¸¦ ¸ðµÎ Àû´çÇÑ °£°ÝÀ¸·Î °è»êÇÏ¿© »ç¿ëÇÏ°Ô µË´Ï´Ù. ±»ÀÌ ½Ã°£ÀÇ Á¤È®µµº¸´Ù´Â ¾î·°Ç Àç»ýµÇµµ·Ï ÇÒ¶§ ÃëÇÏ´Â ¹æ¹ýÀÔ´Ï´Ù. ÇÏÁö¸¸ ÀÌ°ÍÀº 100% ¿Ïº®ÇÏÁö´Â ¾Ê½À´Ï´Ù. ƯÈ÷ Live stream ó·³ ÀÏÁ¤ ¼Óµµ·Î °ø±ÞµÇ´Â °æ¿ì ¿ä°Ô ¶Ç ¸¹ÀÌ~ ¿À¹¦ÇÕ´Ï´Ù. À½... ¿À¹¦ÇÑ°Í »ÓÀ̱º...

1.3. MPEG-1 (ISO/IEC 11172-2)

  • MPEG-1 Àº 1.5MbpsÀÌÇÏÀÇ Àü¼Û¼Óµµ¸¦ °í·ÁÇÏ¿© Á¦¾ÈµÈ ¿µ»ó ¹× À½Çâ ¾ÐÃà¿¡ ´ëÇÑ ±¹Á¦ Ç¥ÁØÀÔ´Ï´Ù. ÀÌ°ÍÀº ¿òÁ÷ÀÓÀÇ »óÈ£ º¸»ó, DPCM(Differential Pulse Code Modulation: ½ÅÈ£°£ÀÇ Â÷À̸¦ ³ªÅ¸³»´Â ¹æ½Ä), DCT(Discrete Cosine Transform: ÁÖÆļöº°·Î ºÐ¸®Çس»´Â ±â¼ú), Quantization(¾çÀÚÈ­¶ó°íµµ ÇÏ¿© ºñÆ®ÀÇ ¹ß»ý·®À» Á¦¾îÇÏ´Â ÇϳªÀÇ ¹æ¹ý), RLE(Run length encoding: ¹Ýº¹µÈ µ¥ÀÌÅÍÀÇ ÁÙÀÓ Ç¥Çö ¹æ½Ä), ÇãÇÁ¸¸ºÎÈ£(¹Ýº¹µÇ´Â µ¥ÀÌÅÍ¿¡ Àû°Ô ºñÆ®¸¦ ÇÒ´çÇÏ´Â °¡º¯ºñÆ® ÇÒ´ç¹æ½Ä)µîÀÇ ¾Ë°í¸®ÁòÀÌ »óÈ£ Çù·ÂÇÏ¿© ¿µ»ó°ú À½ÇâÀ» ¼Õ½Ç¼º ¾ÐÃàÀ» ½ÃµµÇÏ¿© Àü¼Û·®À» Å©°Ô ÁÙÀÌ´Â Çü½ÄÀÔ´Ï´Ù.

1.4. MPEG-2 (ISO/IEC 13818-2, H.262)

  • MPEG-2 ´Â MPEG-1 °ú ȣȯ¼ºÀ» ÃÖ´ëÇÑ À¯ÁöÇϸ鼭 º¸´Ù Á¦ÇÑÀûÀÎ ¿ä¼Ò¿´´ø Àü¼Û¼Óµµ¿Í °íÇػ󵵹®Á¦, ¼øÂ÷ÁÖ»ç¹æ½Ä °í·ÁµîÀÌ ¿¬±¸µÈ Çü½ÄÀÔ´Ï´Ù. MPEG-2´Â º¹È£È­ ºÎºÐ¸¸ Ç¥ÁØÀ¸·Î ±ÔÁ¤µÇ¾î ÀÖÀ¸¸ç ºÎÈ£±â´Â ÀÌ¿¡ µ¿¹ÝÇÏ¿© º¹È£È­¿Í ¸Âµµ·Ï ±¸ÇöµÇµµ·Ï À¯µµµË´Ï´Ù. (Á»´õ À¯¿¬ÇÏ´Ù¶ó°í ÇØ¾ß ÇÒÁö?)

1.5. MPEG-4 (ISO/IEC 14496-2, ASP)

  • Track
  • Hint track
  • Atom header
    moov Meta data ̅ȗˤ
    mvhd Movie header
    iods Object ±â¼úÀÚ
    trak Trak ¶Ç´Â Stream °ü¿©
  • MPEG4 probe
    1. ¿ì¼± "moov", "cmov"°¡ ÀÖ´ÂÁö ÆǺ°ÇÕ´Ï´Ù.
    2. "mdat" °¡ ÀÖ´ÂÁö ÆǺ°ÇÕ´Ï´Ù.
    3. "moov" ¶Ç´Â "cmov"Áß ÇÑ°³°¡ ¸ÕÀú °ËÃâµÇ¾ú°í "mdat"ÀÌ °ËÃâµÈ´Ù¸é ÀÌ°ÍÀº MPEG4 file Çü½ÄÀÏ È®·üÀÌ ³ô½À´Ï´Ù.
    4. Áß¿äÇÑ°ÍÀº "mdat"ÀÌ °ËÃâµÇÁö ¾Ê´Â´Ù¸é ÀÌ°ÍÀº meta ¿µ¿ªÀÌ ±úÁø°ÍÀ¸·Î ÆǺ°ÇÒ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù.
  • ISMA
  • ½ºÆ®¸®¹Ö½Ã¿¡ Video ¿Í Audio°¡ º°µµÀÇ Ã¤³ÎÀ» »ç¿ë
    1. TODO: Àü¹ÝÀûÀ¸·Î RTSP/RTP/ISMA¿¡ ´ëÇÑ ¼³¸íÀÌ ¸ÕÀú µÇ¾î¾ß ÇÒ°Í °°À¸¹Ç·Î µÚ¿¡¼­ ¼³¸íÇϴ°ÍÀ» °í·Á

1.6. H.264 (ISO/IEC 14496-10, AVC)

  • NAL (Network abstraction layer)
    • ù 2 byte´Â 00H·Î ½ÃÀÛÇÏ¸ç ±× ´ÙÀ½ºÎÅÍ ºñ½ÁÇÑ ÆÐÅÏÀÇ ÀÏÄ¡¸¦ ¸·±â À§Çؼ­ 03H¸¦ »ðÀÔÇÒ¼ö ÀÖÀ¸¸ç À̶§ ÀÌ°ÍÀº ±×³É ¹«½ÃÇϵµ·Ï ó¸®ÇÏ°í 01H°¡ ¸¶Áö¸·À¸·Î ¿À°í ´ÙÀ½ byte¿¡ ÇØ´ç NAL unitÀÇ Á¾·ù¸¦ ÆÇ°¡¸§ÇÒ¼ö ÀÖ´Â °ªÀÌ ¿À°ÔµÊ.
    • TODO: NAL unit typeÀÇ RFC¿¡ ¸í½ÃµÈ ºÎºÐ¿¡ ´ëÇÑ Ãß°¡ÀûÀÎ ¾ð±ÞÀÌ ÇÊ¿ä
  • Over TS
    • TODO: TS ¿Í I/B/P slice ±×¸®°í ÀÌ¿¡ µû¸¥ indexer ±¸ÇöÀ¸·Î trick mode ¸¦ ±¸ÇöÇÏ´Â ±â¼ú±îÁö¸¦ °ø°³ÇÒ±î? ¸»±î?

1.7. WMV

  • ASF (Advanced Systems Format Specification)

1.7.1. WMV9

  • [http]ASF/WMV demux Å×½ºÆ® ÇÁ·Î±×·¥ for Win32[]
  • ±¸Çö»ó Header ÀÇ ºñµð¿À Compression ID ´Â "WMV3"·Î Ç¥ÇöµÊ.
  • WMV9Àº HD±Þ ¿µ»óÀ» Áö¿ø, MPEG4±ÞÀÇ ¾ÐÃà·ü, ½ºÆ®¸®¹ÖÀÇ ¿ëÀ̼º(´Ü, °ü·ÃÁ¤º¸°ø°³°¡ Àß ¾ÈµÇ¾î ÀÖÀ½)
  • Object Çì´õ ±¸Á¶
    1. 4-2-2-8 ±¸Á¶ - (Áï, GUID ´Â 16¹ÙÀÌÆ®)
    2. Å©°Ô Header/Data/Index·Î »óÀ§±¸Á¶¸¦ °®°Ô µÊ.
    3. HeaderObject´Â Çʼö Object¿Í ¼±ÅÃÀû ÀÌ¿ë°¡´ÉÇÑ Object·Î ±¸ºÐ
    4. Header Object¾øÀÌ´Â Data Object¸¦ ÆľÇÇϱâ Èûµë.
    5. RTSP, ISMA, MMSµî¿¡¼­ Header Object ¸¦ Àü´ÞÇÏ´Â ¹æ½ÄÀ» ¸ðµÎ °¡Áö°í ÀÖÀ½.
    6. ...
  • Header Object
    1. CompressionID, CodecID, ImageWidth/Height¸¦ ¾ò¾î Çü½ÄÀ» ÆÇ´ÜÇÒ¼ö ÀÖÀ½.
    2. HD±Þ È­Áú ±²ÀåÈ÷ ¾çÈ£ - µðÄÚµù¿¡ ºñ±³Àû ¸¹Àº ¸Þ¸ð¸® ÇÊ¿ä
    3. UNICODE LE16 ±âÁØÀ¸·Î Á¤ÀǵÊ
    4. NSC¿¡ Format1 ¿¡ ±â¼úµÇ´Â°ÍÀº HeaderObject Àüü¿Í DataObject header¸¦ Æ÷ÇÔÇÑ ÀÎÄÚµùµÈ ³»¿ëÀÔ´Ï´Ù.
  • MMST ÀÇ °æ¿ì DataPacket¿¡ 8¹ÙÀÌÆ® µ¡ºÙ¿©¼­ TimeCode¸¸ Âü°íÇؼ­ ±×³É ½÷ÁÖ¸é µÇ´Â Æí¸®ÇÑ Multicast Streamming ±¸Á¶
  • NSC Çü½Ä »ç¿ë (ÇÊÀÚÁÖ: base64µµ ¾Æ´Ñ°ÍÀÌ ¹«Áö ºñ½º¹Ç·¹ ÇØ°¡Áö°í ´õ º¹ÀâÇÑ Encode¹æ½ÄÀ» °¡Á³À½. Â¥Áõ³ª¼­ ±¸ÇöÇÏ´Ù°¡ ¹æȲÀ» ÇÑÀûÀÖÀ½. SDP±¸Á¶°¡ ÈξÀ ÁÁÀº°Í °°À½. - NSC value decode ¿¹Á¦´Â ´ÙÀ½ÀÇ ¸µÅ©¸¦ ÂüÁ¶Çϼ¼¿ä. - http://blog.naver.com/minzkn/60010756620)
  • ±»ÀÌ NSC¸¦ »ç¿ëÇÒ ÇÊ¿ä´Â ¾øÀ¸¸ç ¾î·°Ç ASF Header ¸¦ Àü¼ÛÇØÁÙ¼ö ÀÖ°í ±×°ÍÀ» Çؼ®ÇÒ¼ö¸¸ ÀÖÀ¸¸é MMST ¸¦ ±¸Çö°¡´ÉÇÕ´Ï´Ù.
  • Streamming(Multicast) ½Ã¿¡ Preroll time ¿¡ ÀÇÁ¸ÇÏ¿© Ãʱâ Àç»ý¿¡ ÇÊ¿äÇÑ ´ëÀÀ½Ã°£ ÇÊ¿ä. º¸Åë 3000~5000ms ¼Ò¿ä. ÆÄÀÏ Àç»ý½Ã¿¡´Â ÀÌ ½Ã°£º¸´Ù »¡¸® ½ºÆ®¸²À» °ø±ÞÇÒ¼ö À־ À߸¸ ±¸ÇöÇÏ¸é º° ¹®Á¦°¡ ¾øÀ½. PreRoll time ÀÇ ´ÜÀ§´Â ms.
  • Sinle/Multiple payload : TODO
  • Key frame : ¿ÏÀüÇÑ È­¸éÀ» ±¸¼º°¡´ÉÇÑ ±âÁ¡ÀÇ payload À̸ç Áß°£ºÎÅÍ ¶Ç´Â TrickMode ½Ã¿¡ ÀÌ°ÍÀ» °í·ÁÇÏ¿© ÀûÀýÇÑ Video payload skip À» ±¸ÇöÇÏ¸é ¸ðÀÚÀÌÅ© Çö»óÀ» ¹æÁöÇÒ¼ö ÀÖ½À´Ï´Ù.
  • Media Object Number : TODO
  • Presentation Time : MPEG1/2 ¿Í´Â ´Ù¸¥ PTS´ÜÀ§¸¦ »ç¿ëÇÕ´Ï´Ù. (Milli second)
  • Compression ID (Video FourCC) - ÇØ´ç 4¹ÙÀÌÆ® ¹®ÀÚ¿­À» ´Ü¼øÈ÷ ¼ýÀÚ·Î º¸¸é µÊ.
    1. WMV1 : 0x31564d57 (À©µµ ¹Ìµð¾î ºñµð¿À v7)
    2. WMV2 : 0x32564d57 (À©µµ ¹Ìµð¾î ºñµð¿À v8)
    3. WMV3 : 0x33564d57 (À©µµ ¹Ìµð¾î ºñµð¿À v9)
    4. WMV4 : 0x34564d57 (¹ÌÁ¤ÀÇ??? È®½ÇÄ¡ ¾ÊÀ½)
    5. MP43 : 0x3334504d (MPEG4 ¿µ»ó ÄÚµ¦ v3 - ºñÇ¥ÁØ MPEG4 ÄÚµ¦À¸·Î ¾Ë°í ÀÖÀ½. ÀÌ°ÍÀ» Reverse Engineerin ȤÀº Hacking ÇÏ¿© Divx 3.XX¸¦ ¸¸µé¾úÀ½ )
    6. MP4S : 0x5334504d (ISO MPEG-4 ¿µ»ó ÄÚµ¦ v1)
    7. WMVA : 0x41564D57 (À©µµ ¹Ìµð¾î ºñµð¿À v9 °í±Þ ÇÁ·ÎÆÄÀÏ - WVC1°ú Â÷ÀÌ°¡ ¹ºÁö È®½ÇÄ¡ ¾ÊÀ½)
    8. WVC1 : 0x31435657 (À©µµ ¹Ìµð¾î ºñµð¿À v9 °í±Þ ÇÁ·ÎÆÄÀÏ)
  • Codec ID (Audio Codec ID)
    1. WMA audio version 1 : 0x0160
    2. WMA audio version 2 : 0x0161 or 0x7a21 or 0x7a22
    3. WMA audio pro or WMALSL : 0x0162 or 0x0163
  • (ÇÊÀÚÁÖ: ErrorCorrection ¿¡ ´ëÇؼ­ °øºÎÁß - °ø°³µÈ Á¤º¸°¡ ºó¾àÇÏ¿© ¾ÆÁ÷µµ ÆÄ¾Ç ¸øÇÏ´Â Áß.)
  • (ÇÊÀÚÁÖ: ºñ±³Àû MPEG4º¸´Ù´Â ½ºÆ®¸®¹Ö ±¸Á¶´Â Á» ½±°Ô ±¸Çö°¡´É - ´Ù¸¸ Á¤º¸°ø°³°¡ °ÅÀÇ ¾ø´Â »óÅÂ)
  • (ÇÊÀÚÁÖ: ÀϺΠMediaServer¹öÁ¯¿¡ PacketÅ©±â °ü·Ã 1~2¹ÙÀÌÆ® miss¹ö±×°¡ Àִ°ÍÀ¸·Î º¸ÀÓ)
  • VC-1 : H.264 ¿¡ ´ëÀÀÇÒ¸¸ÇÑ MicrosoftÀÇ Â÷¼¼´ë ¾ÐÃà¹æ½Ä (ÇÊÀÚ´Â ÀÌ°ÍÀÇ Á¤Ã¼¸¦ ¾ÆÁ÷ ÆľÇÇÏÁö ¸øÇÔ.)

1.8. MP3 audio (MPEG 1/2 layer I/II/III)

  • [http]pmp3 player[]
  • [http]ÃÖ¼ÒÇÑÀÇ µðÄÚ´õ ·ÎÁ÷¸¸À» »ç¿ëÇÑ pmp3 ÀÇ Ãà¼Ò¹öÁ¯[]
  • [http]mp3 ÃÑ Àç»ý½Ã°£ °ËÃâ ¿¹Á¦¼Ò½º[]
    #define Frame header preview  
      32bit big endian - AAAAAAAA AAABBCCD EEEEFFGH IIJJKLMM 
    
    #define Frame header bit index
      A[31..21] : Frame sync
      B[20..19] : MPEG audio version indentification
      C[18..17] : Layer description
      D[16]     : Protection bit
      E[15..12] : Bitrate index
      F[11..10] : Sampling rate frequency index
      G[9]      : Padding bit
      H[8]      : Private bit
      I[7..6]   : Channel mode
      J[5..4]   : Mode extension
      K[3]      : Copyright 
      L[2]      : Original
      M[1..0]   : Emphasis
    
    #define Frame header description
        A: 11bit - Frame sync (All bit '1')
                   '11111111 111'
        B:  2bit - MPEG audio version identification
                   '00': MPEG version 2.5
    	       '01': Reserved
    	       '10': MPEG version 2.0 (ISO/IEC 13818-3)
    	       '11': MPEG version 1.0 (ISO/IEC 11172-3)
        C:  2bit - Layer description
                   '00': Reserved
    	       '01': Layer III
    	       '10': Layer II
    	       '11': Layer I
        D:  1bit - Protection bit
                   '0': Protected by CRC (16bit crc follow header)
    	       '1': Not protected
        E:  4bit - Bitrate index
                   ¾Æ·¡ÂüÁ¶
        F:  2bit - Sampling rate frequency index
                   MPEG version 1.0
                     '00': 44100
    		 '01': 48000
    		 '10': 32000
    		 '11': Reserved
                   MPEG version 2.0
                     '00': 22050
    		 '01': 24000
    		 '10': 16000
    		 '11': Reserved
                   MPEG version 2.5
                     '00': 11025
    		 '01': 12000
    		 '10': 8000
    		 '11': Reserved
        G:  1bit - Padding bit
                   '0': Frame is not padded
    	       '1': Frame is padded with one extra slot 
    	       Layer I frame size
    	         ((12000 * Bitrate / Samplerate) + Padding) * 4
    	       Layer II/III frame size
    	         (144000 * Bitrate / Samplerate) + Padding
        H:  1bit - Private bit
        I:  2bit - Channel mode
                   '00': Stereo
    	       '01': Joint stereo (Stereo)
    	       '10': Dual channel (Stereo)
    	       '11': Single channel (Mono)
        J:  2bit - Mode extension (Only if joint stereo)
                   Layer I/II
                     '00': Bands 4 to 31
    		 '01': Bands 8 to 31
    		 '10': Bands 12 to 31
    		 '11': Bands 16 to 31
                   Layer III
    	         '00': Intensity stereo off, MS stereo off
    	         '01': Intensity stereo on , MS stereo off
    	         '10': Intensity stereo off, MS stereo on
    	         '11': Intensity stereo on , MS stereo on
        K:  1bit - Copyright
                   '0': Audio is not copyrighted
    	       '1': Audio is copyrighted
        L:  1bit - Original
                   '0': Copy of original media
    	       '1': Original media
        M:  2bit - Emphasis
                   '00': None
    	       '01': 50/15ms
    	       '10': Reserved
    	       '11': CCIT J.17
    
    #define hint
    
    A: MPEG version 1.0, Layer I 
    B: V1,Layer II 
    C: V1,Layer III 
    D: V2,Layer I 
    E: V2, L2 & L3 
    -: Free format
    x: Not use (Invalid bitrate !)
    
    #define table
    
         [A] [B] [C] [D] [E]
    0000   -   -   -   -   - 
    0001  32  32  32  32   8 
    0010  64  48  40  48  16 
    0011  96  56  48  56  24 
    0100 128  64  56  64  32 
    0101 160  80  64  80  40 
    0110 192  96  80  96  48 
    0111 224 112  96 112  56 
    1000 256 128 112 128  64 
    1001 288 160 128 144  80 
    1010 320 192 160 160  96 
    1011 352 224 192 176 112 
    1100 384 256 224 192 128 
    1101 416 320 256 224 144 
    1110 448 384 320 256 160 
    1111   x   x   x   x   x
    

1.8.1. MP3 streaming

  • MP3ÀÇ streaming À» À§ÇÑ bitrate Á¦¾î¿¡ ÇÊ¿äÇÑ ¿ä¼Ò¸¦ ¿ì¼± °í·ÁÇغ¸¾Æ¾ß ÇÕ´Ï´Ù. ÀÏ´Ü ´ëÃæ »ý°¢³ª´Â °ÍÀº ´ÙÀ½°ú °°Àº°ÍÀÌ ÀÖ°Ú±º¿ä.
    1. Sampling rate (SR)
    2. Bits per sample (BPS)
    3. Channels (CH)
    4. Compression level (CL)
    5. MP3 header size (HS)
      ÃÊ´ç º¸³»¾ß ÇÏ´Â bit ((SR * BPS * CH) / CL) + (HS * 8)

1.9. AAC

  • MPEG2 AAC
  • MPEG4 AAC (HE AAC)
  • TODO: AAC °³¼±¾ÈÀÌ ¸î°¡ µÇ´Âµ¥ ´Ù ¿­°ÅÇØ¾ß Çϳª?
  • AAC BitstreamÀ» Containing ÇϱâÀ§Çؼ­´Â ADTS-AAC, ADIF-AACµîÀÌ ÀÖÀ¸¸ç ÀÌÁß ADTS-AAC ÇüÅ°¡ ÁÖ·Î »ç¿ëµÈ´Ù. ADTS-AACÀÇ °æ¿ì 1st ADTS HEADER + 1st AAC Raw Stream + 1st ADTS HEADER + 2nd AAC Raw Stream +............. + nst ADTS HEADER + nst AAC Raw Stream ÀÇ ±¸Á¶ À̸ç ADIF-AACÀÇ °æ¿ì ADIF-Header + AAC Raw AAC Stream ÀÌ´Ù

1.10. AC3

  1. AC3 Frame Length °è»ê ÇÔ¼ö
    static const unsigned int _ac3_FrameSizeTbl[38][3] = 
    {
    	{64, 69, 96}, {64, 70, 96}, {80, 87, 120}, {80, 88, 120}, {96, 104, 144},
    	{96, 105, 144}, {112, 121, 168}, {112, 122, 168}, {128, 139, 192}, {128, 140, 192},
    	{160, 174, 240}, {160, 175, 240}, {192, 208, 288}, {192, 209, 288}, {224, 243, 336},
    	{224, 244, 336}, {256, 278, 384}, {256, 279, 384}, {320, 348, 480}, {320, 349, 480},
    	{384, 417, 576}, {384, 418, 576}, {448, 487, 672}, {448, 488, 672}, {512, 557, 768}, 
    	{512, 558, 768}, {640, 696, 960}, {640, 697, 960}, {768, 835, 1152}, {768, 836, 1152},
    	{896, 975, 1344}, {896, 976, 1344}, {1024, 1114, 1536}, {1024, 1115, 1536}, {1152, 1253, 1728},
    	{1152, 1254, 1728}, {1280, 1393, 1920}, {1280, 1394, 1920}
    };
    
    static unsigned int _AC3GetFrameLen(char *pFrameBuf)
    {
    	unsigned int nFsCod, nFrmSizeCod;
    
    	if (pFrameBuf == NULL) {
    		return 0;
    	}
    
    	// Sync word check
    	if (pFrameBuf[0] != 0x0b || pFrameBuf[1] != 0x77) {
    		return 0;
    	}
    	
    	nFsCod = (pFrameBuf[4] & 0xc0) >> 6;
    	if (nFsCod > 3) {
    		// nFsCod °¡ 4 À̸é Reserved....
    		return 0;
    	}
    	nFrmSizeCod = pFrameBuf[4] & 0x3f;
    	if (nFrmSizeCod > 37) {
    		// nFrmSizeCod °¡ 37 º¸´Ù Å©¸é Error
    		return 0;
    	}
    	return _ac3_FrameSizeTbl[nFrmSizeCod][nFsCod] << 1;
    }
    
    

1.11. DTS

1.12. Demux

  • Demux ¸ðµâÀÇ Á¦ÀÛÀ» À§Çؼ­´Â ÇÁ·Î±×·¥ÀÇ ±¸¼ºÀ» Â¥ÀÓ»õÀÖ°Ô Çصξî¾ß Ãß°¡µÇ´Â Çü½ÄÀ» Áö¿øÇϱ⠽±´Ù´Â °ÍÀº ´ç¿¬ÇÑ °ÍÀÌ ¾Æ´Ò±î »ý°¢ÇÕ´Ï´Ù. ±âº»ÀûÀ¸·Î ÇÊÀÚ´Â ´ÙÀ½°ú °°ÀÌ ¸ðµâÈ­¸¦ ÁÖÀåÇÕ´Ï´Ù. µ¶Àںе鵵 ÀÌ¿¡ ´õºÒ¾î Á»´õ ü°èÀûÀÎ ¸ðµâ±¸¼ºµµ¸¦ ±×·Áº¸½Ã¸é Á¶±ÝÀ̳ª¸¶ µµ¿òÀÌ µÉ°ÍÀ̶ó ¹Ï½À´Ï´Ù. ¾Æ·¡´Â Å« °³³äÀ¸·Î ¼Ò°³ÇÑ°ÍÀÌÁö¸¸ »ç½ÇÀº °¢ ºÎºÐ¸¶´Ù Á»´õ ¼¼ºÐÈ­µÈ °³³äÀ¸·Î ºÐ¸®µÇ¾î¾ß ÇÕ´Ï´Ù.
    1. PES (Program element stream) packet parser
    2. PS (Program stream) ·ÎºÎÅÍ PES ¸¦ ºÐ¸®Çس»´Â parser
    3. TS (Transport stream) parser (PAT, PMT, ... µîÀÇ section ºÐ¸® ¹× °ü¸®ÀÇ ¿ëÀ̼ºÀÌ ÃæºÐÈ÷ °í·ÁµÇ¾î¾ß ÇÔ)
    4. MPEG4¸¦ °í·ÁÇϱâ À§Çؼ­ Track/Hint ¿¡ ´ëÇÑ °íÂû ¹× Àüü design °í·Á ºÎºÐ
  • [http]Demux »ùÇà ÇÁ·Î±×·¥ ´Ù¿î·Îµå[] : ¾ÈŸ±õ°Ôµµ ¼Ò½º´Â °ø°³ÇÏÁö ¸øÇÏ°Ô µÇ¾î ÀÖ½À´Ï´Ù. ¾ðÁ¨°¡ °ø°³ÇÒ¼ö ÀÖµµ·Ï ³ë·ÂÁßÀÔ´Ï´Ù.

1.12.1. Demux Á¦ÀÛÀ» À§ÇÑ Áغñ´Ü°è

  • ¿ì¼± ¹«Á¶°Ç Bit stream buffer Äڵ尡 ÇÊ¿äÇÕ´Ï´Ù. ÀÌ°ÍÀº Demux ÀÚü¿¡ ±¤¹üÀ§ÇÏ°Ô »ç¿ëµÇ¹Ç·Î Á¤¸»·Î ³ë·ÂÇÏ¿© Á¦´ë·Î µÈ stream buffer ¸¦ ¸¸µé¾î µÓ½Ã´Ù. (Context °³³äÀÌ Àû¿ëµÉ¼ö ÀÖµµ·Ï ÃÖ´ëÇÑ ¸ðµâÈ­ÇØ¾ß ÇÏ´Â ºÎºÐÀÔ´Ï´Ù.)
  • MPEGÀÇ Çì´õ ¸ð¾ç»õ´Â ¿Ü¿ì´Ù½ÃÇÇ Çϰųª Àϸñ¿ä¿¬ÇÏ°Ô º¼¼ö ÀÖµµ·Ï Á¤¸®Çؼ­ Ã¥»óÀ¯¸® ¹×¿¡ ³¢¿öµÎ°í »ì¾Æ¾ß ÇÒÁöµµ ¸ð¸¨´Ï´Ù.
  • Byte order ¿¡ ´ëÇؼ­ Çò°¥¸®Áö ¾Êµµ·Ï ÈÆ·ÃÇսôÙ.
  • MMX ¿Í SSEx ¸¦ ¾Ë¾ÆµÎ½Ã¸é ÁÁÀ¸¸ç ¾î¼Àºí¸®´Â ±×¿¡µû¸¥ ºÒ°¡°áÇÑ ÇʼöÁ¶°ÇÀÌ°ÚÁÒ.
  • Streaming Àº ÀÏ·Ä·Î µ¥ÀÌÅ͸¦ Àо¸é µÇÁö¸¸ ¸ðµç °ÍÀÌ ±×·¸Áö ¾Ê´Ù´Â ÀÌÀ¯·Î ÃæºÐÇÑ °í¹ÎÀ» ÇÏ¼Å¾ß µÉ°Ì´Ï´Ù.
  • ´Ù¸¥ »ç¶÷ÀÌ Àç»ç¿ë °¡´ÉÇϵµ·Ï ÃæºÐÈ÷ name space ¸¦ °í·ÁÇÏ¿©¾ß ÇÕ´Ï´Ù. ´Ù¸¥ »ç¶÷ÀÌ Àç»ç¿ë ÇÒ¼ö ¾ø´Ù¸é ¸¸µç Àڽŵµ Àç»ç¿ëÇϱ⠾î·Æ½À´Ï´Ù. (¿¹·Îµé¸é TRUE, FALSE, ERROR °°Àº define À» ÇÇÇϸç getbyte °°ÀÌ ÇÔ¼ö¸íÀ» ¢´Â ÀÏÀº ÇÇÇϽʽÿä. demux ´Â Àç»ç¿ë¼ºÀÌ ³ô¾Æ¾ß °¡Ä¡°¡ ÀÖ´Ù°í »ý°¢µË´Ï´Ù.)
  • MPEG ÀÇ Á¾·ù¸¦ °ËÃâÇÏ´Â °ÍÀº Demux ÀÇ Ãà¾àµÈ ÁýÇÕü·Î ±¸¼ºµË´Ï´Ù. ¶§¹®¿¡ MPEGÀÇ Á¾·ù¸¸ °ËÃâÇÒ¼ö ÀÖ´Â Äڵ带 ¸¸µé¼ö ÀÖ´Ù¸é demux ÀÚüÀÇ ÀÌÇØ´Â ±×¸® ¾î·ÆÁö ¾Ê´Ù°í »ý°¢µË´Ï´Ù. ÇÏÁö¸¸ ´Ù¸¥¹æÇâÀÇ Àǹ̷δ MPEG Á¾·ù¸¦ °ËÃâÇÏ´Â °Í ÀÚü°¡ Ä¿´Ù¶õ Çй®ÀÌ µÉ¼ö ÀÖ´Ù´Â ¿¹±âÀÌ¸ç ½±Áö ¾Ê´Ù´Â °Ì´Ï´Ù. ¼­·Î ´Ù¸¥ MPEGÁ¾·ù¸¦ ³õ¾ÒÀ»¶§ ¼­·Î ºñ½ÁÇÑ ºÎºÐÀÌ Àֱ⵵ ÇÏ°í ¾Æ´Ï±âµµ ÇÏ¿© Score ¶ó´Â °³³äÀ» »ç¿ëÇÏ¿©¾ß ÇÑ´Ù´Â Á¡¸¸ ¹Ýµå½Ã ¾Ë¾ÆµÑ ÇÊ¿ä°¡ ÀÖ½À´Ï´Ù. Áï, ¿¹¸¦ µé¸é TSÀÇ sync byteÀÎ 47H°¡ 188ÀÇ ¹è¼ö·Î ¿Â´Ù¸é TS·Î ÀνÄÇÒ¼ö ÀÖÁö¸¸ ÀÌ°ÍÀÌ sync byte ¸î°³°¡ º¸ÀÌ¸é °áÁ¤ÇÒÁö¸¦ score(Á¡¼ö°è»ê¹ý)¸¦ Áõ°¡ÇØ°¡¸é¼­ ºÁ¾ß ÇÏ°í À̷μ­ score°¡ °¡Àå ³ôÀº probe ·çƾÀ» ±âÁØÀ¸·Î MPEGÀÇ Á¾·ù¸¦ ÆǺ°ÇØ¾ß ÇÑ´Ù´Â ¿¹±âÀÔ´Ï´Ù. ¸Ó¸®¼Ó¿¡ Ç×»ó ÀÌÁ¡Àº ¿°µÎÇϸ鼭 ÀÌÇØÇսôÙ.
  • MPEGÀÇ ÃÑ Àç»ý½Ã°£À» ¾Ë±â À§Çؼ­´Â PTS¸¦ °¨ÁöÇÏ¸é ½±°Ô ±¸ÇÒ¼ö ÀÖ°Ô µË´Ï´Ù. ³ªÁß¿¡ ´Ù½Ã ¼³¸íÇÏ°ÚÁö¸¸ MPEGÀÇ Ã¹ PTS°¡ ³ªÅ¸³¯¶§ ±× °ª°ú ¸Ç ³¡¿¡ ³ª¿À´Â ¸¶Áö¸· PTS°ªÀÇ Â÷À̸¦ ±¸ÇÏ°í ÀÌ°Í¿¡ 90KHz ¸¦ ³ª´©¸é ÇØ´ç MPEGÀÇ ÃÑ Àç»ý½Ã°£À» ¾òÀ»¼ö ÀÖ½À´Ï´Ù. ±× ¹Û¿¡µµ ÃÑ Àç»ý½Ã°£À» °ËÃâÇÏ´Â ¹æ¹ýÀº ¸¹Àºµ¥ Audio°¡ MPEG1 Layer 1/2/3 Àΰæ¿ì¸¦ ¿¹·Î µç´Ù¸é ÇØ´ç »ùÇøµ ÁÖÆļö¿¡ Ãʸ¦ °öÇÏ¸é ³ª¿À±âµµ ÇÕ´Ï´Ù. ¶ÇÇÑ Ãʱ⠸ÀÇ ÆÐŶÀ» »ùÇ÷Π±¸ÇÏ°í ÃÑ ÆÄÀÏÀÇ Å©±â¿¡¼­ ³ª´©¸é ¸¶Âù°¡Áö·Î ½Ã°£À» °ËÃâÇÒ¼ö Àֱ⵵ ÇÕ´Ï´Ù. Âü°í·Î PTS¸¦ ÀúÀåÇÒ º¯¼öÀÇ Å©±â´Â 33(!)ºñÆ® ÀÌ»óÀ̾î¾ß ÇÕ´Ï´Ù. ±×¸®°í Àç¹Õ´Â »ç½ÇÀº µðÄÚ´õ¿¡ °ø±ÞµÇ´Â Ŭ·°ÀÌ Ç×»ó 27MHz¶ó´Â Á¡µµ °üÂûÇغ¸½Ã¸é ÁÁÀ»µí ÇÕ´Ï´Ù. ÈùÆ®·Î 27MHz / 90KHz = 300 ÀÌ µÇ´Â±º¿ä.

1.12.1.1. Bit stream Çì´õÁ¤ÀÇ (½ÃÀÛÄÚµå Á¤ÀÇ)

  • MPEG 1/2 PS ÀÇ °æ¿ì 4¹ÙÀÌÆ®ÀÇ ±¸Á¶·Î ¾Æ·¡¿Í °°Àº Çì´õ°ª¿¡ ÀÇÇؼ­ ¼øÂ÷ÀûÀÎ demux¸¦ ¼öÇàÇÕ´Ï´Ù. ÀÌ¿¡ ´ëÇÏ¿© byte stream buffer °¡ Á¦À۵Ǿî¾ß ÇÑ´Ù´Â °ÍÀ» ¿¹ÃøÇÒ¼ö ÀÖÀ»°Ì´Ï´Ù. ¶ÇÇÑ 4¹ÙÀÌÆ® ¿¡ ¼ø¼­´ë·Î 1¹ÙÀÌÆ®¾¿ byte stream buffer ¿¡¼­ ²¨³»¿Í¼­ ½¬ÇÁÆ® ½ÃÅ°¸é¼­ ((header & ffffff00H) == 100H) °¡ ¸¸Á·µÉ¶§ Çì´õ·Î º¼¼ö ÀÖ½À´Ï´Ù.
    • Picture start code : 100H
    • Slice min start : 101H
    • Slice max start : 1afH
    • User start code : 1b2H
    • Sequence start code : 1b3H
    • Extension start code : 1b5H
    • Sequence end code : 1b7H
    • Group of picture start code : 1b8H
    • ISO end code : 1b9H
    • Pack start code : 1baH
    • System start code : 1bbH
    • Program stream map : 1bcH
    • Private stream 1 : 1bdH
    • Padding stream : 1beH
    • Private stream 2 : 1bfH
    • Video code : 1e0H ~ 1efH
    • Audio code: 1c0H ~ 1dhH

1.12.1.2. Transport(TS) ÆÐŶ Çì´õ

  • TS packet size : 188 or 204(FEC) byte ´ÜÀ§ (Big endianÀ» ±âÁØÀ¸·Î ¿­°ÅÇÔ)
    • 8 bit : Sync byte (47H)
    • 1 bit : Transport error indicator
    • 1 bit : Payload unit start indicator
    • 1 bit : Transport priority
    • 13 bit : PID
    • 2 bit : Transport scrambling control
    • 2 bit : Adaptation field control
    • 4 bit : Continuity counter
    • (184 - x) or (200 - x) byte : Adaptation field

1.12.2. Demux PS

  • Demux ÀýÂ÷: Ưº°ÇÑ ¾ð±ÞÀÌ ¾ø´Ù¸é Big endian ÀÔ´Ï´Ù.
    1. Sequence header¸¦ ã½À´Ï´Ù. Áï, Header = (Header << 8) | getbyte(stream buffer) ¿Í °°ÀÌ ¼øÂ÷ÀûÀ¸·Î ¹ÙÀÌÆ®¸¦ 4¹ÙÀÌÆ®¿¡ ½¬ÇÁÆ®Çϸ鼭 ³Ö¾î 4¹ÙÀÌÆ® Çì´õ·Î ¸¸µé°í ÀÌ°ÍÀÌ ÁøÂ¥ Çì´õÀÎÁö °ËÃâÇϱâ À§Çؼ­ (Header & ffffff00H) == 100H ÀÎÁö ´Ù½Ã °Ë»çÇÕ´Ï´Ù.
    2. ¸¸¾à Padding stream ¶Ç´Â Private stream 2 Àΰæ¿ì´Â ÀÏ´Ü WORD¸¦ Àоî³À´Ï´Ù. ±×¸®°í WORD°ª¸¸Å­ streamÀ» skip ÇÕ´Ï´Ù.
    3. Header°ªÀÌ Pack start code À϶§±îÁö Sequence header ¸¦ ´Ù½Ã ã½À´Ï´Ù. (ÀÌ°ÍÀº È­¸éÀÇ Àϱ׷¯ÁüÇö»óÀ» ÁÙÀÌ°íÀÚ ÇÏ´Â ´Ü°èÀÔ´Ï´Ù.)
    4. ÀÌÁ¦ ¿Ã¼ö ÀÖ´Â Çì´õ´Â System start code, Private stream 1, Video / Audio code¸¸ÀÌ ¿Ã¼ö ÀÖ½À´Ï´Ù. ³ª¸ÓÁöÀÇ °æ¿ì´Â ´ÙÀ½ Sequence header ¸¦ ã½À´Ï´Ù.
    5. ÀÌÁ¦ Header´Â 1bcH ~ 1efH (Stream ID)ÀÇ ¹üÀ§°ªÀ» °¡Á®¾ß ÇÕ´Ï´Ù. ¸¸¾à ¹üÀ§¿¡ ¾ø´Â °ªÀ̶ó¸é ´Ù½Ã ´ÙÀ½ Sequence header¸¦ ã¾Æ¾ß ÇÕ´Ï´Ù.
    6. ÀÌÁ¦ ÀÌ ½ÃÁ¡¿¡¼­ ºñ·Î¼Ò ¾î¶² ÆÐŶÀÎÁö ¸ô¶óµµ codec¿¡ ¹Ð¾î³Ö¾îÁÙ µ¥ÀÌÅÍÀÔ´Ï´Ù. (ÀϺδ ¾Æ´ÏÁö¸¸ ±×·¡µµ ´ëºÎºÐÀº...)
    7. ÀÌÁ¦ WORD¸¦ Àо ¾îµð´Ù°¡ ÀÓÀÇ º¯¼ö¿¡ ÀúÀåÇصӴϴÙ. ÀÌ °ªÀº ÇöÀç ÀÌ ÆÐŶÀÇ ±æÀ̸¦ ³ªÅ¸³À´Ï´Ù. (¿©±â¼­´Â PacketSize ¶ó´Â º¯¼ö¿¡ ÀúÀåÇÑ´Ù°í ÇսôÙ.)
    8. ÀÌÁ¦ Stuffing byte°¡ Á¸ÀçÇϴµ¥ ÇÑ°³ÀÇ BYTE¾¿À» Àо ±× °ªÀÌ ffH Àε¿¾È ¹öÆÛ¸¦ ¼ÒÁø½Ãŵ´Ï´Ù. (´ç¿¬È÷ PacketSize º¯¼ö°ª ÀÌ»óÀ» Àоî¾ß µÇ´Â »óȲ±îÁö °£´Ù¸é ±×³É ´ÙÀ½ Sequence header¸¦ Àоî¾ß ÇÕ´Ï´Ù.)
    9. ÀÌÁ¦ ffH°¡ ¾Æ´Ñ °ªÀÌ ÀоîÁ® ÀÖ´Â »óÅÂÀÏ°Ì´Ï´Ù. ÀÌ °ª¿¡¼­ bit ¿¬»êÀ¸·Î ¸î°¡Áö Á¤º¸¸¦ ÃßÃâÇØ¾ß ÇÕ´Ï´Ù. »ý°¢º¸´Ù ¸¹Àº 󸮸¦ ¿äÇÏ´Â ºÎºÐÀÌ¸ç ¿©±â¼­ ¼³¸íÇϱ⿡´Â ºÐ·®ÀÌ ¸¹À»°Í °°¾Æ¼­ ¹Ì·¡¸¦ ±â¾àÇÏ¸ç »ý·«ÇÏ°Ú½À´Ï´Ù. (PTS, DTS, STD scale, STD size µî...)
      1. STD scale & STD size : (BYTE & c0H) == 40H Àΰæ¿ì
      2. PTS : (BYTE & f0H) == 20H Àΰæ¿ì
      3. PTS & DTS : (BYTE & f0) == 30H Àΰæ¿ì
      4. PES : (BYTE & c0H) == 80H Àΰæ¿ì
      5. ³ª¸ÓÁö Áï, BYTE °ªÀÌ 0x0f °¡ ¾Æ´Ñ °æ¿ì´Â À߸øµÈ Çü½ÄÀ¸·Î ó¸®ÇØ¾ß ÇÏ¸ç ´ÙÀ½ Sequence header ¸¦ ã½À´Ï´Ù.
    10. ¾ÆÁ÷ PacketSize °¡ 0ÀÌ µÇ¸é ¾ÈµÇ°í ¶ÇÇÑ (224 * 1024)º¸´Ù Ä¿¼­µµ ¾ÈµË´Ï´Ù. ¸¸¾à ÀÌ Á¶°ÇÀ» ¸¸Á·ÇÏÁö ¸øÇÏ¸é ´ÙÀ½ Sequence header ¸¦ ã¾Æ¾ß ÇÕ´Ï´Ù. (ÀÌ·±°æ¿ì ¿¡·¯¸Þ¼¼Áö ²À Âï¾îµÓ½Ã´Ù. ³ªÁß¿¡ ÁõºùÀÚ·á·Î ¿ä±äÇÕ´Ï´Ù.)
    11. ÀÌÁ¦ Header °¡ Video code ¶ó¸é PacketSize¸¸Å­À» video decoder ¿¡ push ÇÏ¸é µË´Ï´Ù. ¸¶Âù°¡Áö·Î Audio code µµ audio decoder ¿¡ push ÇÏ¸é µË´Ï´Ù.
    12. Stream buffer °¡ ¼ÒÁøµÉ¶§±îÁö Sequence header ÀýÂ÷¸¦ ´Ù½Ã ÁøÇàÇÕ´Ï´Ù.
  • TODO: MPEG1 system °ú MPEG2 program °£ÀÇ Â÷ÀÌÁ¡À» ±â¼úÇÏ°í ÀÌ¿¡ µû¸¥ ȣȯ¼ºÀÖ´Â ±¸Çö¹æ¾È¿¡ ´ëÇؼ­ ¼³¸íÀÌ ÇÊ¿ä

1.12.3. Demux TS

  • ÀÏ¹Ý Âª°Ô Á¤¸®Çϸé PAT(ÇÁ·Î±×·¥¼±ÅÃ) -> PMT(Descriptor·Î ¾ð¾î±Ç ¼±ÅÃ) -> Video/Audio PID ÃßÃâ -> MGT/VCT/... µî
  • PS º¸´Ù demux °¡ Á» º¹ÀâÇÑµí »ý°¢µË´Ï´Ù. ¾î·°Ç ¼³¸íÇغ¸°Ú½À´Ï´Ù. ¿ª½Ã ¼Ò½º´Â °ø°³ÇÏÁö ¾Ê°Ú½À´Ï´Ù. ¿ì¼± TS´Â Packet ÀÇ Å©±â°¡ ÀÏÁ¤Çϴٴµ¥¼­ óÀ½¿¡ À§¾ÈÀÌ µÉÁö ¸ð¸£°Ú½À´Ï´Ù. ÇÏÁö¸¸ ÀÌ°ÍÀº ½ÇÁ¦ PES¸¦ Á¶ÇÕÇϴµ¥ Ãß°¡ÀûÀÎ ¹öÆÛ°¡ ÇÊ¿äÇÏ´Ù´Â °ÍÀ» ÀǹÌÇϸç Á» ±ÍÂúÀº Äڵ尡 ÀÖ¾î¾ß ÇѴٴ°ÍÀÌ Àǹ̷Π¹Þ¾Æµé¿©ÁúÁöµµ ¸ð¸£°Ú½À´Ï´Ù. ¿ì¼± TS´Â 188, 192, 204¹ÙÀÌÆ®(º¸ÅëÀº 188) ´ÜÀ§¸¶´Ù Sync byte(47H) °¡ Á¸ÀçÇÏ°í ÀÌ°ÍÀ» ±âÁ¡À¸·Î ÇϳªÀÇ PacketÀ» ¾òÀ»¼ö ÀÖ½À´Ï´Ù. ¶ÇÇÑ TSÀÎÁöÀÇ ¿©ºÎ¸¦ ÆǺ°Çϴ°ÍÀº ´ç¿¬È÷ Sync byte(47H)°¡ ¿­¼è¶ó´Â °Íµµ ÀǹÌÇÕ´Ï´Ù. TS¿©ºÎ¸¦ ÆǺ°ÇÏ´Â ÄÚµå´Â ´Ü¼øÇÒ¼ö ÀÖ´Ù´Â ¶æÀ¸·Î ¿¹±âÇÑ°Ì´Ï´Ù.
  • TS header Ç׸ñÀÇ ÀǹÌ
    • Sync byte : TSÀÇ ±âÁØ Á¤·ÄÀÇ ¿­¼è°¡ µÇ´Â 1¹ÙÀÌÆ®°ªÀ¸·Î 47H ·Î ÁÖ±âÀûÀÎ ¹ÙÀÌÆ® °£°Ý¸¶´Ù ³ªÅ¸³³´Ï´Ù. ÁÖ·Î 188¹ÙÀÌÆ®ÀÇ ¹è¼öÀ§Ä¡¿¡ ³ªÅ¸³ª´Â °ÍÀÌ º¸ÅëÀ̸ç FEC¶ó°í ÇÏ¿© 204¹ÙÀÌÆ®¸¶´Ù ³ªÅ¸³ª±âµµ ÇÕ´Ï´Ù.
    • Transport error indicator : ÀÌ°ÍÀº ÁøÂ¥ Error°¡ ³µ´Ù°í ¾Ë¸®´Â °ÍÀº ¾Æ´Ï¸ç Áß°£¿¡ ÆÐŶÀ» ÀÒ¾î¹ö·ÈÀ»¶§ ÀÌ ºñÆ®¸¦ º¸°í¼­ ÇÔ²² ¹«½ÃÇÏ¿©µµ µÇ´ÂÁö¸¦ ¾Ë¼ö ÀÖµµ·Ï ÈùÆ® ºñÆ®ÀÔ´Ï´Ù.
    • Payload unit start indicator : ÇϳªÀÇ ÆÐŶÀÇ ½ÃÀÛÀ» ¾Ë·ÁÁÖ´Â ºñÆ®·Î ÀÌ °ªÀÌ 1Àΰæ¿ìÀÎ ÆÐŶ¿¡ TS unit header °¡ Á¸ÀçÇϸç À̸¦ ÅëÇÏ¿© payload Å©±â¸¦ ¾ò¾î ÆÐŶÀ» Á¶ÇÕÇÒ¼ö ÀÖ½À´Ï´Ù.
    • Transport priority : TS Àü¼Û°æ·Î¿¡ °°Àº ¼º°ÝÀÇ Àü¼Û¸Åü°¡ ÀÖ´Ù¸é ±×Áß¿¡¼­ ¿ì¼±¼øÀ§¸¦ °áÁ¤ÇÕ´Ï´Ù. (º°·Î »ç¿ëÇÒÀÏÀº ¾ø¾îº¸ÀÔ´Ï´Ù.)
    • PID : Packet ID ¶Ç´Â Program ID ¶ó°í ÇÏ¿© ÇϳªÀÇ Àü¼Ûä³ÎÀ» ¶æÇϱ⵵ ÇÕ´Ï´Ù. Áï, °íÀ¯ ä³Î ½Äº°ÀÚ¶ó°í Çϸé Àû´çÇÒµí ÇÕ´Ï´Ù. PID´Â 0Àΰæ¿ì PAT¶ó´Â °ÍÀÌ Á¸ÀçÇϸç 2ºÎÅÍ 15±îÁö¿Í 8191Àº ÇØ´çÆÐŶÀ» Çؼ®ÇÏÁö ¾Ê½À´Ï´Ù. ¶ÇÇÑ 16Àΰæ¿ì PMT°¡ Á¸ÀçÇϱ⵵ ÇÏ¸ç ±× ¹Û¿¡ ÀϺΠPID´Â »óȲ¿¡ µû¶ó¼­ ƯÁ¤ÇÑ Àü¼Ûü·Î ¿¹¾àµË´Ï´Ù.
    • Transport scrambling control : ÇØ´ç TS°¡ Scrambling µÇ¾ú´ÂÁö ¿©ºÎ¸¦ ³ªÅ¸³»´Â ÇʵåÀÔ´Ï´Ù. ÀÌ´Â ¿øÄ¡ ¾Ê´Â dataÀÇ À¯ÀÔÀ» ȸÇÇÇϱâ À§ÇÑ ¼ö´ÜÁß¿¡ Çϳª·Î¼­ dataÀÇ ¼ø¼­¸¦ ¹Ù²Ù´Â ÇàÀ§¸¦ µ¿¹ÝÇÕ´Ï´Ù. À̶§ ÇÊ¿äÇÑ°ÍÀÌ PID 1¹øÀÎ CAT Á¤º¸¸¦ ÂüÁ¶ÇØ¾ß ÇÕ´Ï´Ù. (0x00 : Not Scrambled / 0x01 Reserved for future use/ 0x10 Scrambled with Even Key / 0x11 Scrambled with Odd Key)
    • Adaptation field control : ÀÌ°ÍÀº ½ÇÁ¦ payload ÀÇ À§Ä¡°¡ ¾îµð¿¡ ³õ¿´´ÂÁö ¿¹°ßÇØÁÝ´Ï´Ù. ¶ÇÇÑ ÀÌ°ÍÀº 2°³ÀÇ ºñÆ®·Î ±¸¼ºµÇ¸ç 00B ¶Ç´Â 10B Àΰæ¿ì ÇØ´ç ÆÐŶ¿¡ payload °¡ Á¸ÀçÇÏÁö ¾Ê´Â°ÍÀ» ÀǹÌÇÕ´Ï´Ù. ±×¸®°í 11B Àΰæ¿ì 188 packetÀÇ offset 5 À§Ä¡¿¡ ¾ó¸¶³ª µÚ¿¡ payload°¡ Á¸ÀçÇÏ´ÂÁö¸¦ ÀǹÌÇÏ´Â »ó´ë ¿ÀÇÁ¼Â°ªÀÌ Á¸ÀçÇÕ´Ï´Ù.
    • Continuity counter : ÀÌ°ÍÀº packetÀÇ ¼øÂ÷ÀûÀÎ Àü¼Û¿¡¼­ °¢ packet¸¶´Ù 1¾¿ Áõ°¡Çϸ鼭 4ºñÆ® ȸÀü Áõ°¡°ªÀÔ´Ï´Ù. Áï, 0 ºÎÅÍ 15±îÁö Áõ°¡Çß´Ù¸é ´ÙÀ½¿¡´Â ´Ù½Ã 0ºÎÅÍ ½ÃÀÛÇÕ´Ï´Ù. ÀÌ °ªÀÌ ¹Ýµå½Ã 1¾¿ Áõ°¡Çؾ߸¸ Á¤»óÀûÀÎ packetÀ¸·Î º¼¼ö ÀÖÀ¸¸ç ¸¸¾à Áõ°¡ÇÏÁö ¾Ê°í °°Àº °ªÀÌ ¹Ýº¹µÈ´Ù¸é ÀÌ°ÍÀº bitrate control ¶Ç´Â º¸Á¤À» À§ÇÑ ÀçÀü¼Û¿¡ ÀÌ¿ëµÇ¾úÀ» °¡´É¼ºÀÌ ³ôÀº packetÀÔ´Ï´Ù. Áï, 1¾¿ Áõ°¡ÇÏÁö ¾ÊÀ¸¸é ±× ÆÐŶÀº Çؼ®ÇÏÁö ¾Ê°í °Ç³Ê¶Ù¸é µÈ´Ù´Â ¿¹±â¸¦ º¹ÀâÇÏ°Ô Çß½À´Ï´Ù. °¢ PIDº°·Î º°µµÀÇ continuity counter °¡ Áõ°¡µÈ´Ù´Â °ÍÀ» ¿°µÎÇÏ¼Å¾ß ÇÕ´Ï´Ù.
  • PSI : PSI(Programme Specific Information)
    1. µðÄÚ´õ°¡ TS ½ºÆ®¸²³»¿¡ ÀÖ´Â ÇÁ·Î±×·¥À» µðÄÚµù ÇÒ ¼ö ÀÖµµ·Ï »ç¿ëÀÚ°¡ Á¤ÇØÁÖ´Â ÇÁ·Î±×·¥ Á¤º¸µéÀ» ÁöĪÇÑ´Ù.
    2. ¸¸¾à ´ÙÁß Ã¤³Î Àü¼ÛÀ̶ó¸é ÇÁ·Î±×·¥ÀÇ ´Þ¶óÁø Á¤º¸¸¦ µðÄÚ´õ°¡ °¡´ÉÇÑ ºü¸¥ ½Ã°£ ³»¿¡ Á¤º¸¸¦ ¹ÞÀ» ¼ö ÀÖ¾î¾ß Çϴµ¥ À̸¦ À§Çؼ­´Â PSIÁ¤º¸¸¦ ÀÏÁ¤ÇÑ ½Ã°£°£°ÝÀ¸·Î Àü¼ÛÇØ¾ß ÇÑ´Ù.
    3. MPEG¿¡¼­´Â ÃÖ´ëÇÑ 0.7ÃÊ À̳»¿¡ PSIÁ¤º¸¸¦ Àü¼ÛÇØ¾ß ÇÑ´Ù°í ±ÔÁ¤ÇÏ°í ÀÖ´Ù.
    4. PSI´Â ÃÑ 4°³ÀÇ Å×À̺í·Î ÀÌ·ç¾î Áø´Ù. PAT, PMT, NIT, CATÀÌ´Ù.
      1. PAT : ÀÏ´Ü ¼³¸í º¸·ù. (´ÙÁßä³Î Àü¼ÛÀÌ ¾Æ´Ï¶ó¸é ÀÌ packetÀº °Ç¾î¶Ú´Ù´Â Á¤µµ¸¸ ÀÏ´Ü ¿¹±âÇÏ°Ú½À´Ï´Ù.)
        1. H.264 ¿¡¼­´Â ÀÌ°ÍÀ» ±×³É °£°úÇÒ¼ö ¾øÀ»°ÍÀÔ´Ï´Ù.
        2. PID 0¹øÀ» ÁöĪÇÕ´Ï´Ù.
        3. ±Ô¾à¿¡¼­´Â ÀÌ°ÍÀÌ 0.7ÃÊ À̳»¿¡ Çѹø¾¿Àº ¹Ýµå½Ã ¸í½ÃµÇ¾î¾ß µÇ´Â°ÍÀ¸·Î µÇ¾î ÀÖ½À´Ï´Ù.
        4. PAT´Â PMT_PID¿Í ÇÁ·Î±×·¥ ¹øÈ£(Program channel or Program Number)·Î ÀÌ·ç¾îÁ® ÀÖ´Ù. ÇÑ°³ÀÇ ÇÁ·Î±×·¥À» Àü¼ÛÇÑ´Ù¸é PMT_PID´Â µ¿ÀÏ ÇÏ°ÚÁö¸¸ ¿©±â¼­ ¸»ÇÏ´Â ´ÙÁßä³Î Àü¼ÛÀ̶ó¸é ¿©·¯°³ÀÇ PMT_PID¸¦ °¡Áú¼ö ÀÖ´Ù.
      2. PMT : ÀÏ´Ü ¼³¸í º¸·ù. (´ÙÁßä³Î Àü¼ÛÀÌ ¾Æ´Ï¶ó¸é ÀÌ packetÀº °Ç¾î¶Ú´Ù´Â Á¤µµ¸¸ ÀÏ´Ü ¿¹±âÇÏ°Ú½À´Ï´Ù.)
        1. H.264 ¿¡¼­´Â ÀÌ°ÍÀ» ±×³É °£°úÇÒ¼ö ¾øÀ»°ÍÀÔ´Ï´Ù.
        2. PAT¿¡¼­ PMT¸¦ ³ªÅ¸³»´Â PIDÁ¤º¸¿Í Program channel À» ÂüÁ¶ÇÒ¼ö ÀÖ°Ô µË´Ï´Ù.
      3. NIT : NIT(Nwtwork Information Table)
        1. Àü¼Û¿¡ °ü·ÃµÈ ÆĶó¸ÞÅ͸¦ ³ªÅ¸³»ÁÖ´Â °ªÀ¸·Î ÁÖÆļö³ª Æ®·£½ºÆ÷Æ®¹øÈ£ µî¿¡ °ü·ÃµÈ µ¥ÀÌŸ¸¦ ¿¹·Î µé¼ö ÀÖ´Ù. ÀÌ¿Í °°Àº µ¥ÀÌÅ͸¦ Àü¼ÛÇÏ´Â ÆÐŶÀÇ PIDµµ PAT¿¡ Æ÷ÇԵǾî ÀÖ´Ù.
        2. PAT¿¡¼­ ÇÁ·Î±×·¥ ¹øÈ£°¡ 0ÀÎ PMT_PID´Â NIT_PID¸¦ ³ªÅ¸³½´Ù. ´Ù½Ã ¸»ÇÑ´Ù¸é PAT¿¡¼­ ÇÁ·Î±×·¥ ¹øÈ£°¡ 0ÀÎ PMT_PID°¡ ÀÖ´Ù¸é ÀÌ PID¸¦ °®´Â TS packet´Â NITÀÇ Á¤º¸¸¦ °¡Áö°í ÀÖ´Ù.
      4. CAT : Á¶°ÇºÎ ¼ö½ÅÀÌ ÇÊ¿äÇÑ °æ¿ì ½ºÅ©·¥ºí¸µ ȤÀº Private stream¿¡ °üÇÑ °ÍÀÌ´Ù.
  • Demux ÀýÂ÷ : Ưº°ÇÑ ¾ð±ÞÀÌ ¾ø´Ù¸é big endian ÀÔ´Ï´Ù.
    1. PacketÀ» Çؼ®ÇϱâÀü¿¡ 8192°³ÀÇ PIDº° ÀúÀå¼Ò¸¦ ¸¸µé¾î µÎ¾î¾ß ÇÕ´Ï´Ù.
    2. ¿ì¼± Stream buffer ·ÎºÎÅÍ BYTE´ÜÀ§·Î Àо ù Sync byte(47H)°¡ ³ªÅ¸³¯¶§±îÁö ¼ÒÁø½Ãŵ´Ï´Ù.
    3. ÀÌÁ¦ 188¹ÙÀÌÆ®¸¸Å­ÀÌ ÇϳªÀÇ packet ÀÔ´Ï´Ù. ±×¸®°í ¿©±â¼­ ù Sync byte¸¦ Æ÷ÇÔÇÏ¿© 4¹ÙÀÌÆ®¸¦ Header°ªÀ¸·Î ÃëÇÕ´Ï´Ù.
    4. ÀÌÁ¦ PIDÀÇ Á¤»óÀûÀÎ ¹üÀ§ÀÎ 0, 1, 16...8190 ¸¸ ³²±â°í ³ª¸ÓÁöÀÇ °æ¿ì´Â ÀüºÎ Çؼ®ÇÏÁö ¾Ê°í ¹ö¸³´Ï´Ù.
    5. ÀÌÁ¦ PIDº° ÀúÀå¼Ò¿¡ ¸¶Áö¸· continuity counter °ªÀÌ À¯ÁöµÇ¾î¾ß ÇÏ¸ç ±× ¹Û¿¡ ±úÁø ÆÐŶ¼ö °è»êµîµµ ÀúÀå¼Ò¿¡ ÀÇÇؼ­ À¯ÁöÇÕ´Ï´Ù.
    6. °£´ÜÈ÷ PID x ¿¡ ´ëÇÑ °íÀ¯ ÀúÀå¼Ò¸¦ TSS(Transport store stack)¶ó°í ¸íĪÇսôÙ. ÀÌÁ¦ ÀÌ°ÍÀº º¯¼ö Æ÷ÀÎÅÍ·Î °£´ÜÈ÷ ÇöÀç PIDÀÇ Çؼ®Åë·Î·Î ±¸ÇöµÉ¼ö ÀÖ½À´Ï´Ù.
    7. ÀÌÁ¦ TSSÀÇ ÀÌÀü Continuity counter ¿Í ÇöÀçÀÇ counter ¸¦ ºñ±³ÇÏ¿© ÀÌÀüº¸´Ù ÇöÀç°ÍÀÌ 1Å©´Ù¸é Á¤»óÀûÀÎ packetÀ¸·Î ´ÙÀ½ ÀýÂ÷¸¦ ¹âÁö¸¸ ¾Æ´Ñ°æ¿ì´Â ´Ù½ÃÇѹø Transport error ºñÆ®¸¦ È®ÀÎÇÏ¿© 1À̸é ÇöÀç ÆÐŶÀº Çؼ®ÇÏÁö ¾Ê°í ¹ö¸³´Ï´Ù.
    8. Adaptation field control °ªÀÌ 00B ¶Ç´Â 02BÀΰæ¿ì ¿ª½Ã packet Çؼ®À» ÇÏÁö ¾Ê°í ¹ö¸³´Ï´Ù.
    9. ¸¸¾à Adaptation field control °ªÀÌ 11BÀΰæ¿ì´Â HeaderµÚ¿¡ 1¹ÙÀÌÆ®°¡ °Ç³Ê¶Û padding ¹ÙÀÌÆ® Å©±â¸¦ ³ªÅ¸³À´Ï´Ù. ±×·¡¼­ 01BÀΰæ¿ì´Â ±×³É ÀÌ ÀýÂ÷¸¦ Åë°úÇÏÁö¸¸ 11BÀΰæ¿ì´Â padding ¹ÙÀÌÆ®¸¸Å­ °Ç³Ê¶Ù¾î¼­ ´ÙÀ½ ÀýÂ÷Çؼ®¿¡ µé¾î°©´Ï´Ù.
    10. ÀÌÁ¦ 2°¡Áö·Î ³ª´µ´Âµ¥ Payload unit start ºñÆ®¿¡ ÀÇÇؼ­ ³ª´µ¾î Áý´Ï´Ù. 1Àΰæ¿ì payloadÀÇ °íÀ¯ header°¡ Á¸ÀçÇϸç À̸¦ Çؼ®ÇØ¾ß Çϸç MPEGÀÌ Àü¼Û¸Åü¶ó¸é MPEG PES header Çؼ®ÀýÂ÷¸¦ ¹â¾Æ¾ß ÇÏ°Ú½À´Ï´Ù. ±×¸®°í 0Àΰæ¿ì´Â payload Å©±â¸¸Å­ À» ±×´ë·Î º¹»çÇÏ¸é µË´Ï´Ù.
    11. ÀÌ·¯ÇÑ ÀýÂ÷°¡ Àü¼Ûä¸Þ°¡ ¾î¶²°ÍÀΰ¡¿¡ µû¶ó¼­ Ãß°¡ÀûÀÎ Çؼ®À» ÇÊ¿ä·Î ÇÒ¼öµµ ÀÖ°í ¾Æ´Ò¼öµµ ÀÖ°ÚÀ¸¸ç ±×°ÍÀº ÀûÀýÈ÷ Çؼ®ÇϽǼö ÀÖÀ»°Ì´Ï´Ù.
  • TODO: PSI ¿¡ ´ëÇÑ °³°ýÀûÀÎ ¼³¸íÀÌ ÇÊ¿ä
  • TODO: TS broadcast ¸¦ ¾î¶»°Ô ±¸ÇöÇÏ´ÂÁö¿¡ ´ëÇÑ ¼³¸íÀÌ ÇÊ¿ä
  • ³ôÀºÀü¼Û¼ÓµµÀÇ TS¸¦ Çؼ®ÇÏ·Á¸é È¿À²ÀûÀÎ filter ±¸ÇöÀÌ ÇÊ¿äÇÕ´Ï´Ù. ±×Áß¿¡¼­ Section filter ´Â ¸Å¿ì Áß¿äÇÑ ºñÁßÀ» Â÷ÁöÇÕ´Ï´Ù. ÀÌ·¯ÇÑ filter ¿¡ ´ëÇÑ ¿¹½Ã¸¦ [http]http://www.minzkn.com:2744/blog/232¿¡¼­ ±¸ÇöÇØ º¸¾Ò½À´Ï´Ù.

1.12.4. Demux DivX (3)

DIVXÀÇ Continer FormatÀº RIFF AVIÀ̸ç ÀÌ¿Í °ü·ÃµÈ ¹®¼­´Â AVI File Format (http://www.alexander-noe.com/video/documentation/avi.pdf), OpenDML AVI File Format Extensions (http://www.morgan-multimedia.com/download/odmlff2.pdf) µîÀÌ ÀÖ´Ù.
  • (ÇÊÀÚÁÖ: °øºÎÁß. ´©°¡ °ü·Ã ¹®¼­Á» ÀÖÀ¸¸é º¸³»ÁÖ¼¼¿ä.)

1.13. ¹öÆÛź·Â ¼³°è

1.13.1. ÇÒ´çÀü·«

  • Implementation

1.13.2. º¹»çÀü·«

  • boost mode

1.13.3. ºñÀ²Àü·«

  • Scale facter

1.13.4. ºñÆ®Àü·«

1.13.5. Á¶À²Àü·«

1.14. Àü¼Û¼Óµµ Á¶Àý¼³°è

1.14.1. Á¤¹ÐµµÀÇ ¿ÀÂ÷¹üÀ§ ÇÑ°è¼³Á¤

1.14.2. ´ÙÁßä³Î Á¶ÇÕÀü¼Û °ü¸®


1.15. Streamming

  • RTSP(Real time streaming protocol) ´Â Åë»ó 554¹ø Æ÷Æ®¸¦ »ç¿ëÇÏ´Â Text(XML°í·Á) ±â¹ÝÀÇ »óÈ£ ´ëÈ­Çü½ÄÀÇ ÇÁ·ÎÅäÄÝÀÔ´Ï´Ù.
  • RTP (Realtime transport protocol)´Â RTSP¿¡ ÀÇÇؼ­ »óÈ£ ´ëÈ­¿¡ ÀÇÇؼ­ ¼öÁýµÈ Á¤º¸ ¶Ç´Â ´Ù¸¥¹æ¹ýÀ¸·Î ¼öÁýµÈ Á¤º¸¸¦ ±â¹ÝÀ¸·Î ½ÇÁ¦ Data¸¦ Àü¼ÛÇϴ ä³Î·Î TCP, UDP(Unicast, Multicast) µîÀÇ Àü¼ÛÇü½ÄÀ» °®´Â Àü¼Û·ÎÀÔ´Ï´Ù. Æ÷Æ®´Â RTSP»óÈ£ ´ëÈ­¿¡¼­ °áÁ¤µÇ±âµµ ÇÏ°í ÀÌ¹Ì ¾à¼ÓÇÑ ¿¹¾àÆ÷Æ®¸¦ »ç¿ëÇϱ⵵ ÇÕ´Ï´Ù.
  • RTCP : RTSP/RTP º¸Á¶
  • RMCP(Relayed Multicast Control Protocol) : ±âÁ¸ÀÇ Multicast¸Á±¸¼ºÀ» °³¼±ÇÏ¿© È¿À²ÀûÀÎ Àü¼ÛÀ»À§Çؼ­ °èÃþÀûÀ¸·Î ºÐ»êÇÏ´Â ÇÁ·ÎÅäÄÝ·Î »ó´çÈ÷ Çʿ伺ÀÌ ³ô¾ÆÁ® °¡°í ÀÖ½À´Ï´Ù.
  • ISMA : RTSP¿Í ºñ½º¹Ç·¹Çϸ鼭µµ Á»´õ È®ÀåµÈ °³³äÀ¸·Î º¼¸¸ÇÑ Àß Â¥¿©Áø ±¸Á¶. SDPÇü½Ä »ç¿ë. (°ü·Ã ¹®¼­´Â µ·ÁÖ°í »ç¾ßÇÔ)
  • MMS(t) : (ÇÊÀÚÁÖ: °ü·Ã¹®¼­ °Ë»öÇغ¸¸é ½Ç¸Á ¹«ÁöÇÔ. Çϳªµµ ¾øÀ½.)
    1. MMST ¿¡¼­ ¿ÀÇÁ¼Â 4ÀÇ 2¹ÙÀÌÆ®ÀÇ ¿ëµµ°¡ ºñ¹Ð¿¡ °¡·ÁÁ® ÀÖÀ½. MediaPlayer ¸¸ÀÌ ÀÌ°ª¿¡ µû¶ó¼­ Àç»ý ¸øÇÏ´Â Çö»óÀ» º¸ÀÓ.
    2. PreRoll time ¿¡ ÀÇÇÑ Ãʱâ ÁøÀÔ ½Ã°£ Á¦¾à Á¸Àç : ´ëÃ¥ÀÌ ¾øÀ½.
  • TODO: Àü¹ÝÀûÀÎ RTSP/RTP/ISMA ¿¡ ´ëÇÑ ³»¿ëÀº µû·Î »©´Â°Ô ÁÁÀ»°Í °°À½.
  • TODO: ISMA/MMS ¿¡ ´ëÇÑ ºÎºÐÀº °ø°³Çصµ µÉÁö ¸ð¸£°Ú³×...
  • TODO: ACAP/OCAP
  • TODO: PCR-STC clock ÆíÂ÷ º¸Á¤ (5KHz? 100msec? 45kHz? 400msec?)
    • ÀÏÁ¤ÇÑ Á¤±Ô¼Óµµ¸¦ °®´Â »óÅÂÀÎ ½ºÆ®¸®¹Ö °ø±Þ»óÅ¿¡¼­´Â °ø±ÞµÇ´Â PCR°ú DecoderÀÇ STC°£¿¡´Â ÀÏÁ¤ÇÑ °£°ÝÀÌ»óÀÇ ½Ã°£Â÷°¡ ¹ß»ýÇÏÁö ¾Êµµ·Ï À¯ÁöµÇ´Âµ¥ ÀÌ»óÀûÀÎ »óȲÀÎ STD¸ðµ¨¿¡¼­´Â ÀÌ°ÍÀ» 0msec·Î ±ÔÁ¤ÇÒ¼ö ÀÖ½À´Ï´Ù. ÀϹÝÀûÀ¸·Î °ø±ÞµÇ´Â PCR°ú STC°£ÀÇ ½Ã°£Â÷´Â 100msec¸¦ ³ÑÁö ¾Êµµ·Ï EncodingÀÌ µÇ´Â°ÍÀÌ º¸ÅëÀ̸ç (¹Ýµå½Ã´Â ¾Æ´Ï°í ±ÇÀåÄ¡ÀÏ»Ó) Decoding½Ã¿¡´Â ÀÌ°ÍÀÌ 400msec ¸¦ ³ÑÁö ¾Ê´Â ¼±¿¡¼­´Â Á¤»óÀûÀÎ Sync°¡ µË´Ï´Ù¸¸ ½ÇÁ¦ ±¸Çö»ó¿¡¼­´Â Encoder/Decoder°£¿¡ Á¶À²ÀÌ ÇÊ¿äÇÒ °æ¿ì°¡ ¸¹½À´Ï´Ù. H/WÀûÀÌ´ø°¡ S/WÀûÀÎ ÇÑ°è·Î ÀÎÇؼ­ °æ¿ì¿¡ µû¶ó¼­´Â STC delay ±â¹ýÀ» »ç¿ëÇϱ⵵ ÇÏ¸ç ¹Ý´ë·Î PTSÁö¿¬ÀÔ·ÂÀ» Çϱ⵵ ÇÕ´Ï´Ù. ¿ÏÀü ²Ç¼öÀΰÅÁÒ.

1.15.1. ±¸¹®Æļ­/ÇÊÅÍ

  • get_sep_word

1.15.1.1. Section Filter

MPEG TS ÀÇ SectionFilter ¸¦ ±¸ÇöÇϴµ¥ À־ Positive&Negative mask filter ¾Ë°í¸®ÁòÀ¸·Î ÀûÀýÇÑ H/W ÀûÀÎ Filter¿Í À¯»çÇÑ µ¿ÀÛÀ» ±¸ÇöÇÒ¼ö ÀÖ°Ô µË´Ï´Ù.

¿©±â¼­ Positive mask ´Â ÁÖ¾îÁø data ¿Í mask °ªÀ» AND¿¬»êÈÄ comp ¿Í ºñ±³ÇÏ´Â ÀϹÝÀûÀÎ mask µ¿ÀÛÀ¸·Î ƯÁ¤ ºñÆ®ÆÐÅÏÀ» ÀÏÄ¡Á¶°ÇÀ¸·Î ÃëÇÏ´Â µ¿ÀÛÀÔ´Ï´Ù. ¹Ý¸é¿¡ Negative mask ´Â ÁÖ¾îÁø data ¿Í mask °ªÀ» AND¿¬»êÈÄ ÁÖ¾îÁø ºñÆ®ÆÐÅÏÀÌ ÁÖ¾îÁø comp °ª°ú ´Ù¸¥ °æ¿ì ÀÏÄ¡Á¶°ÇÀ¸·Î ÃëÇÏ´Â µ¿ÀÛÀÔ´Ï´Ù.

Positive mask ´Â ƯÁ¤ ºñÆ®¿­À» Åë°ú½ÃÅ°´Â ¿ëµµ·Î ±¸ÇöµÇ¸ç Negative mask ´Â ÇöÀçÁ¶°ÇÀÌ º¯°æµÇ´Â ½ÃÁ¡À» Åë°ú½ÃÅ°´Â ¿ëµµ·Î ±¸ÇöµÇ´Â°ÍÀÌÁÒ.

¾Æ·¡ÀÇ ¿¹Á¦°¡ ÃæºÐÇÒÁö´Â ¸ð¸£°ÚÁö¸¸ ´ë·« ´ÙÀ½°ú °°ÀÌ ±¸ÇöµÈ´Ù°í º¸½Ã¸é µË´Ï´Ù. ´ç¿¬È÷ H/W ¼³°èÀûÀÎ °üÁ¡¿¡¼­µµ °¡´ÉÇÑ ±¸Á¶·Î µÇ¾î ÀÖ½À´Ï´Ù.

°ÅÀÇ ±â´É»ó ±¸ÇöÀ¸·Î ºÃÀ»¶§´Â Positive mask ¸¸ ÀÖÀ¸¸é ÃæºÐÇÕ´Ï´Ù. ÇÏÁö¸¸ ºÒÇÊ¿äÇÑ ¹Ýº¹ÀûÀÎ data¸¦ ¹«½ÃÇÏÁö ¾Ê±â ¶§¹®¿¡ CPU°¡ °úµµÇÏ°Ô ÇÇ°ïÇØÁö°ÚÁÒ. Negative mask ´Â ÀÌ°ÍÀ» ¹æÁöÇÏ°Ô µË´Ï´Ù.
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
#include <unistd.h>

static __inline int __mzmatch_filter(const unsigned char *s_data, const unsigned char *s_mask, const unsigned char *s_mode, const unsigned char *s_comp, size_t s_size);
int mzmatch_filter(const void *s_data, const void *s_mask, const void *s_mode, const void *s_comp, size_t s_size);

static __inline int __mzmatch_filter(const unsigned char *s_data, const unsigned char *s_mask, const unsigned char *s_mode, const unsigned char *s_comp, size_t s_size)
{
    size_t s_offset = (size_t)0;
    unsigned char s_positive_mask, s_negative_mask;
    while(s_offset < s_size) {
        s_positive_mask = s_mask[s_offset] & s_mode[s_offset];
        s_negative_mask = s_mask[s_offset] & (~s_mode[s_offset]);
        if(((s_positive_mask & s_data[s_offset]) != (s_positive_mask & s_comp[s_offset])) ||
           ((s_negative_mask != ((unsigned char)0)) && ((s_negative_mask & (s_data[s_offset] ^ s_comp[s_offset])) == ((unsigned char)0)))) {
            return(0);
        }
        s_offset++;
    }
    return(1);
}

int mzmatch_filter(const void *s_data, const void *s_mask, const void *s_mode, const void *s_comp, size_t s_size)
{
    return(__mzmatch_filter((const unsigned char *)s_data, (const unsigned char *)s_mask, (const unsigned char *)s_mode, (const unsigned char *)s_comp, s_size));
}

void test(unsigned char s_mask, unsigned char s_mode, unsigned char s_comp)
{
    int s_match_condition;
    unsigned int s_data_min = 0x00u, s_data_max = 0xffu;
    (void)fprintf(stdout, "TEST => data=%02X~%02X mask=%02X mode=%02X comp=%02X",
        (unsigned int)s_data_min,
        (unsigned int)s_data_max,
        (unsigned int)s_mask,
        (unsigned int)s_mode,
        (unsigned int)s_comp
    );
    do {
        if((s_data_min % 0x10u) == 0x00u)(void)fputs("\n", stdout);
        s_match_condition = mzmatch_filter(&s_data_min, &s_mask, &s_mode, &s_comp, (size_t)1);
#if defined(__linux__) /* can use ansi code(escape sequence code) */
        (void)fprintf(stdout,
            " %s%02X\x1b[0m",
            (s_match_condition == 0) ? "\x1b[1;31m" : "\x1b[1;33m",
            (unsigned int)s_data_min);
#else
        if(s_match_condition != 0) {
            (void)fprintf(stdout,
                " %02X",
                (unsigned int)s_data_min);
        }
#endif
    }while((s_data_min++) < s_data_max);
    (void)fputs("\n", stdout);
}

int main(void)
{
    test(0xffu, 0xffu, 0x80u);
    test(0xffu, 0x00u, 0x80u);
    test(0xffu, 0xf9u, 0xceu);
    test(0xffu, 0xf0u, 0x24u);
    test(0x3fu, ~((unsigned char)0x3fu), 0x04u);
    /* TS filter */
    test(0xffu, 0xffu, 0x00u); /* PAT */
    test(0xffu, 0xffu, 0x01u); /* CAT */
    test(0xffu, 0xffu, 0x02u); /* PMT */
    test(0xffu, 0xffu, 0x3eu); /* DSM CC */
    test(0xfcu, 0xffu, 0x80u); /* ECM 0x80, 0x81, 0x82 */
    return(EXIT_SUCCESS);
}

1.15.2. Àü¼Û Thread



1.16. ¸¶Áö¸·À¸·Î

  • ¹®¼­ÃÊ¾È ÀÛ¼ºÀÚ : Á¶ÀçÇõ (minzkn)

ID
Password
Join
Economy makes men independent.


sponsored by andamiro
sponsored by cdnetworks
sponsored by HP

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-09-03 02:33:55
Processing time 0.0386 sec