diff --git a/include/fvid2_graph.h b/include/fvid2_graph.h
--- /dev/null
+++ b/include/fvid2_graph.h
@@ -0,0 +1,219 @@
+/*
+ * Copyright (c) Texas Instruments Incorporated 2018
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of Texas Instruments Incorporated nor the names of
+ * its contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/**
+ * \file fvid2_graph.h
+ *
+ * \brief FVID2 Graph interface file.
+ */
+
+#ifndef FVID2_GRAPH_H_
+#define FVID2_GRAPH_H_
+
+/* ========================================================================== */
+/* Include Files */
+/* ========================================================================== */
+
+#include <ti/drv/fvid2/fvid2.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* ========================================================================== */
+/* Macros & Typedefs */
+/* ========================================================================== */
+
+#define FVID2_GRAPH_DEF_ALIGN ((uint32_t) 16U)
+#define FVID2_GRAPH_INVALID_NODE_ID ((uint32_t) 0U)
+#define FVID2_GRAPH_MAX_NODES ((uint32_t) 80U)
+#define FVID2_GRAPH_MAX_NUM_PATHS ((uint32_t) 20U)
+
+typedef enum
+{
+ FVID2_GRAPH_NM_DISABLE,
+ FVID2_GRAPH_NM_ENABLE,
+ FVID2_GRAPH_NM_CHECK
+} Fvid2_GraphNodeMode;
+
+typedef enum
+{
+ FVID2_GRAPH_NT_DUMMY,
+ FVID2_GRAPH_NT_DSS, /* DSS */
+ FVID2_GRAPH_NT_MAX_NODETYPE
+} Fvid2_GraphNodeTypes;
+
+typedef enum
+{
+ FVID2_GRAPH_NT_IN_SINGLE,
+ FVID2_GRAPH_NT_IN_MULTI,
+ FVID2_GRAPH_NT_IN_EMPTY
+} Fvid2_GraphNodeInputType;
+
+typedef enum
+{
+ FVID2_GRAPH_NT_OUT_SINGLE,
+ FVID2_GRAPH_NT_OUT_MULTI,
+ FVID2_GRAPH_NT_OUT_EMPTY
+} Fvid2_GraphNodeOutputType;
+
+/* ========================================================================== */
+/* Structure Declarations */
+/* ========================================================================== */
+
+typedef struct Fvid2_GraphNodeInfo_t Fvid2_GraphNodeInfo;
+
+typedef struct Fvid2_GraphNodeSet_t
+{
+ uint32_t numNodes;
+ /**< Number of input/output nodes */
+ Fvid2_GraphNodeInfo *node[FVID2_GRAPH_MAX_NUM_PATHS];
+ /**< Pointer to the input/output node */
+ uint32_t isEnabled[FVID2_GRAPH_MAX_NUM_PATHS];
+ /**< Flag to indicate whether input/output is enabled or not. */
+} Fvid2_GraphNodeSet;
+
+struct Fvid2_GraphNodeInfo_t
+{
+ /*Used to select config structure from the CreateParams */
+ uint32_t nodeNum;
+
+ /* Tree-connections */
+ Fvid2_GraphNodeInputType inType;
+ Fvid2_GraphNodeOutputType outType;
+
+ /* SI/SO/MI/MO */
+ uint32_t nodeType;
+
+ void *corePtr;
+ uint32_t isDummy;
+ uint32_t inUse;
+ Fvid2_GraphNodeSet input;
+ Fvid2_GraphNodeSet output;
+};
+
+typedef struct
+{
+ uint32_t numNodes;
+ Fvid2_GraphNodeInfo *list;
+} Fvid2_GraphNodeInfoList;
+
+/**
+ * \brief Structure containing edge information. Edge is a connection
+ * between two nodes i.e. two modules. Video Hardware can be represented
+ * by a graph, where each module is node and edge is present between two
+ * nodes if they are connected.
+ */
+typedef struct
+{
+ uint32_t startNode;
+ /**< Starting node of the edge */
+ uint32_t endNode;
+ /**< End node of the edge */
+} Fvid2_GraphEdgeInfo;
+
+typedef struct
+{
+ uint32_t numEdges;
+ /**< Number of the edge */
+ Fvid2_GraphEdgeInfo *list;
+ /**< Edge list */
+} Fvid2_GraphEdgeInfoList;
+
+typedef struct
+{
+ Fvid2_GraphNodeInfoList *nodeList;
+ Fvid2_GraphEdgeInfoList *edgeList;
+} Fvid2_GraphInfo;
+
+/* ========================================================================== */
+/* Function Declarations */
+/* ========================================================================== */
+
+Fvid2_GraphInfo *Fvid2_graphInit(const Fvid2_GraphNodeInfoList *inNodeList,
+ const Fvid2_GraphEdgeInfoList *inEdgeList,
+ Fvid2_GraphInfo *graphHandle);
+
+int32_t Fvid2_graphDeInit(Fvid2_GraphInfo *graphHandle);
+
+Fvid2_GraphNodeInfo *Fvid2_graphGetNodeInfo(
+ const Fvid2_GraphNodeInfoList *nodeList,
+ uint32_t cnt);
+
+int32_t Fvid2_graphAllocNodes(const Fvid2_GraphNodeInfoList *nodeList,
+ const Fvid2_GraphEdgeInfoList *edgeList,
+ Fvid2_GraphNodeMode mode);
+
+int32_t Fvid2_graphGetPath(const Fvid2_GraphNodeInfoList *inNodeList,
+ const Fvid2_GraphEdgeInfoList *inEdgeList,
+ Fvid2_GraphNodeInfoList *outNodeList,
+ Fvid2_GraphEdgeInfoList *outEdgeList,
+ uint32_t maxOutNodeCnt,
+ uint32_t maxOutEdgeCnt);
+
+int32_t Fvid2_graphFreePath(Fvid2_GraphNodeInfoList *nodeList,
+ Fvid2_GraphEdgeInfoList *edgeList);
+
+int32_t Fvid2_graphStackIsLastNode(const Fvid2_GraphNodeInfo *currNode,
+ uint32_t isForward);
+
+void Fvid2_graphStackInitTraverser(Fvid2_GraphNodeInfo *node);
+
+Fvid2_GraphNodeInfo *Fvid2_graphGetNextNodeToTraverse(uint32_t isForward);
+
+uint32_t Fvid2_graphIsNodeInputAvailable(
+ const Fvid2_GraphNodeInfoList *nodeList,
+ uint32_t nodeNum);
+
+uint32_t Fvid2_graphIsNodeOutputAvailable(
+ const Fvid2_GraphNodeInfoList *nodeList,
+ uint32_t nodeNum);
+
+void Fvid2_graphInitTraverser(Fvid2_GraphNodeInfo *node);
+
+Fvid2_GraphNodeInfo *Fvid2_graphGetNextChildNode(
+ const Fvid2_GraphNodeInfo *currNode,
+ uint32_t isForward);
+
+Fvid2_GraphNodeInfo *Fvid2_graphStackPeak(uint32_t *stNum);
+
+int32_t Fvid2_graphGetEnabledIndex(const uint32_t *array, uint32_t size);
+
+void Fvid2_graphAddEdge(Fvid2_GraphEdgeInfo *edge,
+ uint32_t startNode,
+ uint32_t endNode);
+
+#ifdef __cplusplus /* If this is a C++ compiler, end C linkage */
+}
+#endif
+
+#endif /* FVID2_GRAPH_H_ */