Pull to refresh

Comments 31

В заголовке «оЧипятка»?
Нашему прОигрывателю, наши же пластинки и не подходят
А почему в вашем проекте нельзя использовать открытые библиотеки?

Microsoft славится индусским кодом и API, а постоянство и стабильность — признак мастерства.
Проект требует захвата видео с вебкамеры, в Metro style приложениях, в которых можно пользоваться только этим самым медиа фоундайшином, а его еще не в одну библиотеку не впихнули, если разберусь с ним толком, может сам оберну.
Джоэл Сполски в свое время все правильно объяснил про глубоко неверный подход Майкрософт к API, вот тут можно почитать
Лично я в этом вопросе вас полностью поддерживаю, так как самому не нравятся многие новинки в Win8 именно по таким причинам искусственных «выпиливаний» и запретов.
Действительно здравая статья, хотя немного устарела, в вебе уже можно делать почти все то, что там написно, как недоступное для веб приложений, а у MS появился XAML, похоже, что удобный инструмент.
Про XAML там уже есть. И .NET, как мы видим, развился. Но всё это многообразие API отталкивает, особенно когда смотришь на структурную схему архитектуры WIn8 — немного похоже на винегрет.
>Да, это немного глупо: конечно Apple и Sun могут продавать компьютеры, но не на двух наиболее прибыльных рынках, а именно на рынках корпоративных и домашних пользователей. Aplle до сих пор где-то там внизу, с очень маленьким процентом рынка

2005 год

А как всё изменилось за 7 лет. Sun погибла, а вот ноутбуки с яблоком мелькают почти везде. Мобильные телефоны стали компьютерами, и MS там где-то внизу на этом рынке.
Мелькает в фильмах потому что проплачивают (и не скрывают этого), и фраза «везде» не вяжется с реальной жизнь, где доля по всему миру 5%.
Завис на пол часа над статьей.
Спасибо, очень интересная статейка хоть и старая
Тогда советую почитать его блог или книжку с избранными статьями оттуда, называется «Джоэл о программировании».
Я читал книгу и не мог оторваться до самого конца — там много интересного про разработку в целом и в частности — про Майкрософт периода конца девяностых и начала нулевых.
Суть претензий не очень понятна. Разумеется в сэмпле должна быть куча boilerplate-кода, иначе он работать не сможет.
Вообще это не претензия, бог миловал, для меня это первый и последний опыт работы с подобным фреймворком.
И я кстати вовсе не «против» Микрософта, много лет покупаю их оси и очень люблю Visual Studio в качестве IDE, для С++, хотя последнее время больше пользуюсь QtCreator'ом т.к. он одинаковый на всех десктоп платформах.

А насчет примера, вот, на мой взгляд «человеческий пример пример» захвата видео.
#include "cv.h"
#include "highgui.h"

#include "stdio.h"

int main(int argc, char** argv) {

    CvCapture* capture = 0;
    IplImage *frame = 0;

    if (!(capture = cvCaptureFromCAM(0)))
        printf("Cannot initialize camera\n");

    cvNamedWindow("Capture", CV_WINDOW_AUTOSIZE);

    while (1) {
        
        frame = cvQueryFrame(capture);

        if (!frame)
            break;
                        
        IplImage *temp = cvCreateImage(cvSize(frame->width/2, frame->height/2), frame->depth, frame->nChannels); // A new Image half size

        cvResize(frame, temp, CV_INTER_CUBIC); // Resize
        
        cvSmooth(temp, temp, CV_GAUSSIAN, 7, 7, 0, 0); // Real time filter: Gaussian blur

        cvSaveImage("test.jpg", temp, 0); // Save this image
        cvSave("test.xml", temp, NULL, NULL, cvAttrList(0, 0)); // Save as xml

        cvShowImage("Capture", frame); // Display the frame
        
        cvReleaseImage(&temp);

        if (cvWaitKey(5000) == 27) // Escape key and wait, 5 sec per capture
            break;
    }
    
    cvReleaseImage(&frame);
    cvReleaseCapture(&capture);

    return 0;
}


Короткий и по моему, понятный.
> Короткий и по моему, понятный

Короткий он потому, что в нём полностью отсутствует обработка ошибок и нештатных ситуаций, т.е. это типичный студенческий говнокод.
В примере от MS больше половины строк занимает как раз обработка нештатных ситуаций, т.е. это типичный качественный enterprise код.
А мне же пример нужен, а не энтерпрайз, нам ведь как-то надо освоить это чудо. Как-то постичь обещанные удобство и простоту новых фреймворков, с которыми: «Разработка стала еще проще».
У Microsoft традиция писать все примеры с обработкой ошибок, т.к. выяснилось что многие разработчики просто копипастят этот код в свои проекты.
А это уже проблема «разработчиков», которые копипастят, не разбираясь. Если человек умеет программировать, то обработку ошибок и нештатных ситуаций, имея на руках грамотную документацию, он и сам сможет написать.
А потом 10050 «индусов» сделают copy-paste вашего примера и ихнее приложение будет работать только при особом положении луны и во всём будут винить конечно Майкрософт.
Майкрософт уже несколько раз декларировала что подход к примерам(из MSDN) должен быть таким чтобы код можно было было безбоязнено скопировать.
Зачем, скажите на милость, разработчикам втюхивают этот Media Foundation? И почему отменили совместимость с DirectShow в Metro приложениях?


Metro приложения появились с выходом Windows 8, в них никогда не было DirectShow — как можно «отменить совместимость» с тем, чего никогда не было? Вы бы еще огорчились, что в PlayStation 3 отменили совместимость с WinAPI :).

Почему его в Metro нету — другой вопрос. Насколько я понимаю концепцию, Metro — это объединенная платформа для телифонов, планшетов, и, по остаточному принципу, десктопа. Соответственно приложение условно работает «везде». Платформа изначально телефонная, от Windows Phone 7. Вполне логичный шаг использовать на телефонной птформе, заточенной под тайлы и джаваскрипт, адаптированный под нее фреймворк. Вместо того чтобы тащить десктопный. У меня есть смутное подозрение, что взаимоействие того же javascript с directshow было бы не самым лучшим опытом для разработчиков :)
Так довели бы его до ума, чем позориться. Книжку какую-то выпустили, толстенную и заранее устаревшую, в которой общие фразы типа MF это такое домино, сходятся только у которых одинаковые точки. А в примерах такое домино, что в глазах темно.
Вот на Андроиде к примеру — смог собрать библиотеку под Андроид — пользуйся, хоть тем же Qt. А DirectShow на 8й работает, но только в десктоп приложениях, а в метро нет. И у этого медиа фоундайшин какие-то хвосты в DirectShow лезут, а почему же в метро аппликациях на десктоп ПК им пользоваться тогда нельзя?
Windows 8 — это наследник Windows 7. Настольной Windows 7.
Было в предке и не стало в наследнике = выпилили. Всё ж понятно и резонно, не придирайтесь к словам.

Делают из ежа ужа, выплёскивая в помойку все отличия… :(
Все что связанно с захватом видео в Windows это, не побоюсь этого слова, позор для разработчик или скорее архитекторов из MS. Сначала VFW, потом фильтры, потом эти обертки DMO. Причем, чтобы написать простейший захват (при помощи любой из этих технологий) картинка + звук, сжатие, отправка, воспроизведение, нужно затратить неимоверные усилия, написать пару своих фильтров. На каком-то этапе обязательно будут проблемы. Кто сталкивался тот знает. Т.е. написать простенький видео чат, не вникая целиком и полностью во все аспекты разработки фильтров, не получится.
с доками просто подстава… а так если разобраться удаётся — всё боле-мене логично там… Только вот разобраться по имеющимся докам — проще сдохнуть.
UFO just landed and posted this here
Это было бы счастье, только не могу найти пока того плагина, в какой версии Qt он появился?
UFO just landed and posted this here
UFO just landed and posted this here
Действительно, нет для камеры обертки, но вообще обертки для wmf есть, что уже упрощает понимание. А то было одно время впечатление, что никто этот фрэймворк не трогал и не пробовал, кроме компании производителя.
UFO just landed and posted this here
Громадное спасибо!!! Я видел у Qt back-end с DirectShow не знал что они готовят с MF. А в 5й не догадался посмотреть. Ура!!!
Ну, как-бы страшного ничего особо нет. Здесь идет инициализация камеры для все возможных случаев (если я правильно понял по колбеку). Кому-то надо кадр с камеры, кому-то видео поток.
Если писать отдельное API для сдергивания кадра с камеры и отдельное API для получения потока кадров с заданным фреймрейтом, то будет либо куча разных функций с почти одинаковыми именами, либо отдельное API типа VfW :)
А если поток надо сразу перенаправиль в другой фильт, минуя буфер памяти?

В общем, не все так страшно.
Sign up to leave a comment.

Articles