Hi ,
If pasted code is not viewable ,attahed file can be used.

Thank's,
Ashish


On Sun, 14 Sep 2008 ashish pareek wrote :
>  Hi All ,
>I am trying to run an application tht convert Raw image to Yuv .And finally 
>convert it to jpg format by using jpegenc . I am using mt9t001 image sensor 
>type .
>
>While running the application i got an error :-
>Failed to get a pool fillting a size 3145728.
>While debugging i found tht
>encodedBuf = (XDAS_Int8 *)Memory_contigAlloc(encodedBufSize, BUFALIGN);
>is returning Null .
>I am putting my test file here .Could any one help me ?
>
>Ashish
>/* *  ======== jpegenc.c ======== * *  A simple example of encoding an image 
>using the JPEG encoder. *///typedef int    bool;#include <xdc/std.h>#include 
><ti/sdo/ce/Engine.h>#include <ti/sdo/ce/osal/Memory.h>#include 
><ti/sdo/ce/image1/imgenc1.h>#include <ti/sdo/ce/trace/gt.h>#include 
><ti/sdo/codecs/jpegenc/dm355/ijpegenc.h>#include <stdio.h>#include 
><stdlib.h>#include <string.h>#include <unistd.h>#include <asm/types.h>#include 
><linux/videodev.h>#include <media/davinci/davinci_vpfe.h>#include 
><media/davinci/ccdc_dm355.h>#include <asm/arch/dm355_ipipe.h>#include 
>"ipipe_example.h"#include "ipipe_config.h"#include "mt9t001_capture.h"/* *  
>The parameters for the encoding process. These can be changed to try *  
>different image sizes and JPEG features. */#define SCANS          4#define 
>QVALUE         73/* this example only supports YUV422 interleaved */#define 
>CHROMAFORMAT   XDM_YUV_422ILE//#define CHROMAFORMAT   XDM_YUV_422P/* Not a 
>cached system, no buffer alignment constraints */#define BUFALIGN 
>Memory_DEFAULTALIGNMENTstatic XDAS_Int8 *inBuf;static XDAS_Int8 
>*encodedBuf;static XDAS_Int32 inBufSize;static XDAS_Int32 
>encodedBufSize;static String progName     = "app";static String encoderName  = 
>"jpegenc";static String engineName   = "image";static String image_base_name = 
>"image";extern GT_Mask curMask;static Int32 encode(IMGENC1_Handle enc, 
>XDAS_Int8 * in, XDAS_Int8 * out );void save( void * data, int len, char * 
>basename, char * ext );/* *  ======== smain ======== */Int smain(Int argc, 
>String argv[]){    Engine_Handle ce = NULL;    IMGENC1_Handle enc = NULL;    
>IMGENC1_Params encParams;    IMGENC1_DynamicParams dynParams;    
>IMGENC1_Status imgStatus;    IJPEGENC_DynamicParams      extDynParams;    char 
>outFile[80];    int capbuf_phyaddr;    struct buffer * capbuf;    struct 
>buffer ipipebuffer;    int length;    // Setup the capture device    
>InitCaptureDevice(CAP_FORMAT, CAP_WIDTH, CAP_HEIGHT);    // Initialize the 
>IPIPE to just convert from bayer to YCC    InitIpipe( RAW2YUV          
>,CAP_WIDTH          ,CAP_HEIGHT          ,CAP_WIDTH          ,CAP_HEIGHT       
>   ,&ipipebuffer    );    // Create a name for the output file    sprintf( 
>outFile, "%s_%04d", image_base_name, 0 );    GT_0trace(curMask, GT_1CLASS, 
>"Application started.\n");    /* open the Codec Engine */    if ((ce = 
>Engine_open(engineName, NULL, NULL)) == NULL) {        fprintf(stderr, "ERROR: 
>can't open engine %s\n", engineName);        goto end;    }    printf("Engine 
>Successfully Opend :\n");    /* allocate and initialize image encoder on the 
>engine */    encParams.size = sizeof(IMGENC1_Params);    encParams.maxWidth = 
>CAP_WIDTH;    encParams.maxHeight = CAP_HEIGHT;    encParams.maxScans = SCANS; 
>   encParams.dataEndianness = XDM_DEFAULT;    encParams.forceChromaFormat = 
>CHROMAFORMAT;    enc = IMGENC1_create(ce, encoderName, &encParams);    if (enc 
>== NULL) {        fprintf(stderr, "%s: error: can't open codec %s\n",          
>  progName, encoderName);        goto end;    }    printf("Codec Successfully 
>Opend :\n");    /* set the parameters for encoding */    dynParams.size = 
>sizeof(IMGENC1_DynamicParams);    dynParams.numAU = XDM_DEFAULT;    
>dynParams.inputChromaFormat = CHROMAFORMAT;    dynParams.inputHeight = 
>CAP_HEIGHT;    dynParams.inputWidth = CAP_WIDTH;    dynParams.captureWidth = 
>0;    dynParams.generateHeader = XDM_ENCODE_AU;    dynParams.qValue = 
>QVALUE;#if 0    /* set the extended parameters for encoding */    
>extDynParams.imgencDynamicParams = dynParams;    extDynParams.rstInterval = 
>XDM_DEFAULT;    extDynParams.disableEOI = XDM_DEFAULT;    
>extDynParams.rotation = 90;    extDynParams.customQ = NULL;    imgStatus.size 
>= sizeof(imgStatus);    if (IMGENC1_control(enc, XDM_SETPARAMS, 
>(IMGENC1_DynamicParams *)&extDynParams, &imgStatus) ==        XDM_EFAIL) {     
>   fprintf(stderr, "%s: error: could not set PARAMS: 0x%x\n", progName,        
>    (unsigned int)imgStatus.extendedError);        goto end;    }#else    
>imgStatus.size = sizeof(imgStatus);    if (IMGENC1_control(enc, XDM_SETPARAMS, 
>&dynParams, &imgStatus) ==        XDM_EFAIL) {        fprintf(stderr, "%s: 
>error: could not set PARAMS: 0x%x\n", progName,            (unsigned 
>int)imgStatus.extendedError);        goto end;    }    printf("Engine  PARAMS 
>Successfully Set :\n");#endif    /* ask the codec for buffer sizes - these are 
>typically conservative */    if (IMGENC1_control(enc, XDM_GETBUFINFO, 
>&dynParams, &imgStatus) ==        XDM_EFAIL) {        fprintf(stderr, "%s: 
>error: could not get BUFINFO: 0x%x\n", progName,            (unsigned 
>int)imgStatus.extendedError);        goto end;    }    printf("BUFINFO steps 
>done :\n");            /* allocate input, encoded buffers based on GETBUFINFO 
>*/    inBufSize = imgStatus.bufInfo.minInBufSize[0];    inBuf = (XDAS_Int8 
>*)Memory_contigAlloc(inBufSize, BUFALIGN);    if (inBuf==NULL)        
>printf("Memory_ContigAlloc for inbuf Not done :\n");        encodedBufSize = 
>imgStatus.bufInfo.minOutBufSize[0];    encodedBuf = (XDAS_Int8 
>*)Memory_contigAlloc(encodedBufSize, BUFALIGN);    if(encodedBuf == NULL)      
>  printf("Memory_ContigAlloc for encodeBuf Not done :\n");                if 
>((inBuf == NULL) || (encodedBuf == NULL)) {        printf("Memory_ContigAlloc 
>Not done :\n");        goto end;    }    // Start the video stream    
>StartStreaming();    // Capture a frame    capbuf = 
>CaptureFrame(&capbuf_phyaddr);    // Stop the video stream    StopStreaming(); 
>   sleep(1);    // Convert the frame from bayer to YCC    DoIPIPING( RAW2YUV   
>       ,CAP_WIDTH          ,CAP_HEIGHT          ,CAP_WIDTH          
>,CAP_HEIGHT          ,capbuf_phyaddr    );    /* Copy the data to where the 
>encoder can access it */    memcpy( inBuf, ipipebuffer.start, inBufSize );    
>/* use engine to encode the data */    length = encode(enc, inBuf, encodedBuf 
>);    save( capbuf->start, CAP_HEIGHT * CAP_WIDTH * sizeof( unsigned short ), 
>outFile, "raw" );    save( ipipebuffer.start, CAP_HEIGHT * CAP_WIDTH * sizeof( 
>unsigned short ), outFile, "ycc" );    save( encodedBuf, length, outFile, 
>"jpg" );end:    /* free buffers */    if (encodedBuf) {        
>Memory_contigFree(encodedBuf, encodedBufSize);    }    if (inBuf) {        
>Memory_contigFree(inBuf, inBufSize);    }    /* teardown the codec */    if 
>(enc) {        IMGENC1_delete(enc);    }    /* close the engine */    if (ce) 
>{        Engine_close(ce);    }    CloseCaptureDevice();    
>CloseIpipe(&ipipebuffer);    return (0);}/* *  ======== encode ======== 
>*/static Int32 encode(IMGENC1_Handle enc, XDAS_Int8 * in, XDAS_Int8 * out ){   
> Int32                        status;    IMGENC1_InArgs              
>encInArgs;    IMGENC1_OutArgs             encOutArgs;    IMGENC1_DynamicParams 
>      encDynParams;    XDM1_BufDesc                inBufDesc;    XDM1_BufDesc  
>              encodedBufDesc;    /* initialize buffer descriptors that hold 
>input and output buffers */    inBufDesc.numBufs = 1;    
>inBufDesc.descs[0].bufSize = inBufSize;    inBufDesc.descs[0].buf = in;    
>encodedBufDesc.numBufs = 1;    encodedBufDesc.descs[0].bufSize = 
>encodedBufSize;    encodedBufDesc.descs[0].buf = out;    /* the size field of 
>Args and Params structs must be initialized */    encInArgs.size    = 
>sizeof(encInArgs);    encOutArgs.size   = sizeof(encOutArgs);    
>encDynParams.size = sizeof(encDynParams);    /* perform the image (JPEG) 
>encoding */    status = IMGENC1_process( enc                 ,&inBufDesc       
>          ,&encodedBufDesc                 ,&encInArgs                 
>,&encOutArgs    );    if (status == IMGENC1_EOK) {        GT_2trace(curMask, 
>GT_2CLASS,                 "Encoder process returned - 0x%x, %d bytes\n", 
>status,                  encOutArgs.bytesGenerated                  );    }    
>else {        GT_2trace(curMask, GT_7CLASS,                  "Encoder frame 
>processing FAILED, status = 0x%x, "                  "extendedError = 0x%x\n", 
>status,                  encOutArgs.extendedError);    }    return 
>encOutArgs.bytesGenerated;}void save( void * data, int len, char * basename, 
>char * ext ){    char name[80];    FILE * out;    int ret;    sprintf( name, 
>"%s.%s", basename, ext );    if ((out = fopen(name, "wb")) == NULL) {        
>fprintf(stderr, "ERROR: can't write to file %s\n", name);    } else {        
>ret = fwrite(data, 1, len, out);        if ( ret != len ) {            
>fprintf( stderr                    ,"ERROR: '%s' only wrote %d bytes, expected 
>%d bytes\n"                    ,name                    ,ret                   
> ,len            );        } else {            fclose( out );        }    }}
>
>
>
>
>
>
>
>
>
>_______________________________________________
>Davinci-linux-open-source mailing list
>[email protected]
>http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source
/*
 *  Copyright 2008 by Texas Instruments Incorporated.
 *  All rights reserved. Property of Texas Instruments Incorporated.
 *  Restricted rights to use, duplicate or disclose this code are
 *  granted through contract.
 *
 *  @(#) imports/build 1_00_00_43 040908 (linuxdemos-a44x)
 */
/*
 *  ======== jpegenc.c ========
 *
 *  A simple example of encoding an image using the JPEG encoder.
 */

typedef int	bool;

#include <xdc/std.h>
#include <ti/sdo/ce/Engine.h>
#include <ti/sdo/ce/osal/Memory.h>
#include <ti/sdo/ce/image1/imgenc1.h>
#include <ti/sdo/ce/trace/gt.h>
#include <ti/sdo/codecs/jpegenc/dm355/ijpegenc.h>

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

#include <asm/types.h>
#include <linux/videodev.h>
#include <media/davinci/davinci_vpfe.h>
#include <media/davinci/ccdc_dm355.h>
#include <asm/arch/dm355_ipipe.h>

#include "capture_config.h"
#include "ipipe_config.h"
#include "ov363x_capture.h"

/*
 *  The parameters for the encoding process. These can be changed to try
 *  different image sizes and JPEG features.
 */
#define SCANS          4
#define QVALUE         73

/* this example only supports YUV422 interleaved */
#define CHROMAFORMAT   XDM_YUV_422ILE
//#define CHROMAFORMAT   XDM_YUV_422P

/* Not a cached system, no buffer alignment constraints */
#define BUFALIGN Memory_DEFAULTALIGNMENT

static XDAS_Int8 *inBuf;
static XDAS_Int8 *encodedBuf;
static XDAS_Int32 inBufSize;
static XDAS_Int32 encodedBufSize;

static String progName     = "app";
static String encoderName  = "jpegenc";
static String engineName   = "image";

static String image_base_name = "image";

extern GT_Mask curMask;

static Int32 encode(IMGENC1_Handle enc, XDAS_Int8 * in, XDAS_Int8 * out );
void save( void * data, int len, char * basename, char * ext );

/*
 *  ======== smain ========
 */
Int smain(Int argc, String argv[])
{
    Engine_Handle ce = NULL;
    IMGENC1_Handle enc = NULL;
    IMGENC1_Params encParams;
    IMGENC1_DynamicParams dynParams;
    IMGENC1_Status imgStatus;
    IJPEGENC_DynamicParams      extDynParams;

    char outFile[80];

    int capbuf_phyaddr;
    struct buffer * capbuf;
    struct buffer ipipebuffer;
	int length;

    // Setup the capture device
    InitCaptureDevice(CAP_FORMAT, CAP_WIDTH, CAP_HEIGHT);

    // Initialize the IPIPE to just convert from bayer to YCC
    InitIpipe( RAW2YUV
	      ,CAP_WIDTH
	      ,CAP_HEIGHT
	      ,CAP_WIDTH
	      ,CAP_HEIGHT
	      ,&ipipebuffer
    );

    // Create a name for the output file
    sprintf( outFile, "%s_%04d", image_base_name, 0 );

    GT_0trace(curMask, GT_1CLASS, "Application started.\n");

    /* open the Codec Engine */
    if ((ce = Engine_open(engineName, NULL, NULL)) == NULL) {
        fprintf(stderr, "ERROR: can't open engine %s\n", engineName);
        goto end;
    }

    /* allocate and initialize image encoder on the engine */
    encParams.size = sizeof(IMGENC1_Params);
    encParams.maxWidth = CAP_WIDTH;
    encParams.maxHeight = CAP_HEIGHT;
    encParams.maxScans = SCANS;
    encParams.dataEndianness = XDM_DEFAULT;
    encParams.forceChromaFormat = CHROMAFORMAT;
    enc = IMGENC1_create(ce, encoderName, &encParams);
    if (enc == NULL) {
        fprintf(stderr, "%s: error: can't open codec %s\n",
            progName, encoderName);
        goto end;
    }

    /* set the parameters for encoding */
    dynParams.size = sizeof(IMGENC1_DynamicParams);
    dynParams.numAU = XDM_DEFAULT;
    dynParams.inputChromaFormat = CHROMAFORMAT;
    dynParams.inputHeight = CAP_HEIGHT;
    dynParams.inputWidth = CAP_WIDTH;
    dynParams.captureWidth = 0;
    dynParams.generateHeader = XDM_ENCODE_AU;
    dynParams.qValue = QVALUE;
#if 0
	/* set the extended parameters for encoding */
	extDynParams.imgencDynamicParams = dynParams;
	extDynParams.rstInterval = XDM_DEFAULT;
	extDynParams.disableEOI = XDM_DEFAULT;
	extDynParams.rotation = 90;
	extDynParams.customQ = NULL;

	imgStatus.size = sizeof(imgStatus);
    if (IMGENC1_control(enc, XDM_SETPARAMS, (IMGENC1_DynamicParams *)&extDynParams, &imgStatus) ==
        XDM_EFAIL) {

        fprintf(stderr, "%s: error: could not set PARAMS: 0x%x\n", progName,
            (unsigned int)imgStatus.extendedError);
        goto end;
    }
#else
	imgStatus.size = sizeof(imgStatus);
    if (IMGENC1_control(enc, XDM_SETPARAMS, &dynParams, &imgStatus) ==
        XDM_EFAIL) {

        fprintf(stderr, "%s: error: could not set PARAMS: 0x%x\n", progName,
            (unsigned int)imgStatus.extendedError);
        goto end;
    }
#endif
    /* ask the codec for buffer sizes - these are typically conservative */
    if (IMGENC1_control(enc, XDM_GETBUFINFO, &dynParams, &imgStatus) ==
        XDM_EFAIL) {

        fprintf(stderr, "%s: error: could not get BUFINFO: 0x%x\n", progName,
            (unsigned int)imgStatus.extendedError);
        goto end;
    }
    
    /* allocate input, encoded buffers based on GETBUFINFO */
    inBufSize = imgStatus.bufInfo.minInBufSize[0];
    inBuf = (XDAS_Int8 *)Memory_contigAlloc(inBufSize, BUFALIGN);

    encodedBufSize = imgStatus.bufInfo.minOutBufSize[0];
    encodedBuf = (XDAS_Int8 *)Memory_contigAlloc(encodedBufSize, BUFALIGN);

    if ((inBuf == NULL) || (encodedBuf == NULL)) {
        goto end;
    }

    // Start the video stream
    StartStreaming();

    // Capture a frame
    capbuf = CaptureFrame(&capbuf_phyaddr);

    // Stop the video stream
    StopStreaming();

	sleep(1);

    // Convert the frame from bayer to YCC
    DoIPIPING( RAW2YUV
	      ,CAP_WIDTH
	      ,CAP_HEIGHT
	      ,CAP_WIDTH
	      ,CAP_HEIGHT
	      ,capbuf_phyaddr
    );

	/* Copy the data to where the encoder can access it */
	memcpy( inBuf, ipipebuffer.start, inBufSize );

    /* use engine to encode the data */
    length = encode(enc, inBuf, encodedBuf );

	save( capbuf->start, CAP_HEIGHT * CAP_WIDTH * sizeof( unsigned short ), outFile, "raw" );
	save( ipipebuffer.start, CAP_HEIGHT * CAP_WIDTH * sizeof( unsigned short ), outFile, "ycc" );
	save( encodedBuf, length, outFile, "jpg" );

end:
    /* free buffers */
    if (encodedBuf) {
        Memory_contigFree(encodedBuf, encodedBufSize);
    }

    if (inBuf) {
        Memory_contigFree(inBuf, inBufSize);
    }

    /* teardown the codec */
    if (enc) {
        IMGENC1_delete(enc);
    }

    /* close the engine */
    if (ce) {
        Engine_close(ce);
    }

    CloseCaptureDevice();

    CloseIpipe(&ipipebuffer);

    return (0);
}

/*
 *  ======== encode ========
 */
static Int32 encode(IMGENC1_Handle enc, XDAS_Int8 * in, XDAS_Int8 * out )
{
	Int32						status;
    IMGENC1_InArgs              encInArgs;
    IMGENC1_OutArgs             encOutArgs;
    IMGENC1_DynamicParams       encDynParams;
    XDM1_BufDesc                inBufDesc;
    XDM1_BufDesc                encodedBufDesc;

    /* initialize buffer descriptors that hold input and output buffers */
    inBufDesc.numBufs = 1;
    inBufDesc.descs[0].bufSize = inBufSize;
    inBufDesc.descs[0].buf = in;

    encodedBufDesc.numBufs = 1;
    encodedBufDesc.descs[0].bufSize = encodedBufSize;
    encodedBufDesc.descs[0].buf = out;

    /* the size field of Args and Params structs must be initialized */
    encInArgs.size    = sizeof(encInArgs);
    encOutArgs.size   = sizeof(encOutArgs);
    encDynParams.size = sizeof(encDynParams);

    /* perform the image (JPEG) encoding */
    status = IMGENC1_process( enc
			     ,&inBufDesc
			     ,&encodedBufDesc
			     ,&encInArgs
			     ,&encOutArgs
    );

    if (status == IMGENC1_EOK) {
        GT_2trace(curMask, GT_2CLASS,
                 "Encoder process returned - 0x%x, %d bytes\n", status,
                  encOutArgs.bytesGenerated
				  );
    }
    else {
        GT_2trace(curMask, GT_7CLASS,
                  "Encoder frame processing FAILED, status = 0x%x, "
                  "extendedError = 0x%x\n", status,
                  encOutArgs.extendedError);
    }
	return encOutArgs.bytesGenerated;
}

void save( void * data, int len, char * basename, char * ext )
{
	char name[80];
	FILE * out;
	int ret;

	sprintf( name, "%s.%s", basename, ext );

	if ((out = fopen(name, "wb")) == NULL) {
		fprintf(stderr, "ERROR: can't write to file %s\n", name);
	} else {
		ret = fwrite(data, 1, len, out);
		if ( ret != len ) {
			fprintf( stderr
					,"ERROR: '%s' only wrote %d bytes, expected %d bytes\n"
					,name
					,ret
					,len
			);
		} else {
			fclose( out );
		}
	}
}
_______________________________________________
Davinci-linux-open-source mailing list
[email protected]
http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source

Reply via email to