缩放播放视频的问题,100分

tsingien 2010-02-11 10:52:03
我有一个视频文件,原始大小(176×144)跟屏幕不相配,想修改视频播放框的大小(240×196),通过三种方式尝试皆失败,不知道是我采用的方式不对还是代码中有问题,请高手指教:
方法一:
IBitmap * pFrame;
IBitmap * dstFrame;
AEEBitmapInfo bi;
AEERect rectDest, srcRect;

IMEDIA_GetFrame(pme->pIMediaObject, &pFrame);
IBITMAP_GetInfo(pFrame, &bi, sizeof(bi));

IBitmap_CreateCompatibleBitmap(pFrame, &dstFrame, 240, 196);

SETAEERECT(&rectDest, 0, 0, 240, 196) ;
SETAEERECT(&srcRect, 0, 0, bi.cx, bi.cy);
IBitmapScale_Scale(pme->m_pIBitmapScale, pFrame, &srcRect, dstFrame, &rectDest, &rectDest, AEEBITMAPSCALE_OPAQUE);
IDISPLAY_BitBlt(pme->a.m_pIDisplay, 0, 40, 240, 196,dstFrame, 0, 0, AEE_RO_COPY);
IDISPLAY_Update(pme->a.m_pIDisplay);
IBITMAP_Release(pFrame);
IBITMAP_Release(dstFrame);
方法二:
IBitmap * pFrame;
IBitmap* dst;
ITransform* pt;
AEEBitmapInfo bi;

IMEDIA_GetFrame(pme->pIMediaObject, &pFrame);
IBITMAP_GetInfo(pFrame, &bi, sizeof(bi));

IBITMAP_CreateCompatibleBitmap(pFrame,&dst,240,196);
IBITMAP_QueryInterface(dst,AEECLSID_TRANSFORM,(void**)&pt);
ITRANSFORM_TransformBltSimple(pt,0,0,pFrame,0,0,bi.cx,bi.cy,TRANSFORM_SCALE_2,COMPOSITE_OPAQUE);
IDISPLAY_BitBlt(pme->a.m_pIDisplay, 0, 40, 240, 196,dst, 0, 0, AEE_RO_COPY);
IDISPLAY_Update(pme->a.m_pIDisplay);
IBITMAP_Release(pFrame);
IBITMAP_Release(dst);
ITRANSFORM_Release(pt);

方法3:
IBitmap * pFrame;
IMEDIA_GetFrame(pme->pIMediaObject, &pFrame);
IGRAPHICS_StretchBlt(pme->m_pIGraphics, 0, 0, 240, 180, pFrame, AEE_RO_TRANSPARENT);
IGRAPHICS_Update(pme->m_pIGraphics);
IDISPLAY_Update(pme->a.m_pIDisplay);
IBITMAP_Release(pFrame);

其中前两种方法可以在模拟器上播放,但在真机(三星W799)上只有一个黄了吧唧的背景;后一种方法都无法播放。
...全文
1886 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
tsingien 2010-03-03
  • 打赏
  • 举报
回复
回复9楼的。MM_MP4_PARM_ASCALING在我的SDK里面没有,我的是3.1.5
twoconk 2010-03-03
  • 打赏
  • 举报
回复
引用 11 楼 tsingien 的回复:
回复9楼的。MM_MP4_PARM_ASCALING在我的SDK里面没有,我的是3.1.5


呵呵, 那你就只能自己写一个bitmap的缩放函数了~
推荐看看:http://blog.csdn.net/wenrenhua08/archive/2008/10/09/2767708.aspx
Defonds 2010-02-25
  • 打赏
  • 举报
回复
引用楼主 tsingien 的回复:
我有一个视频文件,原始大小(176×144)跟屏幕不相配,想修改视频播放框的大小(240×196),通过三种方式尝试皆失败,不知道是我采用的方式不对还是代码中有问题,请高手指教:
方法一:
IBitmap * pFrame;
IBitmap * dstFrame;
AEEBitmapInfo bi;
AEERect rectDest, srcRect;

IMEDIA_GetFrame(pme->pIMediaObject, &pFrame);
IBITMAP_GetInfo(pFrame, &bi, sizeof(bi));

IBitmap_CreateCompatibleBitmap(pFrame, &dstFrame, 240, 196);

