请教个问题
如果preview时图像正确,拍照成的像水平翻转了〔缩略图也翻转了〕,是怎么回事?
ps: 代码是qualcomm 平台2.3,后摄像头没有问题,前摄像头成像水平翻转。
我看了这篇文章
http://blog.csdn.net/daisyhd/article/details/6000962感觉有个地方应该可以设置jpeg编码从右向左或从左向右,但没找到具体位置。看了好几天没搞定,
老是看到一个oriention设置,但无论设置成 0 90 180 270 ,也不会有水平翻转的情况出现啊

解决方案 »

  1.   

    是在写camera hal层?应该是驱动没支持,或者没写好
      

  2.   

    不是jpeg的编码问题,也不是oriention的设置问题。
    其实你所说的这种前置摄像头拍照情况,因为镜面效应,所以preview正确但照出的相片是镜面的,这个照文字最明显。
    如果是我描述的这种情况,那么你需要根据硬件厂商提供的datasheet,来修改取景/拍照镜面设置与否选项。一般硬件都会提供此类寄存器设置的。
      

  3.   

    谢谢版主。
    camera确实有设置镜像的寄存器,我正是修改了这个才将preview显示正常的,如果在sanpshot时再修改次寄存器,拍照结束再写回初始化值,也可以将拍照正常,但回显又是倒着的。所以才怀疑jpeg编码问题。
    问个问题,camera 驱动probe时设置属性:
    s->s_camera_type=FRONT_CAMERA_2D;//  BACK_CAMERA_2D
    // s->s_mount_angle=90; //0x13
    s->s_mount_angle=270; //0x10
    如果是前camera,这个s_mount_angle应该是多少,这个值是怎么确定的?
      

  4.   

    在camera驱动里SENSOR_PREVIEW_MODE ,SENSOR_SNAPSHOT_MODE时分别把镜像寄存器设置成相应的值
    有以下两个问题:
    1.拍完照回显有1s左右preview是倒的
    2.竖屏只有回显不对,横屏时拍的照也是倒立的。但这里驱动的设置是一样的。
    郁闷了~ 
    在想与其这样在驱动里不停的设置镜像寄存器,还不如只在初始化时设置镜像寄存器一个值,先保证横竖preview都正常,只是在拍照时设置jpeg编码从右向左,成像不就可以了,只是‘jpeg编码从右向左’这个地方没有找到,这个思路对不对?
    调过前camera的大侠冒个泡啊~
      

  5.   


    我做的是平板,只有前置摄像头,恰巧我也负责camera这块。只是无法理解你说的“不停的设置镜像寄存器”。
    拍完照回显有1s左右preview是倒的?你的这种情况十分离奇我没有遇到过。如果你已经修改了寄存器设置,那么照片的缩略图应该是和取景相反,并且照片也是如此保存。
    我可以确定的是 s_mount_angle 不能达到你所期盼的目的,修改oriention它只能让画面整体翻折倾倒,而不能以中心为轴而得到镜像画面。 
    对于你提到的 “jpeg编码从右向左”,我真没有见过这么来设置前置摄像头的,听起来更像是图片处理工具会走的思路,可能是我out了 ^_^
      

  6.   

    exif信息的问题,exif中有个rotation字段。
      

  7.   

    ‘如果你已经修改了寄存器设置,那么照片的缩略图应该是和取景相反,并且照片也是如此保存。’
    这不对吧,缩略图不是应该和取景器一致吗,preview的图像就是就是拍照成像的样子,我看的前camera都是这样的
      

  8.   


    绝对不可能。
    前置camera要求: 缩略图和照片一致,并且与取景相反。 也就是再照相得瞬间,会翻折一次。我非常确定。
    刚刚拿iphone测试了一下,也是如此。
      

  9.   

    起初我也怀疑这个值,但用手机拍的jpeg照片通过IrfanView 读取metadata是没有这个flag的
      

  10.   

    呵呵,谢谢版主热心回复。
    今天在camera.java的确有看到注释说明前camera会以中轴左右翻转,以为是app单独要这么搞。
     ’缩略图和照片一致‘前后camera都应该是这样,但是前camera要求与取景相反,左右翻转?
    有些晕了,搞了好几天难道不是问题?我现在就是无论横拍还是竖拍,缩略图和成像都是把preview
    左右翻折了。明天再找个对比机器看看去,看错了?
      

  11.   

    关于前camera成像是否应该与预览翻转,找了不同平台不同厂家的机器参考,有的会翻转有的不会,结论:
    是bug还是feature由需求决定!
    最终还得改。
      

  12.   

    呵呵,这个要根据客户要求来改变的,不是自己想怎么样就是怎么样的,呵呵,我也是做双camera的,多多交流
      

  13.   

    “不是想怎么样就怎么样”,现在我是没法把它怎么样。
    前camera拍出来的就会水平翻转,luckyboy兄,知不知道如何不让它翻转啊?
    都说要修改镜像寄存器,snapshot时修改,成像的确可以和preview一致,但回显又翻转了,万恶的camera啊~
      

  14.   

    V4l2CsiDevice.cpp V4l2SetRot()中有个 ioctl(mCameraDevice, VIDIOC_S_CTRL, &ctrl)preview和takepicture是都会调用它,这个ioctl在驱动中调整转屏方向 若果不想转可以以这个V4l2SetRot()函数为一个点 往上往下再找找
      

  15.   

    谢谢lbmygf,是否平台不同,在我的代码里没有找到你说的V4l2CsiDevice.cpp 和V4l2SetRot(),
    VIDIOC_S_CTRL倒是有,但没有和flip相关的code、
    从平台提供商得到的答复是,如果sensor type软件上设为front camera,成像就是flip,现在还没有
    解决办法,无语ing
      

  16.   

    最终的解决办法是:driver设为后camera,配合镜像寄存器可以实现成像与preview一致。
    请问版主是在哪个平台上做的平板,软件android3.0?硬件平台?
      

  17.   

    哦...   
    我android多版本,硬件tegra2,你呢
      

  18.   

    请问,前camera在代码中是如何实现预览和拍照左右翻转180度的呢,望指教。谢谢
      

  19.   

    我也遇到了这个问题。。呜呜~~调查了一整天没有眉目,
    问了一高人,说翻转才是正常效果,
    对比了htc的带有前置摄像头的手机,拍出来的也是左右翻转的。。这个应该是在isp出数据的时候已经翻转了。
      

  20.   

    这样的话有一个问题,就是侧拿手机拍照时,缩略图里的人倒立。修改缩略图,使之与preview一致、与照片相反,问题就解决了。
    实际这个问题有四个像:实像,preview,缩略图,照片;preview是照相时拍摄者在设备上看到的动态画面,缩略图是按下快门后定格的画面,照片是最终存储的文件。
    现在主流设备如yiyaaixuexi所说,是preview与实像相反,而缩略图、照片与实像相同。这样的设计解决了以下两个问题:预览时的镜像效果,存储后图像正向、文字正常。但造成我前面提到的问题:预览画面和按下快门后的“预览图”(缩略图)反向,在侧机时表现尤为明显。解决方法很简单,把缩略图改成与实像相反。
      

  21.   

    加这个方法可以让镜头转为正常,但不同程序保存图片不一样,可能图片会倒过来
    protected void setDisplayOrientation(Camera camera, int angle) {
    Method downPolymorphic;
    try {
    downPolymorphic = camera.getClass().getMethod(
    "setDisplayOrientation", new Class[] { int.class });
    if (downPolymorphic != null)
    downPolymorphic.invoke(camera, new Object[] { angle });
    } catch (Exception e1) {
    }
    }
      

  22.   

    CAMERA还有一个问题,水平放置的时候。不管是IPHONE,三星的手机,还是其他什么的,都有一个方向会180度倒过来?网上兄弟说是G-SENSOR没有感应到的问题,这个BUG有解码?