How to convert Video Data/Frames from YUV –> CIImage –> UIImage in iOS Platform

Here I have described tested and working solution for this procedure:

Here I am showing data structure of YUV(NV12) data  and how we can get the Y-Plane(y_ch0) and UV-Plane(y_ch1) which is used to create CVPixelBufferRef. Let’s look at the YUV(NV12) data structure..


– Total Frame Size = Width * Height * 3/2,
– Y-Plane Size = Frame Size * 2/3,
– UV-Plane size = Frame Size * 1/3,
– Data stored in Y-Plane –>{Y1, Y2, Y3, Y4, Y5…..}.
– U-Plane–>(U1, V1, U2, V2, U3, V3,……}.

I hope it will be helpful to all. 🙂 Have fun with IOS Development 😀



How to build OpenH264 for Windows Platform

You can build Openh264 using Visual Studio in windows. Here are the steps…

  • – i) Download OpenH264 source code provided by cisco from https://github.com/cisco/openh264 .
  • – ii) Now you will find two Visual Studio compatible projects in
    directory /OpenH264/codec/build/win32/dec and
  • – iii) You will need to download NASM software from http://www.nasm.us/pub/nasm/releasebuilds/2.12.02/ .
  • – iv) Install NASM software on the directory C:\NASM or wherever you like.
  • – v) Then Add NASM Executable path to all these visual studio projects.StaticDynamicSelection
  • – vi) You can either select static or dynamic library in general
    options based on your project requirements.NASMInclude
  • – vi) If you are able to perform all these operations successfully, you will have 5 different .lib or .dll files named welsdcore, welsdecplus, welsecore, welsencplus, welsvp and those
    are usable in any Visual Studio projects.

Now if you want to get Openh264 features, just add all these libraries to your project and enjoy.
Hope it will help you.. 🙂


How to play Raw YUV Video files?

We can easily play YUV(I420) formatted video files using VLC by the following commands:

  • Windows: “C:\Program Files\VideoLAN\VLC\vlc.exe” –demux rawvideo –rawvid-fps 10 –rawvid-width 640 –rawvid-height 480 –rawvid-chroma I420 input.yuv
  • MAC: /Applications/VLC.app/Contents/MacOS/VLC –demux rawvideo –rawvid-fps 10 –rawvid-width 288 –rawvid-height 352 –rawvid-chroma I420 input.yuv

VLC is able to play raw H264 Encoded video files by the following command:

  • Windows: “C:\Program Files\VideoLAN\VLC\vlc.exe”  –demux h264 –h264-fps 10  input.h264
  • MAC: /Applications/VLC.app/Contents/MacOS/VLC –demux h264 –h264-fps 10  input.h264

There exists lot more YUV video format categories, like  YUV-I420, YUV-444, YUV-UYVY, YUV-YUYV, YUV-NV12, YUV-NV21 etc. (YUV video format structures are described in this link, http://www.fourcc.org/yuv.php ).

VLC is unable to play all these video formats. So either we have to write source code to create a new raw video player that will play raw yuv video files… Or we can use third party software to play raw yuv video files.

I use a third party video player named pYUV player, it will be found from this link, http://pyuv.software.informer.com/download. Thank You.


How to Create, Read, Update, Delete Registry Key using C++

Here is shared complete working example of Registry Key processor using C++.



Sample Client Program that connects with a TCP Server, Linux

The following is the complete source code for the basic TCP/IP Client Application.

Command to compile and execute:



Sample Server Program that uses TCP Protocol, Linux

The following is the complete source code for the basic TCP/IP Server application in linux:

Command to Compile and Execute:



Thread example in C++, Linux

Here given sample Thread implementation using C++ in Linux:

Here is the command to compile and run this sample program:

Here is the output of this program:



Sample Server Program that uses TCP Protocol, Windows

The following is the complete source code for the basic Winsock TCP/IP Server application.



Sample Client Program that connects with a TCP Server, Windows

The following is the complete source code for the basic Winsock TCP/IP Client Application.



Thread Example in c++ Win32 project, Visual Studio

Microsoft Windows operating system’s support for multithreaded programming. It is almost similar to the support provided by POSIX threads. The differences are not in the actual functionality but the names in the API functions. Every Win32 process has at least one thread, which we call as the main thread. We will assume that the OS will give a time slice to each program thread, in round-robin fashion. In fact, the threads in a Win32 program will be competing for the CPU with threads in other programs and with system threads, and these other threads may have higher priorities. Now I am showing a simple example of thread implementation.

Here is the console output of this multi-threaded program: