Задача состоит в следующем. Необходимо разработать код. На вход подается файл mpeg1 или mpeg2. Код его анализирует и выдает информацию о нем (ширина картинки, высота картинки, bitrate и т.д.). Хотелоcь бы это дело реализовать средствами DirectShow. DirectShow, как говорится, мы только начинаем осваивать, а информации в DirectShow SDK документации огромное количество...
Подскажите, пожалуйста, направление, в котором можно работать, что бы решить задачу. Заранее спасибо.
Здравствуйте, Денис Майдыковский, Вы писали:
ДМ>Здравствуйте, Left2, Вы писали:
L>>Рой в сторону примеров использования интерфейса IMediaDet.
ДМ> С МПЕГ 2 ждёт крутой облом...
почему? та инфа что он сказал вроде вполне получается...
ДМ>Это значит в системе завёлся сторонний сплиттер. Стандарные сплиттеры выдают информацию в формате VIDEOINFO2, а IMediaDet понимает только VIDEOINFO.
А кто мешает понимать нужный формат?
Что-то вроде
CComPtr<IMediaDet> pDet;
pDet.CoCreateInstance(CLSID_MediaDet);
CComBSTR bstrFilename(fname);
pDet->put_Filename(bstrFilename);
long nstr=0;
pDet->get_OutputStreams(&nstr);
for(long i=0;i<nstr;i++) {
GUID major_type;
if (FAILED(pDet->put_CurrentStream(i)))
continue;
if (FAILED(pDet->get_StreamType(&major_type)))
continue;
if (major_type == MEDIATYPE_Video) {
long width = 0, height = 0;
CMediaType mt;
pDet->get_StreamMediaType(&mt);
memcpy(&fourcc, &mt.subtype, 4);
if ((mt.formattype == FORMAT_VideoInfo) && (mt.cbFormat >= sizeof(VIDEOINFOHEADER))) {
VIDEOINFOHEADER *pVih = (VIDEOINFOHEADER*)(mt.pbFormat);
width = pVih->bmiHeader.biWidth;
height = pVih->bmiHeader.biHeight;
} else
if ((mt.formattype == FORMAT_MPEG2Video) && (mt.cbFormat >= sizeof(VIDEOINFOHEADER2))) {
VIDEOINFOHEADER2 *pVih = (VIDEOINFOHEADER2*)(mt.pbFormat);
width = pVih->bmiHeader.biWidth;
height = pVih->bmiHeader.biHeight;
} else
continue;
if (height < 0) height *= -1;
w = width;
h = height;
return TRUE;
}// if video stream
}//for each stream
Здравствуйте, D. Mon, Вы писали:
DM>А кто мешает понимать нужный формат? DM>Что-то вроде
Возможно я путаю с режимом получения кадров, вот их-то точно из MPEG2 IMediaDet не умеет вытаскивать по описаной выше причине.
Re[6]: получение информации о MPEG1, MPEG2 файлах
От:
Аноним
Дата:
07.06.07 07:34
Оценка:
Здравствуйте, D. Mon, Вы писали:
ДМ>>Это значит в системе завёлся сторонний сплиттер. Стандарные сплиттеры выдают информацию в формате VIDEOINFO2, а IMediaDet понимает только VIDEOINFO.
DM>А кто мешает понимать нужный формат? DM>Что-то вроде DM>
С IMediaDet вроде бы разобрались. Есть одно НО. DirectShow теперь входит в Platform SDK, что собственно нам на руку, а вот IMediaDet подключает хедер qedit.h. При компиляции этот qedit.h пытается подтянуть ещё
некий dxtrans.h. А вот его уже нет в Platform SDK и находится он в DirectX 9.0 SDK, из-за чего приходится
тянуть ещё и DirectX. Нет ли способа обойти эту проблему?
Здравствуйте, sikro, Вы писали:
S>Здравствуйте!
S>Задача состоит в следующем. Необходимо разработать код. На вход подается файл mpeg1 или mpeg2. Код его анализирует и выдает информацию о нем (ширина картинки, высота картинки, bitrate и т.д.). Хотелоcь бы это дело реализовать средствами DirectShow. DirectShow, как говорится, мы только начинаем осваивать, а информации в DirectShow SDK документации огромное количество...
S>Подскажите, пожалуйста, направление, в котором можно работать, что бы решить задачу. Заранее спасибо
С IMediaDet вроде бы разобрались. Есть одно НО. DirectShow теперь входит в Platform SDK, что собственно нам на руку, а вот IMediaDet подключает хедер qedit.h. При компиляции этот qedit.h пытается подтянуть ещё
некий dxtrans.h. А вот его уже нет в Platform SDK и находится он в DirectX 9.0 SDK, из-за чего приходится
тянуть ещё и DirectX. Нет ли способа обойти эту проблему?.
Здравствуйте, <Аноним>, Вы писали:
А>Здравствуйте, D. Mon, Вы писали:
ДМ>>>Это значит в системе завёлся сторонний сплиттер. Стандарные сплиттеры выдают информацию в формате VIDEOINFO2, а IMediaDet понимает только VIDEOINFO.
А>С IMediaDet вроде бы разобрались. Есть одно НО. DirectShow теперь входит в Platform SDK, что собственно нам на руку, а вот IMediaDet подключает хедер qedit.h. При компиляции этот qedit.h пытается подтянуть ещё А>некий dxtrans.h. А вот его уже нет в Platform SDK и находится он в DirectX 9.0 SDK, из-за чего приходится А>тянуть ещё и DirectX. Нет ли способа обойти эту проблему?
ага блин. их еще и покоцали. части демок нету. а вообще здесь есть сжатый SDK с самым необходимым. ~20 Mb.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: получение информации о MPEG1, MPEG2 файлах
От:
Аноним
Дата:
16.06.07 22:40
Оценка:
Здравствуйте, D. Mon, Вы писали:
DM>А кто мешает понимать нужный формат? DM>Что-то вроде DM>
Пробовал, не работает. Выдаёт на видео и аудио совершенно немыслимый StreamType, идентификатора которого нигде не прописано, а StreamMediaType для видео и аудио получается WAVEFORMATEX. Да и в SDK сказано, что со мпежками Медиадет не дружит.