Encoding/Decoding, Muxing/Demuxing
원래 코딩(Coding)은 컴퓨터가 알아먹을수 있도록 이진코드(binary code)를 입력하는 것을 말한다.
흔히 C나 JAVA와 같은 상위 프로그래밍언어로 프로그래밍하는 것을 코딩한다고 하는데, 그건 일반적으로 쓰이는 거고, 코딩은 실제 여러 의미로 사용된다. 원래 코딩과 인코딩은 같은 말이다.
개발세계에서 보편적으로 쓰이는 인코딩의 뜻은 특정한 데이터포멧으로 데이터를 가공하는 것을 의미한다.
우리가 프로그램을 코딩한다는 것도, 프로그래밍언어의 포멧에 맞춰 인코딩을 하는 것이다.
디지털 오디오를 예로 들어 보자. 디지털 오디오의 포멧(Format)은 여러가지가 있다. 널리 사용되고 있는 MP3는 디지털 오디오 포멧의 한 종류다.
원래 디지털 오디오의 원형은 PCM(Pulse Code Modulation) 데이터다.
단순히 아날로그 오디오를 샘플링해서 0과 1로 바꾼 원본 데이터(raw data)라고 보면 된다.
통상 이런 PCM과 같은 raw data는 크기가 커서 보관이나 전송에 적합하지 않다.
MP3 파일은 이 원본데이터를 특정 헤더와 메타 정보를 추가하고, 실제 데이터 부분을 압축한 것이다.
데이터를 가공해서 포장했으므로 이것은 MP3 포멧으로 코딩된 오디오 데이터가 된다. 이런 기능을 하는 부분을 MP3 인코더(encoder)라고 부를수 있다.
이 MP3를 사용자의 기기에서 재생하기 위해서는, 디코딩(decoding)과정이 필요하다.
코딩의 역순으로 MP3데이터로부터 PCM 데이터를 추출하는 것이다. MP3 디코더(decoder)라는 것이 필요한 것이다. 통상 코딩시 데이터의 압축과정에서 손실이 발생하므로 복원된 PCM 데이터는 원본 PCM데이터와 100% 일치하지는 않는다. 오디오 데이터의 경우, 사람이 감지하기 어려운 주파수의 데이터는 압축시 제거해서 데이터크기를 줄이기 때문이다.
트랜스코딩(Transcoding)은 영어 그대로 원본데이터(raw data)가 아닌 특정포멧으로 코딩된 데이터를 다른 포멧의 데이터로 코딩하는 것을 말한다. MP3로 된 파일을 OGG형태의 파일로 바꾸는 것이 트랜스코딩이다.
이것은 결국 MP3를 raw data로 변환한 다음 OGG 포멧으로 바꾸는 것과 마찬가지다. 디코딩과 인코딩을 이어서 하는 것과 마찬가지다.
먹싱(MUXing)은 multiplexing의 약어로 쉽게 말해 데이터를 섞는 것이다.
임베디드의 세계에서 중요한 것은 속도와 효율인데, 데이터를 종류별로 다 따로 따로 구분해서 보내는 비효율을 없애기 위해 사용된다.
그럼 당근 디먹싱(DEMUXing)은 demultiplexing의 약어로 먹싱된 데이터를 다시 종류별로 뽑아내는 것을 말한다.
예를 하나 들면 우리가 TV를 통해 시청하는 데이터는 비디오데이터와 오디오 데이터로 나뉜다.
정상적인 TV시청을 위해서는 비디오와 오디오가 동시에 TV의 데이터 처리 모듈에 도착해야 한다.
따라서 비디오데이터와 오디오데이터는 특정한 포멧의 패킷(Packet)에 섞여서 전송된다.
TV는 이 패킷을 받아서 비디오 데이터와 오디오 데이터를 따로따로 추출해서 처리한다음 영상와 오디오가 동기(sync)가 맞도록 화면에 출력한다.
이것이 디먹싱이라고 할 수 있다.
임베디드 소프트웨어 개발의 경우 어떤 도메인에서 일을 하든, 소프트웨어든 하드웨어든 코딩, 디코딩, 먹싱, 디먹싱은 흔하게 접하는 용어다.