SETAEERECT(&rectDest, 0, 0, 240, 196) ;
SETAEERECT(&srcRect, 0, 0, bi.cx, bi.cy);
IBitmapScale_Scale(pme->m_pIBitmapScale, pFrame, &srcRect, dstFrame, &rectDest, &rectDest, AEEBITMAPSCALE_OPAQUE);
IDISPLAY_BitBlt(pme->a.m_pIDisplay, 0, 40, 240, 196,dstFrame, 0, 0, AEE_RO_COPY);
IDISPLAY_Update(pme->a.m_pIDisplay);
IBITMAP_Release(pFrame);
IBITMAP_Release(dstFrame);
方法二:
IBitmap * pFrame;
IBitmap* dst; 
ITransform* pt; 
AEEBitmapInfo bi;

IMEDIA_GetFrame(pme->pIMediaObject, &pFrame);
IBITMAP_GetInfo(pFrame, &bi, sizeof(bi));

IBITMAP_CreateCompatibleBitmap(pFrame,&dst,240,196); 
IBITMAP_QueryInterface(dst,AEECLSID_TRANSFORM,(void**)&pt); 
ITRANSFORM_TransformBltSimple(pt,0,0,pFrame,0,0,bi.cx,bi.cy,TRANSFORM_SCALE_2,COMPOSITE_OPAQUE); 
IDISPLAY_BitBlt(pme->a.m_pIDisplay, 0, 40, 240, 196,dst, 0, 0, AEE_RO_COPY);
IDISPLAY_Update(pme->a.m_pIDisplay);
IBITMAP_Release(pFrame);
IBITMAP_Release(dst); 
ITRANSFORM_Release(pt);

方法3:
IBitmap * pFrame;
IMEDIA_GetFrame(pme->pIMediaObject, &pFrame);
IGRAPHICS_StretchBlt(pme->m_pIGraphics, 0, 0, 240, 180, pFrame, AEE_RO_TRANSPARENT);
IGRAPHICS_Update(pme->m_pIGraphics);
IDISPLAY_Update(pme->a.m_pIDisplay);
IBITMAP_Release(pFrame);

其中前两种方法可以在模拟器上播放,但在真机(三星W799)上只有一个黄了吧唧的背景;后一种方法都无法播放。
视情况而定
twoconk 2010-02-22
  • 打赏
  • 举报
回复
应该是与IBitmapScale_Scale的实现相关,有两中方法:
1.写一个bitmap的放大函数,得到指定大小的bitmap
2.使用高通提供的接口,
IMedia_SetMediaParm(pIMedia, MM_MP4_PARM_ASCALING, 240, 196);
当然这个接口是依赖OEM 的实现的,就我知道,高通提供的版本是实现了这个接口的
malu_1982 2010-02-16
  • 打赏
  • 举报
回复
MARK, 学习并接分。。。。
悠然红茶 2010-02-16
  • 打赏
  • 举报
回复
要先确定手机上是否有专门的多媒体芯片,如果这种芯片是那种一播放视频就完全接管LCD的芯片,那么就要查看芯片说明书,看是否提供有调整播放区域和比例的接口,如果有,则不要调用IBitmapScale_Scale()等函数,效率太慢了。如果非要在上层调用IMEDIA_GetFrame()来截屏,要检查并修改OEM层的实现。具体的代码实现,得视情况而定了。
tsingien 2010-02-11
  • 打赏
  • 举报
回复
本来应该是视频,不过只有声音,背景是纯色的,基本上是黄色和蓝色的搭配。因为模拟器正常,无法截屏。具体的RGB值不知道。
MicroSky2813 2010-02-11
  • 打赏
  • 举报
回复
黄了吧唧的背景是什么样?
sxcnfly 2010-02-11
  • 打赏
  • 举报
回复
这是因为你使用手机的视频控件芯片是DMA模式的,用户无法去改变的,目前大多数camera芯片也是DMA的,这样速度会比较快些。
yellowhwb 2010-02-11
  • 打赏
  • 举报
回复
纯up...............
tsingien 2010-02-11
  • 打赏
  • 举报
回复
继续寻求解决方案。……
strayedbird 2010-02-11
  • 打赏
  • 举报
回复
前两个方法对,手机问题

2,851

社区成员

发帖
与我相关
我的任务
社区描述
本论坛以AI、WoS 、XR、IoT、Auto、生成式AI等核心板块组成,为开发者提供便捷及高效的学习和交流平台。 高通开发者专区主页:https://qualcomm.csdn.net/
人工智能物联网机器学习 技术论坛(原bbs) 北京·东城区
社区管理员
  • csdnsqst0050
  • chipseeker
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