Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Быстрый вывод 2D, быстрый ввод с веб-камеры. guvcview, 1280x720/29fps, без тормозов. 
:(
    Опции темы
gustavomarginale
Дата 18.4.2011, 00:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 2.7.2008

Репутация: нет
Всего: нет



Приведённый код берёт картинку с веб-камеры и выводит её в 3 окна. Это очень сильно жрёт проц как на получении картинки с веб-камеры так и на её вывод в окна. В то же время программа guvcview показывает картинку с этой веб-камеры в разрешении 864x480/29fps или 1280x720/29fps без какого-либо заметного поедания проца. Короче, как бы побыстрее выводить массив байт? Пока интересует только линуксовое решение, хотя весь код пишется кросс-платформенно, даже под CMake. guvcview умудряется почти без пожирания проца делать grayscale, простые эффекты.

В данный момент выводимая картинка - это массив байт RGBRGBRGBRGBRGB... Его будет требоваться модифицировать и выводить. Сейчас к нему есть доступ через (char*)(frame->imageData). В каком формате должны будут быть данные, выводимые на экран предложенным вами быстрым способом - не суть, это всегда можно обеспечить.

Спасибо.

Код

#include <iostream>
#include <opencv/cv.h>
#include <opencv/highgui.h>

int main ( void )
{
    CvCapture *camera = cvCreateCameraCapture(0);
    IplImage  *frame = 0;

    /* create a window for the video */
    cvNamedWindow( "w1", CV_WINDOW_AUTOSIZE );
    cvNamedWindow( "w2", CV_WINDOW_AUTOSIZE );
    cvNamedWindow( "w3", CV_WINDOW_AUTOSIZE );

    while ( 1 )
    {
        frame = cvQueryFrame(camera);
        if ( !frame )
            break;

        cvShowImage("w1", frame);
        cvShowImage("w2", frame);
        cvShowImage("w3", frame);
        cvWaitKey(33);
    }
    return 0;
}

PM MAIL   Вверх
gustavomarginale
Дата 24.4.2011, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 2.7.2008

Репутация: нет
Всего: нет



Up! (-;
PM MAIL   Вверх
kefir01
Дата 24.4.2011, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 213
Регистрация: 22.6.2007

Репутация: нет
Всего: 2



Может это поможет?
http://dranger.com/ffmpeg/tutorial01.html - ffmpeg + sld (но можно любой вывод на твой вкус)
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=35 - вывод видео в opengl. Примечательна функция переворота байтов

Код

void flipIt(void* buffer)                        // Flips The Red And Blue Bytes (256x256)
{
    void* b = buffer;                        // Pointer To The Buffer
    __asm                                // Assembler Code To Follow
    {
        mov ecx, 256*256                    // Set Up A Counter (Dimensions Of Memory Block)
        mov ebx, b                        // Points ebx To Our Data (b)
        label:                            // Label Used For Looping
            mov al,[ebx+0]                    // Loads Value At ebx Into al
            mov ah,[ebx+2]                    // Loads Value At ebx+2 Into ah
            mov [ebx+2],al                    // Stores Value In al At ebx+2
            mov [ebx+0],ah                    // Stores Value In ah At ebx
            
            add ebx,3                    // Moves Through The Data By 3 Bytes
            dec ecx                        // Decreases Our Loop Counter
            jnz label                    // If Not Zero Jump Back To Label
    }
}


PM MAIL   Вверх
Void
Дата 24.4.2011, 17:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: нет
Всего: 173



Цитата(gustavomarginale @  18.4.2011,  02:01 Найти цитируемый пост)
Короче, как бы побыстрее выводить массив байт? Пока интересует только линуксовое решение

XVideo и всё что умеет его использовать.


--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0508 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.