adiRecordMMToMemory

Initiates multimedia recording to a memory-resident buffer of a specified size and returns to the application. The ADI service records data into the buffer until one of the terminating conditions described in the ADIEVN_RECORDING_DONE event occurs.

Parameters to control silence detection are provided and apply if silence detection is configured.

Prototype

DWORD adiRecordMMToMemory ( CTAHD ctahd, unsigned encoding, void *buffer, unsigned bufsize, MSPHD *video_ephd, MSPHD *audio_ephd, ADI_MM_RECORD_PARMS *parms)

Argument

Description

ctahd

Context handle returned by ctaCreateContext or ctaAttachContext.

encoding

Encoding type. See the adidef.h header file for a complete list of ADI_ENCODING_xxx values. See Multimedia encoding types for the RTP compressed format encoding types.

buffer

Pointer to the media data buffer.

bufsize

Number of bytes pointed to by buffer.

video_ephd

Pointer to the CG board video filter endpoint handle obtained with mspGetFilterHandle. The application uses this endpoint handle to connect the ADI channel on the board to the RTP endpoint and to synchronize the beginning and ending of the audio and video record.

audio_ephd

Pointer to the CG board audio filter endpoint handle obtained with mspGetFilterHandle. The application uses this endpoint handle to connect the ADI channel on the board to the RTP endpoint and to synchronize the beginning and ending of the audio and video record.

parms

Pointer to the ADI_MM_RECORD_PARMS structure that contains record parameters.

Return values

Return value

Description

SUCCESS

 

ADIERR_INVALID_CALL_STATE

Function not valid in the current call state.

CTAERR_BAD_ARGUMENT

Invalid encoding or NULL buffer.

CTAERR_FUNCTION_ACTIVE

Function already started.

CTAERR_INVALID_CTAHD

Context handle is invalid.

CTAERR_INVALID_STATE

Function not valid in the current port state.

CTAERR_OUTPUT_ACTIVE

Record failed because there is another active output function.

CTAERR_RESOURCE_CONFLICT

Silence detector is in use by adiStartEnergyDetector.

CTAERR_SVR_COMM

Play or record communication error.

Events

The ADIEVN_RECORDING_DONE event is generated when the recording operation terminates. The event size field contains the total number of bytes written to the buffer. The value field contains one of the following termination reasons or error codes:

Reason

Description

CTA_REASON_FINISHED

Buffer is filled.

CTA_REASON_MAXTIME_AUDIO

Maximum recording time reached. Applicable for pass-through audio encoding types only.

CTA_REASON_MAXTIME_VIDEO

Maximum recording time reached. Applicable for pass-through video encoding types only.

CTA_REASON_NATIVE_COMPANION_RECORD_STOPPED

Companion pass-through record channel stopped. For example, there is a pass-through audio channel and a pass-through video channel that are companion channels because they have matching video_ephd and audio_ephd input parameters. If one of the two channels stops recording for any reason, the companion pass-through channel is also stopped with this reason code.

CTA_REASON_NO_VIDEO

No video detected.

CTA_REASON_NO_VOICE

No voice detected.

CTA_REASON_RELEASED

Call terminated.

CTA_REASON_STOPPED

Stopped by application request.

CTA_REASON_VIDEO_END

Video packets not detected for specified timeout period. Applicable for pass-through video encoding types only.

CTA_REASON_VOICE_END

User stopped speaking.

CTAERR_FUNCTION_NOT_AVAIL

Required DSP file not loaded on the board.

CTAERR_xxx or ADIERR_xxx

Record failed.

See also

adiPlayMMFromMemory

Example

if ((ret = SetRecordParms(VideoCtx[i].ctahd, &recParms)) != SUCCESS)
{
    printf("Failed to setup Record Parameters\n");
    exit(1);
}

ret = adiRecordMMToMemory(VideoCtx[i].ctahd,
mmParm.ADIvidEncoder,      // Encoding
VideoCtx[i].data_buffer,   // Buffer to receive recorded video
mmParm.video_buffer_size,  // Buffer size
videoEP_filterhd,          // Video EndPoint Filter Handle
audioEP_filterhd,          // Audio EndPoint Filter Handle
&recParms);                // Record parameters

if (ret != SUCCESS)
{
    printf("Failed to Record to memory, %x\n", ret);
    exit(1);
}