スポンサード リンク

T.Ishii's Software Library

HTML5 レトロ風ゲーム館

無料ブログはココログ

« ムービーカッターは良い感じ | トップページ | 二つのレコーダーは現状維持? »

AGMPlayerにも何とか

今は、Windows用AmuseGraphicsの開発フェーズで、共通項目の実装は終わったので、個別項目の実装に移っているのだが、今日は、AG-ムービーカッターに実装したシークプレビュー機能をAGMPlayerにも実装した。実は、かなり大変だったのだが。

何故、AG-ムービーカッターには比較的簡単に実装できたシークプレビュー機能が、AGMPlayerに実装するのは大変だったのか、というと、AGMPlayerというのは、元々は、Android用に開発していたモノだったからだ。

つまり、AGMPlayerを開発するにあたっては、元々は、Android用という事で、Javaで記述したのだが、性能が芳しくなかったので、構成要素を次々にJNIを使ってC言語で書き直す作業を行なった訳だ。

その結果、Android版についても、普通に視聴する分には問題がない性能が出る様になったのだが、内部構成的には、部分部分にJNIを使った関数が存在するので、とても綺麗な構成にはなっていない。

更に、それから移植して開発したPC版も、最初はJava版だったので、内部構成については、Android版と大差ない感じだったのだが、その後、それをベースにネイティブ版を開発した訳だ。

そして、そのネイティブ版は、Java版から、比較的、素直に移植したので、Javaコード部分はC++で置き換えたのだが、JNI部分は、ほぼそのまま、C言語の関数を使う格好にしていた。

で、問題は、前述のC言語の関数というのは、AG-ムービーカッターにある自前のC++ライブラリの中にある処理の一部を抜き出した格好になっていて、PC版では、本家の自前C++ライブラリも利用している。

なので、Windows用のネイティブ版AGMPlayerでは、同じ様な処理が二つ実装されたりしていた訳なのだが、より問題だったのは、Android版はAndroid2.3でも動作する様にメモリ使用量をケチって開発していた、という事だ。

具体的には、C++を使って複数のオブジェクトを作ったりするとメモリ使用量が増大するので、Android版のJNI関数では、ベタにC言語で処理を記述し、使用メモリについても、大域変数を使い回す格好にしてある訳だ。

つまり、Android用の処理関数はスレッドセーフではない訳なのだが、今回、シークプレビュー機能を実装するにあたっては、通常の再生処理と並行して、動画ファイルの画像データを取得する必要が生じた。

このため、基本的には、各種処理関数はスレッドセーフでなければならないのだが、AGMPlayerの動画再生関連処理はスレッドセーフではなかったので、構造的な大変更が必要になった訳だ。

もっとも、前述の様に、Android用のJNI関数というのは、元々は、AG-ムービーカッターにあった自前のC++ライブラリの一部を移植したモノでしかなかったので、今回は、何とか、その関数の処理をオリジナルのC++クラスのオブジェクトを埋め込んで、それに代替処理させる格好で対処出来た。

更に、ネットワークアクセスについても、AGMPlayerではAGM形式動画の再生時には、プリフェッチ処理を行なっているのだが、今回、その最中に別の読み出しが発生する事で、そのプリフェッチが途切れる問題が出た。

現行版では、ファイルからの読み出し時に、その先頭からのプリフェッチを行わせつつ、必要なデータ読み出しが完了した時点で、そのプリフェッチデータを読み出しデータとして使っているので、プリフェッチが途切れると、データ読み出し処理はエラー終了する。

と、言う事で、最初、上記の問題が出て、その原因が判らなかったので、対策に苦労したのだが、この問題についても、プリフェッチが途切れても問題が無い様に、何とか対策出来たので、ネットワーク視聴時のシークプレビューも可能に出来た。

もっとも、ネットワーク視聴時にシークプレビューを行うと、データ転送量が結構増える事になるので、シークプレビューのOn/Off設定については、ローカル視聴時とネットワーク視聴時を分けて設定可能にする。

« ムービーカッターは良い感じ | トップページ | 二つのレコーダーは現状維持? »

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/534482/66060575

この記事へのトラックバック一覧です: AGMPlayerにも何とか:

« ムービーカッターは良い感じ | トップページ | 二つのレコーダーは現状維持? »

2017年12月
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31            

広告

プライバシーポリシー

  • 当サイトでは、第三者配信による広告(Google Adsense)サービスを利用しています。

    Google を含む第三者配信事業者は、Cookie を使用して、ユーザーのウェブサイトでの閲覧履歴に基づく広告を配信します。 Google 広告 Cookie を使用することにより、Google や Google のパートナーは当サイトや他のサイトへのアクセス情報に基づく広告をユーザーに表示できます。

    Cookieを無効にする設定およびAdsenseに関する詳細については、以下のリンクを参照下さい。

    広告 - ポリシーと規約 - Google