Add get_mode CTL for the encoder and decoder.

This commit is contained in:
Gregory Maxwell 2009-06-03 13:37:45 -04:00
parent 9a44cde205
commit f3b44ef42c
2 changed files with 20 additions and 2 deletions

View file

@ -918,6 +918,14 @@ int celt_encoder_ctl(CELTEncoder * restrict st, int request, ...)
va_start(ap, request); va_start(ap, request);
switch (request) switch (request)
{ {
case CELT_GET_MODE_REQUEST:
{
const CELTMode ** value = va_arg(ap, const CELTMode**);
if (value==0)
goto bad_arg;
*value=st->mode;
}
break;
case CELT_SET_COMPLEXITY_REQUEST: case CELT_SET_COMPLEXITY_REQUEST:
{ {
int value = va_arg(ap, celt_int32_t); int value = va_arg(ap, celt_int32_t);
@ -1351,6 +1359,14 @@ int celt_decoder_ctl(CELTDecoder * restrict st, int request, ...)
va_start(ap, request); va_start(ap, request);
switch (request) switch (request)
{ {
case CELT_GET_MODE_REQUEST:
{
const CELTMode ** value = va_arg(ap, const CELTMode**);
if (value==0)
goto bad_arg;
*value=st->mode;
}
break;
case CELT_RESET_STATE: case CELT_RESET_STATE:
{ {
const CELTMode *mode = st->mode; const CELTMode *mode = st->mode;
@ -1369,11 +1385,9 @@ int celt_decoder_ctl(CELTDecoder * restrict st, int request, ...)
} }
va_end(ap); va_end(ap);
return CELT_OK; return CELT_OK;
#if 0 /* Put this back in if you ever need "bad_arg" */
bad_arg: bad_arg:
va_end(ap); va_end(ap);
return CELT_BAD_ARG; return CELT_BAD_ARG;
#endif
bad_request: bad_request:
va_end(ap); va_end(ap);
return CELT_UNIMPLEMENTED; return CELT_UNIMPLEMENTED;

View file

@ -52,6 +52,7 @@ extern "C" {
#endif #endif
#define _celt_check_int(x) (((void)((x) == (celt_int32_t)0)), (celt_int32_t)(x)) #define _celt_check_int(x) (((void)((x) == (celt_int32_t)0)), (celt_int32_t)(x))
#define _celt_check_mode_ptr_ptr(ptr) ((ptr) + ((ptr) - (CELTMode**)(ptr)))
/* Error codes */ /* Error codes */
/** No error */ /** No error */
@ -68,6 +69,9 @@ extern "C" {
#define CELT_UNIMPLEMENTED -5 #define CELT_UNIMPLEMENTED -5
/* Requests */ /* Requests */
#define CELT_GET_MODE_REQUEST 1
/** Get the CELTMode used by an encoder or decoder */
#define CELT_GET_MODE(x) CELT_GET_MODE_REQUEST, _celt_check_mode_ptr_ptr(x)
#define CELT_SET_COMPLEXITY_REQUEST 2 #define CELT_SET_COMPLEXITY_REQUEST 2
/** Controls the complexity from 0-10 (int) */ /** Controls the complexity from 0-10 (int) */
#define CELT_SET_COMPLEXITY(x) CELT_SET_COMPLEXITY_REQUEST, _celt_check_int(x) #define CELT_SET_COMPLEXITY(x) CELT_SET_COMPLEXITY_REQUEST, _celt_check_int(x)