Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • Apr 25 2018 07:30
    hirohitokato closed #6
  • Oct 20 2017 05:16

    hirohitokato on master

    Update README.md (compare)

  • Oct 20 2017 05:15

    hirohitokato on master

    Update README.md (compare)

  • Oct 20 2017 02:51
    hirohitokato closed #8
  • Oct 20 2017 02:51
    hirohitokato commented #8
  • Oct 20 2017 02:50
    hirohitokato closed #7
  • Oct 20 2017 02:50
    hirohitokato commented #7
  • Oct 19 2017 11:15

    hirohitokato on 0.6.0

    (compare)

  • Oct 19 2017 11:14

    hirohitokato on v0.6.1

    (compare)

  • Oct 19 2017 11:14

    hirohitokato on 0.8.0

    (compare)

  • Oct 19 2017 11:13

    hirohitokato on master

    Bump the version, update README… (compare)

  • Oct 19 2017 11:07

    hirohitokato on swift4

    (compare)

  • Oct 19 2017 11:07

    hirohitokato on master

    Update build setting to swift4 protocol `Printable,DebugPrinta… `CMSampleBufferRef` to `CMSampl… and 29 more (compare)

  • Oct 19 2017 11:07
    hirohitokato closed #9
  • Oct 19 2017 11:07
    hirohitokato assigned #9
  • Oct 19 2017 11:07
    hirohitokato opened #9
  • Oct 19 2017 11:06

    hirohitokato on swift4

    Resolve fatal error(1): Add pri… Reconnect IBActions Update copyright year and 1 more (compare)

  • Oct 19 2017 10:35

    hirohitokato on swift4

    Update build setting to swift4 protocol `Printable,DebugPrinta… `CMSampleBufferRef` to `CMSampl… and 24 more (compare)

  • Jun 08 2017 07:51
    iosfitness opened #8
  • Nov 30 2015 18:44
    jainanshul commented #7
Hirohito Kato
@hirohitokato
やや、シリアルキューをインスタンス化時に作っていて、そいつに全部流し込むようにしてますよ?
Norio Nomura
@norio-nomura
作成したシリアルキューはメインスレッドで実行されてるように見えます。
Instrumentsでもデバッガでも
iOS 7.1.2でも同じだった。
Hirohito Kato
@hirohitokato
えーっ?!後で私も確認してみます…。
Norio Nomura
@norio-nomura
iOS 6.1.3も…
Norio Nomura
@norio-nomura
わかった。dispatch_sync()だと呼び出し側スレッドで実行されて、dispatch_async()だと別スレッドになるんだ。これはシリアルでもコンカレントでも同じ。
なのでシリアルキューを使ったからといって、一つのスレッドで実行されるようにはならないぽい。
Norio Nomura
@norio-nomura
どちらにしても、ずっと誤解してた。
Hirohito Kato
@hirohitokato
あぁ、私も勘違いしていました。。。
Norio Nomura
@norio-nomura
libdispatch-442.1.4のソースを読んでました。
dispatch_queue_tには「特定のスレッドで実行する」っていう属性があって、それらにたいしてdispatch_sync()した場合は、ちゃんとそのスレッドで実行されます。
その属性を持つキューはソースを読む限りでは"com.apple.main-thread”, "com.apple.libdispatch-manager”, "runloop-queue”の3つ。

なので

dispatch_sync(dispatch_get_main_queue()){
  // メインスレッドで実行したい!
}

はメインスレッドで実行されます。

