PDA

View Full Version : مشکل در استفاده از ISmartRenderEngine



sh_roohani
شنبه 19 آذر 1384, 18:09 عصر
سلام،
من از DirectX 8.1، به طور خاص DirectShow، و Visual C++ 6.0 استفاده می کنم. در بخش Sample های VB یک Sample به نام Trimmer هست که از ISmartRenderEngine به ترتیب زیر استفاده می کنه:


Dim objSmartRenderEngine As New SmartRenderEngine
منم سعی می کنم همین کار رو توی ++C انجام بدم:


hr = CoCreateInstance(CLSID_SmartRenderEngine, NULL, CLSCTX_INPROC_SERVER, IID_ISmartRenderEngine, (void**)&m_pRenderer);
و m_pRenderer هم به صورت زیر اعلان شده:


ISmartRenderEngine *m_pRenderer;
تا اینجا درست کامپایل می شه. اما به محض اینکه سعی می کنم این عبارت:


objSmartRenderEngine.SetTimelineObject objTimeline
رو توی ++C به کار ببرم:


hr = m_pRenderer->SetTimelineObject(m_pTimeline);
دیگه کامپایل نمی شه. پیغام خطای اونم به این صورته:

error C2039: 'SetTimelineObject' : is not a member of 'ISmartRenderEngine'

مگه نه اینکه نسخه VB هم از همون تابع و همون Interface استفاده می کنه، یعنی ISmartRenderEngine::SetTimelineObject؟
همین مشکل هم برای ConnectFrontEnd، GetFilterGraph، GetGroupOutputPin و ScrapIt پیش میاد. در واقع این توابع عضو ISmartRenderEngine نیستن، بلکه عضو IRenderEngine هستن. اما من نمی دونم چطور ISmartRenderEngine::SetTimelineObject در مثال VB استفاده شده و خوب هم کامپایل می شه، اما توی VC++ 6.0 کامپایل نمی شه!
مگه اشیای COM نباید در همه محیط هایی که COM رو پشتیبانی می کنن، به یک صورت کار کنن؟

با تشکر،
شهرام.

sh_roohani
دوشنبه 21 آذر 1384, 16:00 عصر
سلام،
من متوجه شدم اون چیزی که VB با عنوان Smart Render Engine به کار برده در واقع همون Basic Render Engine هست، چون اصلا Smart recompression توی VB پشتیبانی نمی شه و این فقط یه تغییر اسمه. اینو با استفاده از Object Browser توی محیط VB فهمیدم.
حالا یعنی هیچکس تجربه ای با ISmartRenderEngine نداره؟ کسی تا حالا یه فایل AVI رو با استفاده از تایم لاین recompress نکرده؟

Blaster
دوشنبه 21 آذر 1384, 16:00 عصر
سلام،
SetTimelineObject از توابع IRenderEngine هست و ISmartRenderEngine مستقیما از IUnknown مشتق شده!
اما در مورد VB باید بگم اگه میشه اون Sample رو بدین به من ! چون خود من هم کنجکاو شدم ببینم چرا اینحوریه!

sh_roohani
دوشنبه 21 آذر 1384, 16:04 عصر
سلام Blaster جان، لطف کردی که جواب دادی. لحظاتی پیش از پست شما من اشتباه خودم رو گزارش کردم. باید از CLSID_SmartRenderEngine و IID_IRenderEngine استفاده بشه. بنابراین قضیه اون Sample هم فقط یه اشتباه بود. حالا ممکنه شما به من بگید چطور باید Compressor برای Smart Render Engine مشخص کرد؟ توضیحات DirectX Help یه کمی مبهمه!

sh_roohani
دوشنبه 21 آذر 1384, 16:20 عصر
ببخشید، یه توضیح دیگه اینکه من Compressor رو با استفاده از BindToObject می گیرم، ولی وقتی RenderStream رو صدا می زنم، مقدار HRESULT برگشتی اون 0x80004005 هست که فکر می کنم باید معادل E_FAIL باشه. نمی دونم چرا Fail می شه. تو Help یه چیزایی درباره ترتیب recompress کردن توسط Smart Render Engine نوشته که در Front end انجام می شه، نه در File writer، ولی یه کمی برام نامفهومه.

Blaster
دوشنبه 21 آذر 1384, 16:27 عصر
من اطلاعات کمی در مورد DirectShow دارم ولی بهتر که یه سری به سایت codeproject.com هم بزنی!

sh_roohani
دوشنبه 21 آذر 1384, 16:34 عصر
متاسفانه اونجا هم در مورد recompress کردن چیزی نداره :ناراحت:
اصلا انگار DirectShow تو تحریمه! هرجا تو اینترنت می گردم، حداکثر مثالهایی که پیدا می کنم در حد اجرای یه فایله و بس :گریه:

