У меня есть массив данных PCM, он может быть 16-битным, 24-битным, 32-битным и т. Д. Он может быть подписан или беззнаковый , и это может быть 32 или 64 бит с плавающей запятой. В настоящее время он хранится как матрица «void **», индексированная по каналам, а затем по кадрам. Цель состоит в том, чтобы позволить моей библиотеке принимать любой формат PCM и буферизовать его, не требуя манипулирования данными для соответствия указанной структуре. Если аналого-цифровой преобразователь выдает 24-битные упакованные массивы с чередованием PCM, мне нужно принять это изящно. Мне также нужно поддерживать 16-битное без чередования, а также любую перестановку вышеуказанных форматов.
Я знаю битовую глубину и другую информацию во время выполнения, и я пытаюсь кодировать эффективно, не дублируя код. Мне нужен эффективный способ преобразовать матрицу, поместить данные PCM в матрицу, а затем вытащить ее позже.
Я могу преобразовать матрицу в int32_t или int16_t для 32- и 16-битного PCM со знаком соответственно, я Возможно, придется хранить 24-битный PCM в int32_t для 32-битных, 8-битных систем.
Может ли кто-нибудь порекомендовать хороший способ поместить данные в этот массив и вытащить его позже? Я бы хотел избежать больших участков кода, которые выглядят так:
switch( mFormat )
{
case 1: // unsigned 8 bit
for( int i = 0; i < mChannels; i++ )
framesArray = (uint8_t*)pcm[i];
break;
case 2: // signed 8 bit
for( int i = 0; i < mChannels; i++ )
framesArray = (int8_t*)pcm[i];
break;
case 3: // unsigned 16 bit
...
Ограничения: Я работаю на C / C ++, без шаблонов, без RTTI, без STL. Думаю, встроено. Все становится еще сложнее, когда мне приходится переносить это на DSP с 16-битными байтами. общедоступный ActionResult Create (строка uniqueUri) {// получаем кое-что на основе uniqueuri, установленной в ViewData. return View () ...
У меня есть два следующих метода действий (упрощенные для вопроса):
[HttpGet]
public ActionResult Create(string uniqueUri)
{
// get some stuff based on uniqueuri, set in ViewData.
return View();
}
[HttpPost]
public ActionResult Create(Review review)
{
// validate review
if (validatedOk)
{
return RedirectToAction("Details", new { postId = review.PostId});
}
else
{
ModelState.AddModelError("ReviewErrors", "some error occured");
return RedirectToAction("Create", new { uniqueUri = Request.RequestContext.RouteData.Values["uniqueUri"]});
}
}
Итак, если проверка проходит, я перенаправляюсь на другую страницу (подтверждение).
Если возникает ошибка, мне нужно отобразить ту же страницу с ошибкой.
Если я сделаю return View ()
, отобразится ошибка, но если я сделаю , верните RedirectToAction
(как указано выше), он теряет ошибки модели.
Я не удивлен этой проблемой, просто интересно, как вы, ребята, справляетесь с этим?
Я, конечно, мог бы просто вернуть то же представление вместо перенаправления, но у меня есть логика в " Create », который заполняет данные представления, которые мне пришлось бы продублировать.
Есть предложения?