Norio Nomura
@norio-nomura
ツイッターにも書いた
Norio Nomura
@norio-nomura
dispatch_sync()の話は「SimpleGaplessPlayer.appはほとんどメインスレッドで動いてるけど何故?」からでした。
Hirohito Kato
@hirohitokato
音沙汰なくすみません。dispatch_queue_create()で作るキューは、スレッドを決めるものではなく、識別子程度に捉えた方がよさそうだと分かりました。copyNextSampleBuffer()が必要なときに時間をかけて、なおかつメインスレッドで実行するのはもったいないので、先読みするワーカースレッドを1個作るようにしてみます。とても参考になります。
Hirohito Kato
@hirohitokato
katokichisoft/SimpleGaplessPlayer@e413844 でひとまず別スレッドに逃がしました。もう少し進めますが、ひとまずご報告です。
Norio Nomura
@norio-nomura
本命のプロジェクトの方でどれくらいメインスレッドに負荷がかかるのか知らないのでなんとも言えませんが、displayLinkのrunloopごと移せないのなら、copyNextSampleBufferを無理に別スレッドへ持って行く必要はない気がします。OpenGLによる描画をメインスレッド以外から出来るなら移せると思うけど。
Hirohito Kato
@hirohitokato
ありがとうございます。描画が結構重いようなので、可能なものは可能な限り背後に回したいところです。とはいえ効果のないことをしてもしょうがないのも確かですので、アドバイスに従って、今のソースでまたパフォーマンスを調べてみます。
Norio Nomura
@norio-nomura
ここでEXC_BREAKPOINT
Hirohito Kato
@hirohitokato
うわ、またもやすみません…
Norio Nomura
@norio-nomura
テンプレートに入れるbenchmark更新した。
Hirohito Kato
@hirohitokato
おお、また参考にします!
Norio Nomura
@norio-nomura
Swift 1.2対応はブランチ切った方が良いのでは。
Hirohito Kato
@hirohitokato
深く考えずにコミットを重ねてしまいました…。1.1と1.2両方のメンテナンスは大変なので、大して知られていない今のうちに、1.2に上げてしまいたいところです。
Norio Nomura
@norio-nomura
Swift 1.2がいつリリースなのか。とりあえず、Apple Watchのリリースには間に合わないと考えるのが普通だよね。
Hirohito Kato
@hirohitokato
はい、WWDCあたりかなあと思います。
Norio Nomura
@norio-nomura
WWDC15でSwift 2.0のベータが始まって…
Hirohito Kato
@hirohitokato
しかも1.2のソースがコンパイルできないという流れですね…
Norio Nomura
@norio-nomura
w
Norio Nomura
@norio-nomura
おや?bitbucket移行?
Hirohito Kato
@hirohitokato
remoteにBitBucketを追加しただけですー。で、そっちのREADMEエディタで軽く編集したら、そういうコメントが残ってしまったというw
Norio Nomura
@norio-nomura
なるほど。
Carthage compatibleバッジ決まったぽいよ。
Carthage/Carthage#179
Carthage compatible
Hirohito Kato
@hirohitokato
おおお。早速変えました。バッジが付くと、同じソースコードでも何か上質な香りがしますね!w
Norio Nomura
@norio-nomura
上質ww
Norio Nomura
@norio-nomura
LicenseCarthage compatibleGitter
Gitterのバッジだけ浮いてる
Hirohito Kato
@hirohitokato
ですね…。
Norio Nomura
@norio-nomura
gitterHQ/gitterへ意見を書きに行ったら、まさに同じことを言ってる人が居たよ。
Hirohito Kato
@hirohitokato
www
Hirohito Kato
@hirohitokato
1秒くらいのムービーを連続再生しているときにスライダーを動かすと、頻繁にcopyNextSampleBuffer()でハングすることに気付きました。
Hirohito Kato
@hirohitokato
らちがあかないので、遅ればせながらバグレポしました。 19860056
Norio Nomura
@norio-nomura
その条件は追試してあげられそうにないかな
Hirohito Kato
@hirohitokato

ありがとうございます。眠い中で書いたので、何か変な表現になってました。問題を改めて整理すると、

  • 1秒前後のムービーを複数用意
  • Playbackモードで再生開始
  • 画面下部のスライダーを頻繁に操作して、再生位置を変更

という条件・操作を行うと、再生位置変更によるAssetReader.startReading()からの最初のcopyNextSampleBuffer()で頻繁にハングします。ちなみに短いムービーの方が再現確率が高いのですが、理由はまだ分かっていません。

AVAssetReader.cancelReading()の説明に「バックグラウンドでの先読みをキャンセルする」とあるので、その処理とstartReading()がかち合って問題になっているのかなあと思いました。が、上記2つのAPIが近い時間で実行されないようにしても、変わらず。謎です。
Norio Nomura
@norio-nomura
これと同じく、track:0がオーディオ、track:1がビデオで起きるなら、以前AVMutableComposition作成時にassetをそのまま入れる、をやった時に気にしていたような記憶が。track:0がオーディオになるって、結局そのまなんだっけ?
Hirohito Kato
@hirohitokato
トラック逆転はそのままですね。あ、言い忘れてました。再現させたデータはビデオトラックのみのデータです。調べてますが、分からないですね、これ…。
Norio Nomura
@norio-nomura
とりあえずビルド通らん。