If you want to hack on virt-v2v, you've come to the right place ...
For virt-p2v, read this file, but also p2v/HACKING.

First a little history.  Virt-v2v has been through at least two
complete rewrites, so this is probably about the third version (but we
don't intend to rewrite it again).  The previous version was written
in Perl and can be found here:
https://git.fedorahosted.org/git/virt-v2v.git

The current version started out as almost a line-for-line rewrite of
the Perl code in OCaml + C, and it still has a fairly similar
structure.  Therefore if there are details of this code that you don't
understand (especially in the details of guest conversion), checking
the Perl code may help.

The files to start with when reading this code are:

 - types.mli
 - v2v.ml

'types.mli' defines all the structures used and passed around when
communicating between different bits of the program.  'v2v.ml'
controls how the program runs in stages.

After studying those files, you may want to branch out into the input
modules ('input_*'), the output modules ('output_*') or the conversion
modules ('convert_*').  The input and output modules define -i and -o
options (see the manual).  The conversion modules define what guest
types we can handle and the detailed steps involved in converting
them.

Every other file in this directory is a support module / library of
some sort.  Some code is written in C, especially where we want to use
an external C library such as libxml2.
