Create a C++ console application in Visual Studio
This topic describes the steps needed to configure a C++ console application in Visual Studio.
Create the Visual Studio project
- Create a Visual C++, Win32 Console Application in Visual Studio 2015. Name the project ‘SimpleDVD’.
- Download the 64 bit version of DVDBuilder for C++ (Windows). The file you need will have a name similar to
DVDBuilder.3.3.0.x64.Demo.zip
– the version number may differ. - Unzip in a location of your choice, then copy the
include
andlib
directories to the project directory. - Add
DVDBuilder.h
,AVBlocks.h
,PrimoBurner.h
, andDVDBuilder64.lib
,AVBlocks64.lib
,PrimoBurner64.lib
tostdafx.h
:
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#pragma once
#include "targetver.h"
#include <stdio.h>
#include <tchar.h>
// TODO: reference additional headers your program requires here
#include <iostream>
#include <thread>
#include <chrono>
#include <experimental\filesystem>
// the main DVDBuilder header
#include "include\DVDBuilder.h"
// optional AVBlocks and PrimoBurner headers
#include "include\AVBlocks.h"
#include "include\PrimoBurner.h"
// needed for C++11 features
#include "include\PrimoReference++.h"
// link with DVDBuilder64.lib
#pragma comment(lib, "lib\\DVDBuilder64.lib")
// link with optional libs
#pragma comment(lib, "lib\\AVBlocks64.lib")
#pragma comment(lib, "lib\\PrimoBurner64.lib")
- In Visual Studio, select ‘Build | Configuration Manager’ from the menu, then add the ‘x64′ platform to the solution platforms.
- Build the project.
- Copy the files
DVDBuilder64.dll
,AVBlocks64.dll
,PrimoBurner64.dll
fromlib
tox64\Debug
. - Replace the contents of ‘SimpleDVD.cpp’ with this code:
// SimpleDVD.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
// for less typing
using namespace std;
// alias experimental::filesystem
// or you can use boost::filesystem, http://www.boost.org
namespace fs = experimental::filesystem;
// alias primo
namespace p = primo;
const wstring DVDProjectDirectory = L"C:/ElephantDVD";
void convert_source_to_mpeg2(wstring inputFile, wstring outputFile);
void build_dvd_structures(wstring project, wstring dvdFiles);
int main()
{
// Video encoding
primo::avblocks::Library::initialize();
primo::avblocks::Library::setLicense("license_xml_string");
// DVD authoring
primo::dvdbuilder::Library::setLicense("license_xml_string");
// DVD burning
primo::burner::Library::setLicense("license_xml_string");
// Step 1: Convert sources
wstring source_mp4 = fs::path(DVDProjectDirectory).append(L"Elephant_512kb.mp4");
wstring source_mpeg2 = fs::path(DVDProjectDirectory).append(L"Elephant.mpg");
convert_source_to_mpeg2(source_mp4, source_mpeg2);
// Step 2: Build DVD structures
wstring project = fs::path(DVDProjectDirectory).append(L"project.xml");
wstring dvdFiles = fs::path(DVDProjectDirectory).append(L"dvd");
build_dvd_structures(project, dvdFiles);
primo::avblocks::Library::shutdown();
return 0;
}
// Convert sources
void convert_source_to_mpeg2(wstring inputFile, wstring outputFile)
{
using namespace primo::avblocks;
using namespace primo::avblocks::Library;
if (fs::exists(outputFile))
fs::remove(outputFile);
auto inputInfo = p::make_ref(
createMediaInfo()
);
inputInfo->setInputFile(inputFile.c_str());
if (inputInfo->load()) {
auto inputSocket = p::make_ref(
createMediaSocket(inputInfo.get())
);
auto outputSocket = p::make_ref(
createMediaSocket(Preset::Video::DVD::NTSC_16x9_PCM)
);
outputSocket->setFile(outputFile.c_str());
auto transcoder = p::make_ref(
createTranscoder()
);
transcoder->setAllowDemoMode(true);
transcoder->inputs()->add(inputSocket.get());
transcoder->outputs()->add(outputSocket.get());
if (transcoder->open()) {
transcoder->run();
transcoder->close();
}
}
}
// Build DVD structures
void build_dvd_structures(wstring project, wstring dvdFiles)
{
using namespace primo::dvdbuilder;
using namespace primo::dvdbuilder::Library;
if (fs::exists(dvdFiles))
fs::remove_all(dvdFiles);
auto dvdBuilder = p::make_ref(
createDVDBuilder()
);
dvdBuilder->setProjectFile(project.c_str());
dvdBuilder->setOutputFolder(dvdFiles.c_str());
dvdBuilder->build();
}
Run the application
- Create
C:\ElephantDVD
directory. We will refer to that as theDVD Project Directory
. - Download the clip
Elephant_512kb.mp4
from the Internet Archive to theDVD Project Directory
. - Download the file
project.xml
from DVDBuilder-Samples Repo to theDVD Project Directory
. - Run the application in Visual Studio. Wait a few seconds for the video conversion and DVD building to finish. The DVD structure will be generated in the
dvd
sub-directory of theDVD Project Directory
.
Troubleshooting
- You may get 'The program can't start because DVDBuilder64.dll is missing from your computer. Try reinstalling the program to fix this problem.' or a similar message. To fix this, copy the file
DVDBuilder64.dll
fromlib
tox64\Debug
.
Last updated on March 1st, 2016 12:00:00 AM