Blaster
دوشنبه 21 آذر 1384, 16:41 عصر
متاسفانه این یک زمینه کاملا حرفه ای هست ! البته اگه در Codeguru جواب نگیری هیچ جایه دیگه هم نمی گیری!

sh_roohani
دوشنبه 21 آذر 1384, 16:48 عصر
به هر حال ممنون که توجه کردی :لبخندساده

Blaster
دوشنبه 21 آذر 1384, 16:48 عصر
به این خوداموز توی MSDN هم یه نگاهی بنداز ، شاید کمک کرد!
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/directshow/htm/recompressinganavifile.asp

sh_roohani
دوشنبه 21 آذر 1384, 16:53 عصر
اینو قبلا کار کردم، ولی متاسفانه این گراف قابلیت Seek کردن نداره. من می خوام یه قسمتی از یه فایل AVI رو با یه Codec جدید (یا با همون Codec خودش) تو یه فایل AVI دیگه بنویسم که اینکار یا مستلزم یه گرافیه که بشه روش Seek کرد، یا باید از Timeline استفاده کرد.

Blaster
سه شنبه 22 آذر 1384, 12:40 عصر
شرمنده ،این نهایت اطلاعات من بود!

sh_roohani
سه شنبه 22 آذر 1384, 12:43 عصر
اختیار دارید قربان :خجالت:. تا همینجا هم خیلی لطف فرمودین :لبخندساده. ممنونم.

seyedof
سه شنبه 22 آذر 1384, 13:46 عصر
سلام
بدون DirectShow هم میشه اینکارو کرد. اصراری بر استفاده از DirectShow هست؟ API ویندوز قابلیت باز کردن فریم به فریم و همچنین ذخیره مجدد با codec دلخواه رو میده.
ممنون علی

sh_roohani
سه شنبه 22 آذر 1384, 14:06 عصر
سلام،
منظورتون VFW هست؟ راستش فکر می کنم سرعت اون واسه تبدیل خیلی پایین باشه. می دونید، هدف اینه که بشه یه فایل proxy رو که Codec کیفیت پایین و عرض و ارتفاع کمتری نسبت به فایل اصلی داره، از روی یه شبکه که ترافیک نسبتا بالایی داره بخونیم. علت اینه که نمی خوایم با فایل اصلی بار ترافیک شبکه رو بالا ببریم. بعد از انجام ویرایش روی فایل های proxy و ذخیره کردن پروژه، نتیجه رو طی یک عمل batch processing روی فایل های اصلی انجام بدیم. اگه قرار باشه اینکار تبدیل با سرعت پایینی انجام بشه، کل این نرم افزار زیر سوال می ره. البته من زیاد با VFW کار نکردم، ولی چند مورد دیدم که خود مایکروسافت توصیه کرده دیگه از VFW استفاده نشه.
از همه اینا گذشته به خاطر اینکه SDKی که من باهاش کار می کنم یه extension از DirectShow هست، بهتره از همون تکنولوژی استفاده کنم.
اما اگه منظورتون چیزی غیر از VFW هست، ممنون می شم به منم بگید.

با تشکر.

sh_roohani
سه شنبه 22 آذر 1384, 14:09 عصر
در ضمن ببخشید، این مسئله که اگه نخوان از Codec جدید استفاده کنن، Smart Compression سرعت رو توی DirectShow خیلی بالا می بره، مسئله بسیار مهمیه.

seyedof
سه شنبه 22 آذر 1384, 17:38 عصر
سلام
بله VFW دیگه قدیمی شده و مسلما Directshow قابلیتهای بیشتری داره ولی خب دردسرش هم بیشتره. من توی یک برنامه نیاز به ذخیره یک سری تصویر به فرمت avi و با codec داشتم. با توابع خود vfw نوشتم ، خیلی راحتتر از نوشتنش با DirectShow است با وجود اینکه DirectShow هم زیاد کار کردم مخصوصا قسمت Capture/Playback و حتی فیلتر TIP هم نوشتم. متاسفانه دقیقا با قسمت save کردن فایلش اصلا کار نکردم که بتونم راهنمایی کنم.
راستی اوون SDK که باهاش کار میکنید احیانا OpenCV نیست؟
ممنون علی

sh_roohani
سه شنبه 22 آذر 1384, 18:18 عصر
درسته، ولی همونطور که عرض کردم مجبورم با DirectShow کار کنم. به هرصورت از توجه شما و Blaster عزیز ممنونم. اگه به نتیجه ای رسیدم، حتما اینجا می نویسم که بعدا یه بنده خدایی اگه خواست مثل من دچار بدبختی نشه :گیج: .
با تشکر،
شهرام.