Armadilloフォーラム

Armadillo840画面ローテーション

tsuchiya

2014年5月29日 10時35分

いつもお世話になっております。
土屋です。

840でいろいろお世話になっておりますが、以前にもお聞きした画面のローテーションを実装しないとな状況になりそうです。
急ぎ180度の場合のみ実装したいのですが、どのあたりをどのように弄れば良いか、ご教授願えますでしょうか。
教えていただいても出来るのか、かなり不安なのですが・・・

ご面倒をおかけいたしますが、よろしくお願いいたします。

コメント

wmouse

2014年5月29日 16時32分

お世話様です。水口と申します。

自分もLCDの天地反転をやる(かも!)という状況になり、フォーラムになる前のメーリングリストへ投稿したことがあります。
(A-440でX-Window環境ですが)

下記スレッドに一連の流れがありますので参考になればと。
http://lists.atmark-techno.com/pipermail/armadillo/2012-February/007903…

> 840でいろいろお世話になっておりますが、以前にもお聞きした画面のローテーションを実装しないとな状況になりそうです。
> 急ぎ180度の場合のみ実装したいのですが、どのあたりをどのように弄れば良いか、ご教授願えますでしょうか。
> 教えていただいても出来るのか、かなり不安なのですが・・・

tsuchiya

2014年5月30日 11時37分

水口様
お世話様です。土屋です。

情報ありがとうございます。ただ残念ながら X は使用しておりません。

まあ正直申せば、Qt(QML)で画像と GStreamerで動画を表示しているだけですので
画像は Rectangle のRotationプロパティで一発ですが
GStreamer が厳しい感じでして・・・
VideoFlipというのがあるらしいのですが 840にはないようなので
何とかこれを実装するか、ドライバ部分で反転するかかなと。

先々を考えると90度の要求もあるようなので、今回質問させていただいた次第です。
今後も何か情報ございましたら、よろしくお願いいたします。

tsuchiya

2014年5月30日 14時55分

お世話になっております。

自己レスですいませんが、補足いたします。

atde5のarmhfにvideoflip があったのでインストールして実験してみました。

gst-launch-1.0 videotestsrc ! videoflip method=rotate-180 ! fbdevsink

は正常に反転表示されますが、acmfbdevsink を使用した取説サンプルにある方法に組み込んで実験してみたらエラーになりました。

例えば
gst-launch-1.0 -q filesrc location=/mnt/video.mp4 ! videoflip method=rotate-180 ! qtdemux name=demux0 { demux0.video_0 ! queue ! acmh264dec x-offset=0 y-offset=152 ! video/x-raw,width=1280,height=720 ! acmfbdevsink device=/dev/fb0 }

この場合のエラー
WARNING: erroneous pipeline: could not link videoflip0 to demux0

例えば
gst-launch-1.0 -q filesrc location=/mnt/video.mp4 ! qtdemux name=demux0 { demux0.video_0 ! videoflip method=rotate-180 ! queue ! acmh264dec x-offset=0 y-offset=152 ! video/x-raw,width=1280,height=720 ! acmfbdevsink device=/dev/fb0 }

この場合のエラー
WARNING: erroneous pipeline: could not link queue0 to acmh264dec0

例えば
gst-launch-1.0 -q filesrc location=/mnt/video.mp4 ! qtdemux name=demux0 { demux0.video_0 ! queue ! videoflip method=rotate-180 ! acmh264dec x-offset=0 y-offset=152 ! video/x-raw,width=1280,height=720 ! acmfbdevsink device=/dev/fb0 }

この場合のエラー
WARNING: erroneous pipeline: could not link videoflip0 to acmh264dec0

下記は一瞬出た後でエラーになる。videoflipは効いていない模様。
gst-launch-1.0 -q filesrc location=/mnt/video.mp4 ! qtdemux name=demux0 { demux0.video_0 ! queue ! acmh264dec x-offset=0 y-offset=152 ! videoflip method=rotate-180"! video/x-raw,width=1280,height=720 ! acmfbdevsink device=/dev/fb0 }

gst-launch-1.0 -q filesrc location=/mnt/video.mp4 ! qtdemux name=demux0 { demux0.video_0 ! queue ! acmh264dec x-offset=0 y-offset=152 ! video/x-raw,width=1280,height=720 ! videoflip method=rotate-180 ! acmfbdevsink device=/dev/fb0 }

この場合のエラー
ERROR: from element /GstPipeline:pipeline0/GstAcmH264Dec:acmh264dec0: Could not decode stream.
Additional debug info:
gstacmh264dec.c(2891): gst_acm_h264_dec_handle_out_frame (): /GstPipeline:pipeline0/GstAcmH264Dec:acmh264dec0:
failed gst_video_decoder_finish_frame()
ERROR: pipeline doesn't want to preroll.

となります。

tsuchiya

2014年6月5日 9時27分

お世話になっております。
土屋です。

結局 acmfbdevsink の非DMAで無理だったのですが、DMAを追いかけてみるとfbmon.c の fb_pan_display() まで行って
その後どう動いているのか分からなくなっております。また sh_mobile_lcdcfb.c にも sh_mobile_fb_pan_display() があったので
これでバッファの転送設定しているのかと見てみたのですが、lcdc_write_chan_a() などの設定で転送領域の設定して
schedule_delayed_work() でどこかの関数を呼んでいるのかな、までしかわかりませんでした。
R-Mobile-A1 のレジスタ仕様まで見るのは無理かなと・・・

そもそも元の動画を180度回転させてしまえばよいのですが、ユーザーにその状態の動画を作成させるわけにもいかずという状態です。
何か動画を180度回転して表示する方法はございませんでしょうか。

よろしくお願いいたします。