From 455900e8cbb7a88d3ec05cba5393f4ca0bf22adc Mon Sep 17 00:00:00 2001 From: Brijesh Singh <bksingh@ti.com> Date: Sun, 9 May 2010 05:21:19 -0500 Subject: [PATCH] gstreamer ti tracker 1055 --- Makefile.external | 49 +++++++--- src/Makefile.am | 4 +- src/gstticodecplugin_dm355.cfg | 143 ++++++++++++----------------- src/gstticodecplugin_dm365.cfg | 185 ++++++++++++++++++-------------------- src/gstticodecplugin_dm6467t.cfg | 34 +++++++ src/gstticodecs_dm355.c | 11 +-- src/gstticodecs_dm365.c | 23 ++++-- src/gstticodecs_dm6467.c | 2 +- src/gstticodecs_dm6467t.c | 69 ++++++++++++++ src/gsttidmaivideosink.c | 25 ++++- src/gsttividdec2.c | 73 ++++++++------- src/gsttividenc1.c | 10 ++- src/gsttividresize.c | 4 + 13 files changed, 380 insertions(+), 252 deletions(-) create mode 100644 src/gstticodecplugin_dm6467t.cfg create mode 100644 src/gstticodecs_dm6467t.c diff --git a/Makefile.external b/Makefile.external index ca14b49..1f67783 100644 --- a/Makefile.external +++ b/Makefile.external @@ -3,8 +3,7 @@ # # The only customization required below is defining the DVSDK_PATH # and, if your DVSDK doesn't include DMAI, the set DMAI_INSTALL_DIR variable -# appropriately. If your DVSDK does include DMAI, then delete the line -# setting the DMAI_INSTALL_DIR variable below. +# appropriately. # # Copyright (C) 2009 Ridgerun # @@ -17,15 +16,16 @@ DMAI_INSTALL_DIR=undefined ifeq ($(DVSDK_PATH),undefined) $(error You need to define the environment variable DVSDK_PATH) endif +include $(DVSDK_PATH)/Rules.make + ifeq ($(DMAI_INSTALL_DIR),undefined) $(error You need to define the environment variable DMAI_INSTALL_DIR) endif default: - @echo "Please specify the target: dm6446, omap3530, dm355, dm6467, dm365" + @echo "Please specify the target: dm6446, omap3530, dm355, dm6467, dm6467t, dm365" -include $(DVSDK_PATH)/Rules.make -export PLATFORM=$(MAKECMDGOALS) +export GST_TI_PLATFORM=$(MAKECMDGOALS) export BIOS_INSTALL_DIR export CE_INSTALL_DIR export CMEM_INSTALL_DIR @@ -33,6 +33,7 @@ export CODEC_INSTALL_DIR export DMAI_INSTALL_DIR export FC_INSTALL_DIR export LINK_INSTALL_DIR +export LINK_XDC_ROOT = $(LINK_INSTALL_DIR)/packages export LINUXKERNEL_INSTALL_DIR export LPM_INSTALL_DIR export MVTOOL_DIR @@ -41,34 +42,49 @@ export XDAIS_INSTALL_DIR export XDC_INSTALL_DIR export EDMA3_LLD_INSTALL_DIR -ifeq ($(PLATFORM), dm355) - export XDC_TARGET = gnu.targets.MVArm9 - export XDC_PLATFORM = ti.platforms.evmDM355 +ifeq ($(GST_TI_PLATFORM), dm355) + export XDC_TARGET = gnu.targets.arm.GCArmv5T + export XDC_PLATFORM = ti.platforms.evmDM355 + export MVTOOL_PREFIX = $(CSTOOL_PREFIX) + export MVTOOL_DIR = $(CSTOOL_DIR) + export PLATFORM_XDC = ${XDC_PLATFORM} endif -ifeq ($(PLATFORM), dm6446) +ifeq ($(GST_TI_PLATFORM), dm6446) export XDC_TARGET = gnu.targets.MVArm9 export XDC_PLATFORM = ti.platforms.evmDM6446 endif -ifeq ($(PLATFORM), dm6467) +ifeq ($(GST_TI_PLATFORM), dm6467) export XDC_TARGET = gnu.targets.MVArm9 export XDC_PLATFORM = ti.platforms.evmDM6467 endif -ifeq ($(PLATFORM), dm365) - export XDC_TARGET = gnu.targets.MVArm9 - export XDC_PLATFORM = ti.platforms.evmDM365 +ifeq ($(GST_TI_PLATFORM), dm6467t) + export XDC_TARGET = gnu.targets.arm.GCArmv5T + export XDC_PLATFORM = ti.platforms.evmDM6467 + export LINK_XDC_ROOT = $(LINK_INSTALL_DIR) + export MVTOOL_PREFIX = $(CSTOOL_PREFIX) + export MVTOOL_DIR = $(CSTOOL_DIR) + export PLATFORM_XDC = ${XDC_PLATFORM} endif -ifeq ($(PLATFORM), omap3530) +ifeq ($(GST_TI_PLATFORM), dm365) + export XDC_TARGET = gnu.targets.arm.GCArmv5T + export XDC_PLATFORM = ti.platforms.evmDM365 + export MVTOOL_PREFIX = $(CSTOOL_PREFIX) + export MVTOOL_DIR = $(CSTOOL_DIR) + export PLATFORM_XDC = ${XDC_PLATFORM} +endif + +ifeq ($(GST_TI_PLATFORM), omap3530) export XDC_TARGET = gnu.targets.arm.GCArmv5T export XDC_PLATFORM = ti.platforms.evm3530 export MVTOOL_PREFIX = $(CSTOOL_PREFIX) export MVTOOL_DIR = $(CSTOOL_DIR) endif -CPPFLAGS=-DPlatform_$(PLATFORM) +CPPFLAGS=-DPlatform_$(GST_TI_PLATFORM) HOST=arm-none-linux-gnueabi configure: @@ -86,6 +102,9 @@ dm6446: Makefile dm6467: Makefile $(MAKE) -f Makefile +dm6467t: Makefile + $(MAKE) -f Makefile + dm355: Makefile $(MAKE) -f Makefile diff --git a/src/Makefile.am b/src/Makefile.am index 231beb0..95973a8 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,6 +1,6 @@ # plugindir is set in configure -XDC_CONFIG_BASENAME = gstticodecplugin_$(PLATFORM) +XDC_CONFIG_BASENAME = gstticodecplugin_$(GST_TI_PLATFORM) plugin_LTLIBRARIES = libgstticodecplugin.la # sources used to compile this plug-in @@ -21,7 +21,7 @@ BUILT_SOURCES = $(XDC_CONFIG_BASENAME)/compiler.opt $(XDC_CONFIG_BASENAME)/linke XDC_PATH = .;$(XDC_INSTALL_DIR)/packages;$(LINK_XDC_ROOT);$(FC_INSTALL_DIR)/packages;$(CE_INSTALL_DIR)/packages;$(XDAIS_INSTALL_DIR)/packages;$(CODEC_INSTALL_DIR)/packages;$(CMEM_INSTALL_DIR)/packages;$(DMAI_INSTALL_DIR)/packages;$(LPM_INSTALL_DIR)/packages;$(XDC_USER_PATH);$(EDMA3_LLD_INSTALL_DIR)/packages; gstticodecs_platform.c : - ln -s $(srcdir)/gstticodecs_$(PLATFORM).c gstticodecs_platform.c + ln -s $(srcdir)/gstticodecs_$(GST_TI_PLATFORM).c gstticodecs_platform.c %/compiler.opt %/linker.cmd : %.cfg XDCPATH="$(XDC_PATH)" $(CONFIGURO) -c $(MVTOOL_DIR) -o $(XDC_CONFIG_BASENAME) -t $(XDC_TARGET) -p $(XDC_PLATFORM) -b $(DMAI_INSTALL_DIR)/packages/config.bld $< diff --git a/src/gstticodecplugin_dm355.cfg b/src/gstticodecplugin_dm355.cfg index 7ceae4f..bf533f0 100644 --- a/src/gstticodecplugin_dm355.cfg +++ b/src/gstticodecplugin_dm355.cfg @@ -1,84 +1,59 @@ -/* - * Copyright (C) $year Texas Instruments Incorporated - http://www.ti.com/ - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation version 2.1 of the License. - * - * This program is distributed #as is# WITHOUT ANY WARRANTY of any kind, - * whether express or implied; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - */ - -prog.build.platform = "ti.platforms.evmDM355"; - -/* Load support for the Codec Engine OSAL */ -var osalGlobal = xdc.useModule('ti.sdo.ce.osal.Global'); - -/* Configure CE to use it's DSP Link Linux version */ -osalGlobal.runtimeEnv = osalGlobal.LINUX; - -/* - * ======== Engine Configuration ======== - */ -var viddec = xdc.module('ti.sdo.ce.video2.IVIDDEC2'); -var imgenc = xdc.module('ti.sdo.ce.image1.IIMGENC1'); -var MPEG4DEC = xdc.useModule('ti.sdo.codecs.mpeg4dec.dm355.ce.MPEG4DEC'); -var MPEG4ENC = xdc.useModule('ti.sdo.codecs.mpeg4enc.dm355.ce.MPEG4ENC'); -var JPEGENC = xdc.useModule('ti.sdo.codecs.jpegenc.dm355.ce.JPEGENC'); -var JPEGDEC = xdc.useModule('ti.sdo.codecs.jpegdec.dm355.ce.JPEGDEC'); - -var Engine = xdc.useModule('ti.sdo.ce.Engine'); -var decodeEngine = Engine.create("decode", [ - {name: "mpeg4dec", mod: MPEG4DEC, local: true, groupId: 1}, - {name: "jpegdec", mod: JPEGDEC, local: true, groupId: 1}, -]); - -var encodeEngine = Engine.create("encode", [ - {name: "mpeg4enc", mod: MPEG4ENC, local: true, groupId: 1}, - {name: "jpegenc", mod: JPEGENC, local: true, groupId: 1}, -]); - -/* Load support for the 'Davinci Multimedia Application Interface' modules */ -var DMAI = xdc.loadPackage('ti.sdo.dmai'); - -/* - * ======== DMAN3 Configuration ======== - */ - -var DMAN3 = xdc.useModule('ti.sdo.fc.dman3.DMAN3'); - -/* give DMAN3 all TCCs except those hard-coded by The JPEG & MPEG Enc & Decs */ - -/* - * For the 32-63 range, configure tccAllocationMaskH to exclude used channels - * JPEG Dec: {33-47, 52-57} - * JPEG Enc: {34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49} - * MPEG Dec: {32-63} - * MPEG Enc: {12, 13, 34, 35, 40,41,42,43,44,45,46,47,48,49,50,52,53, - * 54,55,56,57,63} - */ -DMAN3.tccAllocationMaskH = 0x0; /* everthing 32-63 hardcoded and unavailable */ - -/* Give DMAN3 all lower TCCs except what's taken by Linux kernel and a Codec: - * Based on the info from montavista: {2, 3, 8, 9, 26, 27, 30, 31} - * and MPEG Enc taking up: {12, 13} - */ -DMAN3.tccAllocationMaskL = 0x33ffccf3; - -/* Following assignments will give DMAN3 control of PaRAMs above 78: */ -DMAN3.paRamBaseIndex = 64; -DMAN3.numPaRamEntries = 48; -DMAN3.nullPaRamIndex = 127; - -/* Configure Scratch Group's DMAN3 resources */ -DMAN3.numTccGroup[1] = 0; -DMAN3.numPaRamGroup[1] = 32; - -DMAN3.qdmaChannels = [0, 1, 2, 3, 4, 5, 6, 7]; -DMAN3.maxQdmaChannels = 8; -DMAN3.numQdmaChannels = 8; -DMAN3.maxTCs = 2; - +/* =========================================================================== + * Copyright (c) Texas Instruments Incorporated 2009 + * + * Use of this software is controlled by the terms and conditions found in + * the license agreement under which this software has been supplied or + * provided. + * =========================================================================== + */ + +/* Load support for the Codec Engine OSAL */ +var osalGlobal = xdc.useModule('ti.sdo.ce.osal.Global'); + +/* Configure CE to use it's DSP Link Linux version */ +osalGlobal.runtimeEnv = osalGlobal.LINUX; + +/* Configure RMAN */ +var RMAN = xdc.useModule('ti.sdo.fc.rman.RMAN'); +RMAN.useDSKT2 = false; +RMAN.persistentAllocFxn = "__ALG_allocMemory"; +RMAN.persistentFreeFxn = "__ALG_freeMemory"; +RMAN.semCreateFxn = "Sem_create"; +RMAN.semDeleteFxn = "Sem_delete"; +RMAN.semPendFxn = "Sem_pend"; +RMAN.semPostFxn = "Sem_post"; +RMAN.tableSize = 10; + +var EDMA3 = xdc.useModule('ti.sdo.fc.edma3.Settings'); +var EDMA3CHAN = xdc.useModule('ti.sdo.fc.ires.edma3chan.EDMA3CHAN'); +var EDMA = xdc.useModule('ti.sdo.linuxutils.edma.EDMA'); +var VICPLU = xdc.useModule('ti.sdo.linuxutils.vicp.VICP'); +var VICP = xdc.useModule('ti.sdo.fc.ires.vicp.VICP2'); +var VICPSYNC = xdc.useModule('ti.sdo.fc.vicpsync.VICPSYNC'); +var ADDRSPACE = xdc.useModule('ti.sdo.fc.ires.addrspace.ADDRSPACE'); +var CMEM = xdc.useModule('ti.sdo.linuxutils.cmem.CMEM'); + +/* + * ======== Engine Configuration ======== + */ +var viddec = xdc.module('ti.sdo.ce.video2.IVIDDEC2'); +var auddec = xdc.module('ti.sdo.ce.audio.IAUDDEC'); +var videnc = xdc.module('ti.sdo.ce.video1.IVIDENC1'); +var audenc = xdc.module('ti.sdo.ce.audio.IAUDENC'); + +var MPEG4DEC = xdc.useModule('ti.sdo.codecs.mpeg4dec.ce.MPEG4DEC'); +var JPEGDEC = xdc.useModule('ti.sdo.codecs.jpegdec.ce.JPEGDEC'); +var MPEG4ENC = xdc.useModule('ti.sdo.codecs.mpeg4enc.ce.MPEG4ENC'); +var JPEGENC = xdc.useModule('ti.sdo.codecs.jpegenc.ce.JPEGENC'); + +var Engine = xdc.useModule('ti.sdo.ce.Engine'); +var myEngine = Engine.create("codecServer", [ + {name: "mpeg4dec", mod: MPEG4DEC, local: true, groupId: 1}, + {name: "jpegdec", mod: JPEGDEC, local: true, groupId: 1}, + {name: "mpeg4enc", mod: MPEG4ENC, local: true, groupId: 1}, + {name: "jpegenc", mod: JPEGENC, local: true, groupId: 1} +]); + +/* Load support for the 'Davinci Multimedia Application Interface' modules */ +var DMAI = xdc.loadPackage('ti.sdo.dmai'); + diff --git a/src/gstticodecplugin_dm365.cfg b/src/gstticodecplugin_dm365.cfg index 6442dce..0e94a35 100644 --- a/src/gstticodecplugin_dm365.cfg +++ b/src/gstticodecplugin_dm365.cfg @@ -1,99 +1,86 @@ -/* - * Copyright (C) $year Texas Instruments Incorporated - http://www.ti.com/ - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as - * published by the Free Software Foundation version 2.1 of the License. - * - * This program is distributed #as is# WITHOUT ANY WARRANTY of any kind, - * whether express or implied; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - */ - -prog.build.platform = "ti.platforms.evmDM365"; - -/* Load support for the Codec Engine OSAL */ -var osalGlobal = xdc.useModule('ti.sdo.ce.osal.Global'); - -/* Configure CE to use it's DSP Link Linux version */ -osalGlobal.runtimeEnv = osalGlobal.LINUX; - -/* - * ======== Engine Configuration ======== - */ -var videnc = xdc.module('ti.sdo.ce.video1.IVIDENC1'); -var viddec = xdc.module('ti.sdo.ce.video2.IVIDDEC2'); - -var MPEG4ENC = xdc.useModule('ti.sdo.codecs.mpeg4enc.ce.MPEG4ENC'); -var H264ENC = xdc.useModule('ti.sdo.codecs.h264enc.ce.H264ENC'); -var MPEG4DEC = xdc.useModule('ti.sdo.codecs.mpeg4dec.ce.MPEG4DEC'); -var H264DEC = xdc.useModule('ti.sdo.codecs.h264dec.ce.H264DEC'); -var JPEGENC = xdc.useModule('ti.sdo.codecs.jpegenc.ce.JPEGENC'); -var JPEGDEC = xdc.useModule('ti.sdo.codecs.jpegdec.ce.JPEGDEC'); - -var Engine = xdc.useModule('ti.sdo.ce.Engine'); -var encodeEngine = Engine.create("encode", [ - {name: "mpeg4enc", mod: MPEG4ENC, local: true, groupId: 1}, - {name: "h264enc", mod: H264ENC, local: true, groupId: 1}, - {name: "jpegenc", mod: JPEGENC, local: true, groupId: 1}, -]); -var decodeEngine = Engine.create("decode", [ - {name: "mpeg4dec", mod: MPEG4DEC, local: true, groupId: 1}, - {name: "h264dec", mod: H264DEC, local: true, groupId: 1}, - {name: "jpegdec", mod: JPEGDEC, local: true, groupId: 1}, -]); - -/* Load support for the 'Davinci Multimedia Application Interface' modules */ -var DMAI = xdc.loadPackage('ti.sdo.dmai'); - -/* Load support for SimpleWidget */ -/*var SW = xdc.loadPackage('ti.sdo.simplewidget');*/ - - -/* Configure RMAN */ -var RMAN = xdc.useModule('ti.sdo.fc.rman.RMAN'); -RMAN.useDSKT2 = false; -RMAN.persistentAllocFxn = "__ALG_allocMemory"; -RMAN.persistentFreeFxn = "__ALG_freeMemory"; -RMAN.semCreateFxn = "Sem_create"; -RMAN.semDeleteFxn = "Sem_delete"; -RMAN.semPendFxn = "Sem_pend"; -RMAN.semPostFxn = "Sem_post"; -RMAN.tableSize = 10; - -/* Configure VICPSYNC */ -var VICPSYNC = xdc.useModule('ti.sdo.fc.vicpsync.VICPSYNC'); - -/* Configure HDVICPSYNC */ -var HDVICPSYNC = xdc.useModule('ti.sdo.fc.hdvicpsync.HDVICPSYNC'); - -/* Configure MEMUTILS */ -var MEMUTILS = xdc.useModule('ti.sdo.fc.memutils.MEMUTILS'); - -var EDMA3 = xdc.useModule('ti.sdo.fc.edma3.Settings'); - -var HDVICP = xdc.useModule('ti.sdo.fc.ires.hdvicp.HDVICP'); - -var VICP = xdc.useModule('ti.sdo.fc.ires.vicp.VICP2'); - -var ADDRSPACE = xdc.useModule('ti.sdo.fc.ires.addrspace.ADDRSPACE'); - -var EDMA3CHAN = xdc.useModule('ti.sdo.fc.ires.edma3chan.EDMA3CHAN'); - -var LSP = xdc.useModule('ti.sdo.linuxutils.edma.EDMA'); - -var CMEM = xdc.useModule('ti.sdo.linuxutils.cmem.CMEM'); - - -/* Uncomment these lines if you wish to debug FC and enable FC trace */ - -/* -xdc.loadPackage('ti.sdo.fc.ires.vicp').profile = "debug_trace"; -xdc.loadPackage('ti.sdo.fc.ires.edma3chan').profile = "debug_trace"; -xdc.loadPackage('ti.sdo.fc.rman').profile = "debug_trace"; -xdc.loadPackage('ti.sdo.fc.edma3').profile = "debug_trace"; -EDMA3CHAN.trace = true; -EDMA3CHAN.debug = true; -*/ +/* ============================================================================ + * Copyright (c) Texas Instruments Incorporated 2009 + * + * Use of this software is controlled by the terms and conditions found in the + * license agreement under which this software has been supplied or provided. + * ============================================================================ + */ + +/* Load support for the Codec Engine OSAL */ +var osalGlobal = xdc.useModule('ti.sdo.ce.osal.Global'); + +/* Configure CE to use it's DSP Link Linux version */ +osalGlobal.runtimeEnv = osalGlobal.LINUX; + +/* + * ======== Engine Configuration ======== + */ +var viddec = xdc.module('ti.sdo.ce.video2.IVIDDEC2'); +var auddec = xdc.module('ti.sdo.ce.audio.IAUDDEC'); + +var MPEG4DEC = xdc.useModule('ti.sdo.codecs.mpeg4dec_hdvicp.ce.MPEG4DEC_HDVICP'); +var MPEG2DEC = xdc.useModule('ti.sdo.codecs.mpeg2dec.ce.MPEG2DEC'); +var H264DEC = xdc.useModule('ti.sdo.codecs.h264dec.ce.H264DEC'); +var MPEG4ENC = xdc.useModule('ti.sdo.codecs.mpeg4enc_hdvicp.ce.MPEG4ENC_HDVICP'); +var MPEG2ENC = xdc.useModule('ti.sdo.codecs.mpeg2enc.ce.MPEG2ENC'); +var H264ENC = xdc.useModule('ti.sdo.codecs.h264enc.ce.H264ENC'); + +var Engine = xdc.useModule('ti.sdo.ce.Engine'); +var myEngine = Engine.create("codecServer", [ + {name: "mpeg4dec", mod: MPEG4DEC, local: true, groupId: 1}, + {name: "mpeg2dec", mod: MPEG2DEC, local: true, groupId: 1}, + {name: "h264dec", mod: H264DEC, local: true, groupId: 1}, + {name: "mpeg4enc", mod: MPEG4ENC, local: true, groupId: 1}, + {name: "mpeg2enc", mod: MPEG2ENC, local: true, groupId: 1}, + {name: "h264enc", mod: H264ENC, local: true, groupId: 1}, +]); + + + +/* Load support for the 'Davinci Multimedia Application Interface' modules */ +var DMAI = xdc.loadPackage('ti.sdo.dmai'); + +/* Configure RMAN */ +var RMAN = xdc.useModule('ti.sdo.fc.rman.RMAN'); +RMAN.useDSKT2 = false; +RMAN.persistentAllocFxn = "__ALG_allocMemory"; +RMAN.persistentFreeFxn = "__ALG_freeMemory"; +RMAN.semCreateFxn = "Sem_create"; +RMAN.semDeleteFxn = "Sem_delete"; +RMAN.semPendFxn = "Sem_pend"; +RMAN.semPostFxn = "Sem_post"; +RMAN.tableSize = 10; + +/* Configure VICPSYNC */ +var VICPSYNC = xdc.useModule('ti.sdo.fc.vicpsync.VICPSYNC'); + +/* Configure HDVICPSYNC */ +var HDVICPSYNC = xdc.useModule('ti.sdo.fc.hdvicpsync.HDVICPSYNC'); + +/* Configure MEMUTILS */ +var MEMUTILS = xdc.useModule('ti.sdo.fc.memutils.MEMUTILS'); + +var EDMA3 = xdc.useModule('ti.sdo.fc.edma3.Settings'); + +var HDVICP = xdc.useModule('ti.sdo.fc.ires.hdvicp.HDVICP'); + +var VICP = xdc.useModule('ti.sdo.fc.ires.vicp.VICP2'); + +var EDMA3CHAN = xdc.useModule('ti.sdo.fc.ires.edma3chan.EDMA3CHAN'); + +var EDMA = xdc.useModule('ti.sdo.linuxutils.edma.EDMA'); + +var ADDRSPACE = xdc.useModule('ti.sdo.fc.ires.addrspace.ADDRSPACE'); + +var CMEM = xdc.useModule('ti.sdo.linuxutils.cmem.CMEM'); + +/* Uncomment these lines if you wish to debug FC and enable FC trace */ +/* +/* +xdc.loadPackage('ti.sdo.fc.ires.vicp').profile = "debug_trace"; +xdc.loadPackage('ti.sdo.fc.ires.edma3chan').profile = "debug_trace"; +xdc.loadPackage('ti.sdo.fc.rman').profile = "debug_trace"; +xdc.loadPackage('ti.sdo.fc.edma3').profile = "debug_trace"; +EDMA3CHAN.trace = true; +EDMA3CHAN.debug = true; +*/ diff --git a/src/gstticodecplugin_dm6467t.cfg b/src/gstticodecplugin_dm6467t.cfg new file mode 100644 index 0000000..686cfeb --- /dev/null +++ b/src/gstticodecplugin_dm6467t.cfg @@ -0,0 +1,34 @@ +/* ============================================================================ + * Copyright (c) Texas Instruments Incorporated 2009 + * + * Use of this software is controlled by the terms and conditions found in the + * license agreement under which this software has been supplied or provided. + * ============================================================================ + */ + +/* Load support for the Codec Engine OSAL */ +var osalGlobal = xdc.useModule('ti.sdo.ce.osal.Global'); +var os = xdc.useModule('ti.sdo.ce.osal.linux.Settings'); +osalGlobal.os = os; + +/* Configure CE to use it's DSP Link Linux version */ +var ipc = xdc.useModule('ti.sdo.ce.ipc.Settings'); +ipc.commType = ipc.COMM_DSPLINK; + +/* + * ======== Engine Configuration ======== + */ +var Engine = xdc.useModule('ti.sdo.ce.Engine'); +var demoEngine = Engine.createFromServer( + "codecServer", + "./bin/cs.x64P", + "ti.sdo.server.cs" + ); + +var combopath = "" + java.lang.System.getenv("CODEC_SERVER"); +if (combopath != "" && combopath != "null") { + demoEngine.server = java.lang.System.getenv("CODEC_SERVER"); +} + +/* Load support for the 'Davinci Multimedia Application Interface' modules */ +var DMAI = xdc.loadPackage('ti.sdo.dmai'); diff --git a/src/gstticodecs_dm355.c b/src/gstticodecs_dm355.c index a372b06..9d4325b 100644 --- a/src/gstticodecs_dm355.c +++ b/src/gstticodecs_dm355.c @@ -22,8 +22,7 @@ #include "gstticodecs.h" /* Declaration of the production engine and decoders shipped with the DVSDK */ -static Char decodeEngine[] = "decode"; -static Char encodeEngine[] = "encode"; +static Char codecServer[] = "codecServer"; /* NULL terminated list of speech decoders in the engine to use in the demo */ GstTICodec gst_ticodec_codecs[] = { @@ -32,25 +31,25 @@ GstTICodec gst_ticodec_codecs[] = { { "MPEG4 Video Decoder", /* String name of codec used by plugin */ "mpeg4dec", /* String name of codec used by CE */ - decodeEngine /* Engine that contains this codec */ + codecServer /* Engine that contains this codec */ }, { "MPEG4 Video Encoder", /* String name of codec used by plugin */ "mpeg4enc", /* String name of codec used by CE */ - encodeEngine /* Engine that contains this codec */ + codecServer /* Engine that contains this codec */ }, /* Imaging Codecs */ { "JPEG Image Encoder", "jpegenc", - encodeEngine + codecServer }, { "JPEG Image Decoder", "jpegdec", - decodeEngine + codecServer }, { NULL } diff --git a/src/gstticodecs_dm365.c b/src/gstticodecs_dm365.c index 9572403..cf81e6f 100644 --- a/src/gstticodecs_dm365.c +++ b/src/gstticodecs_dm365.c @@ -22,8 +22,7 @@ #include "gstticodecs.h" /* Declaration of the production engine and decoders shipped with the DVSDK */ -static Char decodeEngine[] = "decode"; -static Char encodeEngine[] = "encode"; +static Char codecServer[] = "codecServer"; /* NULL terminated list of speech decoders in the engine to use in the demo */ GstTICodec gst_ticodec_codecs[] = { @@ -32,25 +31,37 @@ GstTICodec gst_ticodec_codecs[] = { { "MPEG4 Video Decoder", /* String name of codec used by plugin */ "mpeg4dec", /* String name of codec used by CE */ - decodeEngine /* Engine that contains this codec */ + codecServer /* Engine that contains this codec */ + }, + + { + "MPEG2 Video Decoder", /* String name of codec used by plugin */ + "mpeg2dec", /* String name of codec used by CE */ + codecServer /* Engine that contains this codec */ }, { "MPEG4 Video Encoder", /* String name of codec used by plugin */ "mpeg4enc", /* String name of codec used by CE */ - encodeEngine /* Engine that contains this codec */ + codecServer /* Engine that contains this codec */ + }, + + { + "MPEG2 Video Encoder", /* String name of codec used by plugin */ + "mpeg2enc", /* String name of codec used by CE */ + codecServer /* Engine that contains this codec */ }, { "H.264 Video Decoder", /* String name of codec used by plugin */ "h264dec", /* String name of codec used by CE */ - decodeEngine /* Engine that contains this codec */ + codecServer /* Engine that contains this codec */ }, { "H.264 Video Encoder", /* String name of codec used by plugin */ "h264enc", /* String name of codec used by CE */ - encodeEngine /* Engine that contains this codec */ + codecServer /* Engine that contains this codec */ }, { NULL } diff --git a/src/gstticodecs_dm6467.c b/src/gstticodecs_dm6467.c index b9b0499..cbb6520 100644 --- a/src/gstticodecs_dm6467.c +++ b/src/gstticodecs_dm6467.c @@ -1,5 +1,5 @@ /* - * gstticodecs_dm6446.c + * gstticodecs_dm6467.c * * This file provides information for available codecs on the DM6446 platform. * diff --git a/src/gstticodecs_dm6467t.c b/src/gstticodecs_dm6467t.c new file mode 100644 index 0000000..fe597d5 --- /dev/null +++ b/src/gstticodecs_dm6467t.c @@ -0,0 +1,69 @@ +/* + * gstticodecs_dm6467t.c + * + * This file provides information for available codecs on the DM6446 platform. + * + * Original Author: + * Don Darling, Texas Instruments, Inc. + * + * Copyright (C) $year Texas Instruments Incorporated - http://www.ti.com/ + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation version 2.1 of the License. + * + * This program is distributed #as is# WITHOUT ANY WARRANTY of any kind, + * whether express or implied; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + */ + +#include "gstticodecs.h" + +/* Declaration of the production engine and decoders shipped with the DVSDK */ +static Char codecServer[] = "codecServer"; + +/* NULL terminated list of speech decoders in the engine to use in the demo */ +GstTICodec gst_ticodec_codecs[] = { + + /* Speech Codecs */ + { + "G.711 Speech Decoder", /* String name of codec used by plugin */ + "g711dec", /* String name of codec used by CE */ + codecServer /* Engine that contains this codec */ + }, { + "G.711 Speech Encoder", /* String name of codec used by plugin */ + "g711enc", /* String name of codec used by CE */ + codecServer /* Engine that contains this codec */ + }, + + /* Audio Codecs */ + { + "AAC Audio Decoder", /* String name of codec used by plugin */ + "aachedec", /* String name of codec used by CE */ + codecServer /* Engine that contains this codec */ + }, + + /* Video Codecs */ + { + "H.264 Video Decoder", /* String name of codec used by plugin */ + "h264dec", /* String name of codec used by CE */ + codecServer /* Engine that contains this codec */ + }, { + "H.264 BP/HP Decoder", /* Name of codec used by plugin */ + "h2641080p60vdec", /* String name of codec used by CE */ + codecServer /* Engine that contains this codec */ + }, { + "H.264 Video Encoder", /* String name of codec used by plugin */ + "h264enc", /* String name of codec used by CE */ + codecServer /* Engine that contains this codec */ + }, { + "MPEG2 Video Decoder", /* String name of codec used by plugin */ + "mpeg2dec", /* String name of codec used by CE */ + codecServer /* Engine that contains this codec */ + }, + + { NULL } +}; + diff --git a/src/gsttidmaivideosink.c b/src/gsttidmaivideosink.c index 5f6a5b3..81bdac7 100644 --- a/src/gsttidmaivideosink.c +++ b/src/gsttidmaivideosink.c @@ -32,11 +32,12 @@ /* Define sink (input) pad capabilities. * * UYVY - YUV 422 interleaved corresponding to V4L2_PIX_FMT_UYVY in v4l2 - * Y8C8 - YUV 422 semi planar. The dm6467 VDCE outputs this format after a + * NV16 - YUV 422 semi planar. The dm6467 VDCE outputs this format after a * color conversion.The format consists of two planes: one with the * Y component and one with the CbCr components interleaved (hence semi) * * See the LSP VDCE documentation for a thorough description of this * format. + * Y8C8 - Same as NV16. Y8C8 was used in MVL-based LSPs. * NV12 - YUV 420 semi planar corresponding to V4L2_PIX_FMT_NV12 in v4l2. * The format consists of two planes: one with the * Y component and one with the CbCr components interleaved with @@ -62,6 +63,11 @@ static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE ( "width=(int)[ 1, MAX ], " "height=(int)[ 1, MAX ];" "video/x-raw-yuv, " + "format=(fourcc)NV16, " + "framerate=(fraction)[ 0, MAX ], " + "width=(int)[ 1, MAX ], " + "height=(int)[ 1, MAX ];" + "video/x-raw-yuv, " "format=(fourcc)NV12, " "framerate=(fraction)[ 0, MAX ], " "width=(int)[ 1, MAX ], " @@ -219,7 +225,7 @@ static void gst_tidmaivideosink_class_init(GstTIDmaiVideoSinkClass * klass) "Video Standard used\n" "\tAUTO (if supported), CIF, SIF_NTSC, SIF_PAL, VGA, D1_NTSC\n" "\tD1_PAL, 480P, 576P, 720P_60, 720P_50, 1080I_30, 1080I_25\n" - "\t1080P_30, 1080P_25, 1080P_24\n", + "\t1080P_30, 1080P_60, 1080P_25, 1080P_24\n", NULL, G_PARAM_READWRITE)); g_object_class_install_property(gobject_class, PROP_VIDEOOUTPUT, @@ -661,6 +667,9 @@ static int gst_tidmaivideosink_videostd_get_attrs(VideoStd_Type videoStd, break; case VideoStd_480P: case VideoStd_720P_60: + #if defined(Platform_dm6467t) + case VideoStd_1080P_60: + #endif vattrs->framerate = 60; break; @@ -715,6 +724,9 @@ static int gst_tidmaivideosink_videostd_get_refresh_latency( case VideoStd_480P: case VideoStd_720P_60: + #if defined(Platform_dm6467t) + case VideoStd_1080P_60: + #endif return 16667; #if defined(Platform_omap3530) @@ -949,6 +961,10 @@ static int gst_tidmaivideosink_convert_attrs(int attr, return VideoStd_1080P_25; else if (!strcmp(sink->videoStd, "1080P_24")) return VideoStd_1080P_24; + #if defined(Platform_dm6467t) + else if (!strcmp(sink->videoStd, "1080P_60")) + return VideoStd_1080P_60; + #endif #if defined(Platform_omap3530) else if (!strcmp(sink->videoStd, "VGA")) return VideoStd_VGA; @@ -958,7 +974,7 @@ static int gst_tidmaivideosink_convert_attrs(int attr, "Please choose from:\n" "\tAUTO (if supported), CIF, SIF_NTSC, SIF_PAL, VGA, D1_NTSC\n" "\tD1_PAL, 480P, 576P, 720P_60, 720P_50, 1080I_30, 1080I_25\n" - "\t1080P_30, 1080P_25, 1080P_24\n", sink->videoStd); + "\t1080P_30, 1080P_60, 1080P_25, 1080P_24\n", sink->videoStd); return -1; } break; @@ -1307,14 +1323,13 @@ static gboolean gst_tidmaivideosink_process_caps(GstBaseSink * bsink, case GST_MAKE_FOURCC('U', 'Y', 'V', 'Y'): inBufColorSpace = ColorSpace_UYVY; break; + case GST_MAKE_FOURCC('N', 'V', '1', '6'): case GST_MAKE_FOURCC('Y', '8', 'C', '8'): inBufColorSpace = ColorSpace_YUV422PSEMI; break; - #if defined(Platform_dm365) case GST_MAKE_FOURCC('N', 'V', '1', '2'): inBufColorSpace = ColorSpace_YUV420PSEMI; break; - #endif default: GST_ERROR("unsupported fourcc\n"); return FALSE; diff --git a/src/gsttividdec2.c b/src/gsttividdec2.c index 0804065..79b28a5 100644 --- a/src/gsttividdec2.c +++ b/src/gsttividdec2.c @@ -674,16 +674,8 @@ static gboolean gst_tividdec2_set_source_caps( given buffer */ BufferGfx_getDimensions(hBuf, &dim); -#if !defined(Platform_dm365) - caps = - gst_caps_new_simple("video/x-raw-yuv", - "format", GST_TYPE_FOURCC, GST_MAKE_FOURCC('U','Y','V','Y'), - "framerate", GST_TYPE_FRACTION, viddec2->framerateNum, - viddec2->framerateDen, - "width", G_TYPE_INT, dim.width, - "height", G_TYPE_INT, dim.height, - NULL); -#else +#if defined(Platform_dm365) || defined(Platform_dm6467) || \ + defined(Platform_dm6467t) caps = gst_caps_new_simple("video/x-raw-yuv", "format", GST_TYPE_FOURCC, GST_MAKE_FOURCC('N','V','1','2'), @@ -692,6 +684,15 @@ static gboolean gst_tividdec2_set_source_caps( "width", G_TYPE_INT, dim.width, "height", G_TYPE_INT, dim.height, NULL); +#else + caps = + gst_caps_new_simple("video/x-raw-yuv", + "format", GST_TYPE_FOURCC, GST_MAKE_FOURCC('U','Y','V','Y'), + "framerate", GST_TYPE_FRACTION, viddec2->framerateNum, + viddec2->framerateDen, + "width", G_TYPE_INT, dim.width, + "height", G_TYPE_INT, dim.height, + NULL); #endif /* Set the source pad caps */ @@ -1227,29 +1228,35 @@ static gboolean gst_tividdec2_codec_start (GstTIViddec2 *viddec2) /* Set up codec parameters depending on device */ switch(device) { - case Cpu_Device_DM6467: - params.forceChromaFormat = XDM_YUV_420P; - params.maxWidth = VideoStd_1080I_WIDTH; - params.maxHeight = VideoStd_1080I_HEIGHT + 8; - colorSpace = ColorSpace_YUV420PSEMI; - defaultNumBufs = 5; - break; -#if defined(Platform_dm365) - case Cpu_Device_DM365: - params.forceChromaFormat = XDM_YUV_420SP; - params.maxWidth = VideoStd_720P_WIDTH; - params.maxHeight = VideoStd_720P_HEIGHT; - colorSpace = ColorSpace_YUV420PSEMI; - defaultNumBufs = 5; - break; -#endif - default: - params.forceChromaFormat = XDM_YUV_422ILE; - params.maxWidth = VideoStd_D1_WIDTH; - params.maxHeight = VideoStd_D1_PAL_HEIGHT; - colorSpace = ColorSpace_UYVY; - defaultNumBufs = 3; - break; + case Cpu_Device_DM6467: + #if defined(Platform_dm6467t) + params.forceChromaFormat = XDM_YUV_420SP; + params.maxFrameRate = 60000; + params.maxBitRate = 30000000; + #else + params.forceChromaFormat = XDM_YUV_420P; + #endif + params.maxWidth = VideoStd_1080I_WIDTH; + params.maxHeight = VideoStd_1080I_HEIGHT + 8; + colorSpace = ColorSpace_YUV420PSEMI; + defaultNumBufs = 5; + break; + #if defined(Platform_dm365) + case Cpu_Device_DM365: + params.forceChromaFormat = XDM_YUV_420SP; + params.maxWidth = VideoStd_720P_WIDTH; + params.maxHeight = VideoStd_720P_HEIGHT; + colorSpace = ColorSpace_YUV420PSEMI; + defaultNumBufs = 4; + break; + #endif + default: + params.forceChromaFormat = XDM_YUV_422ILE; + params.maxWidth = VideoStd_D1_WIDTH; + params.maxHeight = VideoStd_D1_PAL_HEIGHT; + colorSpace = ColorSpace_UYVY; + defaultNumBufs = 3; + break; } GST_LOG("opening video decoder \"%s\"\n", viddec2->codecName); diff --git a/src/gsttividenc1.c b/src/gsttividenc1.c index f9c6f1a..2e1fb31 100644 --- a/src/gsttividenc1.c +++ b/src/gsttividenc1.c @@ -133,6 +133,11 @@ static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE( "framerate=(fraction)[ 0, MAX ], " "width=(int)[ 1, MAX ], " "height=(int)[ 1, MAX ];" + "video/x-raw-yuv, " /* NV16 - YUV422 semi planar */ + "format=(fourcc)NV16, " + "framerate=(fraction)[ 0, MAX ], " + "width=(int)[ 1, MAX ], " + "height=(int)[ 1, MAX ];" "video/x-raw-yuv, " /* NV12 - YUV420 semi planar */ "format=(fourcc)NV12, " "framerate=(fraction)[ 0, MAX ], " @@ -290,7 +295,7 @@ static void gst_tividenc1_class_init(GstTIVidenc1Class *klass) g_object_class_install_property(gobject_class, PROP_IN_COLORSPACE, g_param_spec_string("iColorSpace", "Input colorspace", - "Input color space (UYVY, Y8C8 or NV12)", + "Input color space (UYVY, Y8C8, NV16 or NV12)", "unspecified", G_PARAM_READWRITE)); g_object_class_install_property(gobject_class, PROP_BITRATE, @@ -456,6 +461,8 @@ static ColorSpace_Type gst_tividenc1_find_colorSpace (const gchar *colorSpace) { if (!strcmp(colorSpace, "UYVY")) return ColorSpace_UYVY; + else if (!strcmp(colorSpace, "NV16")) + return ColorSpace_YUV422PSEMI; else if (!strcmp(colorSpace, "Y8C8")) return ColorSpace_YUV422PSEMI; else if (!strcmp(colorSpace, "NV12")) @@ -665,6 +672,7 @@ static gboolean gst_tividenc1_set_sink_caps(GstPad *pad, GstCaps *caps) videnc1->colorSpace = ColorSpace_UYVY; break; + case GST_MAKE_FOURCC('N', 'V', '1', '6'): case GST_MAKE_FOURCC('Y', '8', 'C', '8'): videnc1->colorSpace = ColorSpace_YUV422PSEMI; break; diff --git a/src/gsttividresize.c b/src/gsttividresize.c index 5757705..c200787 100644 --- a/src/gsttividresize.c +++ b/src/gsttividresize.c @@ -90,6 +90,7 @@ static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE( GST_PAD_ALWAYS, GST_STATIC_CAPS ( GST_VIDEO_CAPS_YUV("UYVY")";" + GST_VIDEO_CAPS_YUV("NV16")";" GST_VIDEO_CAPS_YUV("Y8C8")";" GST_VIDEO_CAPS_YUV("NV12") ) @@ -101,6 +102,7 @@ static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE( GST_PAD_ALWAYS, GST_STATIC_CAPS ( GST_VIDEO_CAPS_YUV("UYVY")";" + GST_VIDEO_CAPS_YUV("NV16")";" GST_VIDEO_CAPS_YUV("Y8C8")";" GST_VIDEO_CAPS_YUV("NV12") ) @@ -583,6 +585,7 @@ static GstCaps * gst_tividresize_transform_caps (GstBaseTransform *trans, int i; static const guint32 supported_fmt[] = { GST_MAKE_FOURCC('U','Y','V','Y'), + GST_MAKE_FOURCC('N','V','1','6'), GST_MAKE_FOURCC('Y','8','C','8'), GST_MAKE_FOURCC('N','V','1','2'), }; @@ -649,6 +652,7 @@ ColorSpace_Type gst_tividresize_get_colorSpace (guint32 fourcc) switch (fourcc) { case GST_MAKE_FOURCC('U', 'Y', 'V', 'Y'): return ColorSpace_UYVY; + case GST_MAKE_FOURCC('N', 'V', '1', '6'): case GST_MAKE_FOURCC('Y', '8', 'C', '8'): return ColorSpace_YUV422PSEMI; case GST_MAKE_FOURCC('N', 'V', '1', '2'): -- 1.5.4.3