diff --git a/include/sframe-api.h b/include/sframe-api.h index 8c26257fb64..507f806ab4c 100644 --- a/include/sframe-api.h +++ b/include/sframe-api.h @@ -230,6 +230,12 @@ extern bool sframe_fre_get_ra_mangled_p (sframe_decoder_ctx *dctx, sframe_frame_row_entry *fre, int *errp); +/* Get whether the RA is undefined (i.e. outermost frame). */ + +bool +sframe_fre_get_ra_undefined_p (const sframe_decoder_ctx *dctx ATTRIBUTE_UNUSED, + const sframe_frame_row_entry *fre, int *errp); + /* The SFrame Encoder. */ /* Create an encoder context with the given SFrame format version VER, FLAGS diff --git a/libsframe/libsframe.ver b/libsframe/libsframe.ver index 8cc80da2f26..4286a72b93b 100644 --- a/libsframe/libsframe.ver +++ b/libsframe/libsframe.ver @@ -41,3 +41,8 @@ LIBSFRAME_2.0 { local: *; } LIBSFRAME_0.0; + +LIBSFRAME_2.1 { + global: + sframe_fre_get_ra_undefined_p; +} LIBSFRAME_2.0; diff --git a/libsframe/sframe.c b/libsframe/sframe.c index f56742ee1a1..bd39780a913 100644 --- a/libsframe/sframe.c +++ b/libsframe/sframe.c @@ -131,6 +131,12 @@ sframe_get_fre_ra_mangled_p (uint8_t fre_info) return SFRAME_V1_FRE_MANGLED_RA_P (fre_info); } +static bool +sframe_get_fre_ra_undefined_p (uint8_t fre_info) +{ + return SFRAME_V1_FRE_OFFSET_COUNT (fre_info) == 0; +} + /* Access functions for info from function descriptor entry. */ static uint32_t @@ -777,6 +783,18 @@ sframe_fre_get_ra_mangled_p (sframe_decoder_ctx *dctx ATTRIBUTE_UNUSED, return sframe_get_fre_ra_mangled_p (fre->fre_info); } +/* Get whether the RA is undefined (i.e. outermost frame). */ + +bool +sframe_fre_get_ra_undefined_p (const sframe_decoder_ctx *dctx ATTRIBUTE_UNUSED, + const sframe_frame_row_entry *fre, int *errp) +{ + if (fre == NULL || !sframe_fre_sanity_check_p (fre)) + return sframe_set_errno (errp, SFRAME_ERR_FRE_INVAL); + + return sframe_get_fre_ra_undefined_p (fre->fre_info); +} + static int sframe_frame_row_entry_copy (sframe_frame_row_entry *dst, sframe_frame_row_entry *src)