Форум программистов, компьютерный форум CyberForum.ru

Конвертация фрейма в формате AAC в PCM - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Написать программу тестирования с возможностью редактирования тестов http://www.cyberforum.ru/cpp/thread1449831.html
Всем привет. Есть такой вопрос: нужно сделать тест (тестов может быть много) , этот тест должен хранится либо в файле, либо в БД. При всем этом его содержание можно менять,удалять.Вот такая вроде бы не хитрая задача, но как с ней справится пока не знаю. Всем кто откликнулся большое спасибо:)
C++ Железнодорожный сортировочный узел Железнодорожный сортировочный узел устроен так, как показано на рисунке. На правой стороне собрано в произвольном порядке несколько вагонов обоих типов по N штук. Тупик может вместить все 2N вагонов. Пользуясь тремя сортировочными операциями: В, С, МИМО, собрать вагоны на левой стороне так, чтобы типы чередовались. Для решения задачи достаточно 3N-1 сортировочных операций. По запросу... http://www.cyberforum.ru/cpp/thread1449539.html
Распределительный код C++
Помогите пожалуйста написать следующую программу: Распределительный код. Число разрядов n задается с клавиатуры. Исходное сообщение М (десятичное 2-х разрядное число) вводится , кодируется, случайным образом допускается от 0 до 1 ошибки, декодируется с обнаружением ошибки.
C++ Как составить программу учета без использования базы данных?
Пожалуйста помогите новичку. Надо составить программу без использование базы данных. Имеются сведения о парке компьютеров. Каждый компьютер характеризуется названием фирмы, скоростью выполнение операций в секунду, объемом памяти, длиной разрядной сетки, количеством пикселов в графическом режиме (разрешающей способностью). Составить список фирм, выпускающих компьютер с объемом памяти более...
C++ Создание 2-х программ, обменивающихся между собой данными через именованные блоки памяти http://www.cyberforum.ru/cpp/thread1447113.html
Тема: Создание 2-х программ, обменивающихся между собой данными через именованные блоки памяти.
C++ Деление больших чисел Привет всем. Написал функцию для деления больших чисел, но к сожалению вычисления идут очень долго. Может кто-нибудь помочь с переделкой этой функции ? int Div(int *S, int *S1, int n, int n1, char A, char B) { int t = SizeOfDec(n, n1); int *S3 = S, i = 0, *S31, *S11; int u = ComparingNumber(S, S1, n, n1); for (; u>0; i++) { S3 = Dec(S3, S1, n, n1, t); подробнее

Показать сообщение отдельно
Lord_Voodoo
Супер-модератор
8584 / 2184 / 61
Регистрация: 07.03.2007
Сообщений: 10,868
Завершенные тесты: 1

Конвертация фрейма в формате AAC в PCM - C++

18.05.2015, 14:17. Просмотров 1708. Ответов 2
Метки (Все метки)

Необходимо конвертировать фрейм в формате AAC в фрейм в формате PCM. Желательно с использованием библиотеки ffmpeg.

Есть проба пера, но почему-то функция avcodec_decode_audio4 возвращает код -1 (Operation not permitted)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
bool AacToPcm (char *inBuffer, int inSize, char** outBuffer, int* outSize)
{
    if(inBuffer == 0) return false;
 
    u_int8_t inputBytes[inSize + FF_INPUT_BUFFER_PADDING_SIZE];
    memset(inputBytes, 0, inSize + FF_INPUT_BUFFER_PADDING_SIZE);
    memcpy(inputBytes, inBuffer, inSize);
 
    avcodec_register_all();
    av_register_all();
 
    AVCodec *codec = avcodec_find_decoder(AV_CODEC_ID_AAC);
    if(codec == 0) return false;
    AVCodecContext *avCtx = avcodec_alloc_context3(codec);
    if(avCtx == 0) return false;
    avCtx->sample_fmt = AV_SAMPLE_FMT_S16;
    avCtx->bit_rate = 32000;
    avCtx->sample_rate = 48000;
    avCtx->channels = 1;
    avCtx->channel_layout = AV_CH_LAYOUT_MONO;
 
    int retval = avcodec_open2(avCtx, codec, 0);
    if (retval < 0)
    {
        avcodec_close(avCtx);
        av_free(avCtx);
        return false;
    }
 
    // create input buffer as avpacket
    AVPacket avPacket;
    av_init_packet(&avPacket);
    avPacket.size = inSize;
    avPacket.data = inputBytes;
 
   AVFrame * pDecodedFrame = avcodec_alloc_frame();
   pDecodedFrame->nb_samples = avCtx->frame_size;
   pDecodedFrame->format = avCtx->sample_fmt;
   pDecodedFrame->channel_layout = avCtx->channel_layout;
   pDecodedFrame->sample_rate = avCtx->sample_rate;
   pDecodedFrame->channels = avCtx->channels;
 
    int nGotFrame = 0;
    int cbDecoded = avcodec_decode_audio4(avCtx, pDecodedFrame, &nGotFrame, &avPacket);
    int data_size = av_samples_get_buffer_size(0,  avCtx->channels,  pDecodedFrame->nb_samples, avCtx->sample_fmt, 1);
 
    if(data_size < 0)
    {
        avcodec_free_frame(&pDecodedFrame);
        avcodec_close(avCtx);
        av_free(avCtx);
 
        return false;
    }
 
    *outSize = data_size;
    *outBuffer = new char[*outSize];
    memcpy(*outBuffer, (char*)pDecodedFrame->data[0], *outSize);
 
    avcodec_free_frame(&pDecodedFrame);
    avcodec_close(avCtx);
    av_free(avCtx);
 
    return cbDecoded != 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru