Index: branches/SHM-dev/source/App/utils/BitrateTargeting/ExtractBitrates.h
===================================================================
--- branches/SHM-dev/source/App/utils/BitrateTargeting/ExtractBitrates.h	(revision 1023)
+++ branches/SHM-dev/source/App/utils/BitrateTargeting/ExtractBitrates.h	(revision 1029)
@@ -32,6 +32,6 @@
  */
 
-#ifndef EXTRACT_BITRATES_H
-#define EXTRACT_BITRATES_H
+#ifndef __EXTRACTBITRATES__
+#define __EXTRACTBITRATES__
 
 #include "RuntimeError.h"
Index: branches/SHM-dev/source/App/utils/BitrateTargeting/GuessLambdaModifiers.h
===================================================================
--- branches/SHM-dev/source/App/utils/BitrateTargeting/GuessLambdaModifiers.h	(revision 1023)
+++ branches/SHM-dev/source/App/utils/BitrateTargeting/GuessLambdaModifiers.h	(revision 1029)
@@ -32,6 +32,6 @@
  */
 
-#ifndef CALCULATE_LAMBDA_MODIFIER_H
-#define CALCULATE_LAMBDA_MODIFIER_H
+#ifndef __GUESSLAMBDAMODIFIERS__
+#define __GUESSLAMBDAMODIFIERS__
 
 #include "RuntimeError.h"
Index: branches/SHM-dev/source/App/utils/BitrateTargeting/RuntimeError.h
===================================================================
--- branches/SHM-dev/source/App/utils/BitrateTargeting/RuntimeError.h	(revision 1023)
+++ branches/SHM-dev/source/App/utils/BitrateTargeting/RuntimeError.h	(revision 1029)
@@ -32,6 +32,6 @@
  */
 
-#ifndef DIRECTORY_LIB_RUNTIME_ERROR_H
-#define DIRECTORY_LIB_RUNTIME_ERROR_H
+#ifndef __RUNTIMEERROR__
+#define __RUNTIMEERROR__
 
 #include <sstream>
Index: branches/SHM-dev/source/App/utils/convert_NtoMbit_YCbCr.cpp
===================================================================
--- branches/SHM-dev/source/App/utils/convert_NtoMbit_YCbCr.cpp	(revision 1023)
+++ branches/SHM-dev/source/App/utils/convert_NtoMbit_YCbCr.cpp	(revision 1029)
@@ -41,12 +41,12 @@
 namespace po = df::program_options_lite;
 
-int main(int argc, const char** argv)
+Int main(Int argc, const char** argv)
 {
-  bool do_help;
+  Bool do_help;
   string filename_in, filename_out;
-  unsigned int width, height;
-  unsigned int bitdepth_in, bitdepth_out;
-  unsigned int num_frames;
-  unsigned int num_frames_skip;
+  UInt width, height;
+  UInt bitdepth_in, bitdepth_out, chromaFormatRaw;
+  UInt num_frames;
+  UInt num_frames_skip;
 
   po::Options opts;
@@ -59,4 +59,5 @@
   ("InputBitDepth", bitdepth_in, 8u, "bit-depth of input file")
   ("OutputBitDepth", bitdepth_out, 8u, "bit-depth of output file")
+  ("ChromaFormat", chromaFormatRaw, 420u, "chroma format. 400, 420, 422 or 444 only")
   ("NumFrames", num_frames, 0xffffffffu, "number of frames to process")
   ("FrameSkip,-fs", num_frames_skip, 0u, "Number of frames to skip at start of input YUV")
@@ -65,4 +66,5 @@
   po::setDefaults(opts);
   po::scanArgv(opts, argc, argv);
+
 
   if (argc == 1 || do_help)
@@ -73,41 +75,61 @@
   }
 
+  ChromaFormat chromaFormatIDC=CHROMA_420;
+  switch (chromaFormatRaw)
+  {
+    case 400: chromaFormatIDC=CHROMA_400; break;
+    case 420: chromaFormatIDC=CHROMA_420; break;
+    case 422: chromaFormatIDC=CHROMA_422; break;
+    case 444: chromaFormatIDC=CHROMA_444; break;
+    default:
+      fprintf(stderr, "Bad chroma format string\n");
+      return EXIT_FAILURE;
+  }
+
   TVideoIOYuv input;
   TVideoIOYuv output;
 
-  input.open((char*)filename_in.c_str(), false, bitdepth_in, bitdepth_in, bitdepth_out, bitdepth_out);
-  output.open((char*)filename_out.c_str(), true, bitdepth_out, bitdepth_out, bitdepth_out, bitdepth_out);
+  Int inputBitDepths [MAX_NUM_CHANNEL_TYPE];
+  Int outputBitDepths[MAX_NUM_CHANNEL_TYPE];
 
-  input.skipFrames(num_frames_skip, width, height);
+  for (UInt channelTypeIndex = 0; channelTypeIndex < MAX_NUM_CHANNEL_TYPE; channelTypeIndex++)
+  {
+    inputBitDepths [channelTypeIndex] = bitdepth_in;
+    outputBitDepths[channelTypeIndex] = bitdepth_out;
+  }
+
+  input.open((char*)filename_in.c_str(), false, inputBitDepths, inputBitDepths, outputBitDepths);
+  output.open((char*)filename_out.c_str(), true, outputBitDepths, outputBitDepths, outputBitDepths);
+
+  input.skipFrames(num_frames_skip, width, height, chromaFormatIDC);
 
   TComPicYuv frame;
-#if AUXILIARY_PICTURES
-frame.create( width, height, CHROMA_420, 1, 1, 0 );
-#else
-  frame.create( width, height, 1, 1, 0 );
-#endif
+  frame.create( width, height, chromaFormatIDC, 1, 1, 0 );
 
-  int pad[2] = {0, 0};
+  Int pad[2] = {0, 0};
 
-  unsigned int num_frames_processed = 0;
+  TComPicYuv cPicYuvTrueOrg;
+  cPicYuvTrueOrg.create( width, height, chromaFormatIDC, 1, 1, 0 );
+
+  UInt num_frames_processed = 0;
   while (!input.isEof()) 
   {
-    if (! input.read(&frame, pad))
+    if (! input.read(&frame, &cPicYuvTrueOrg, IPCOLOURSPACE_UNCHANGED, pad))
     {
       break;
     }
 #if 0
-    Pel* img = frame.getLumaAddr();
-    for (int y = 0; y < height; y++) 
+    Pel* img = frame.getAddr(COMPONENT_Y);
+    for (Int y = 0; y < height; y++)
     {
-      for (int x = 0; x < height; x++)
+      for (Int x = 0; x < height; x++)
         img[x] = 0;
       img += frame.getStride();
     }
-    img = frame.getLumaAddr();
+    img = frame.getAddr(COMPONENT_Y);
     img[0] = 1;
 #endif
 
-    output.write(&frame);
+    output.write(&frame, IPCOLOURSPACE_UNCHANGED);
     num_frames_processed++;
     if (num_frames_processed == num_frames)
@@ -117,4 +139,5 @@
   input.close();
   output.close();
+  cPicYuvTrueOrg.destroy();
 
   return EXIT_SUCCESS;
