Mercurial > pt1.oyama
comparison src/tssplitter_lite.c @ 143:e72dd5e8d53f
Number of samples per ADTS packet instead of 1000 and 1024.
author | Naoya OYAMA <naoya.oyama@gmail.com> |
---|---|
date | Sun, 29 Jul 2012 23:16:30 +0900 |
parents | 9c7bc6c0327e |
children | 066f33b2213a |
comparison
equal
deleted
inserted
replaced
142:d65c15276b5e | 143:e72dd5e8d53f |
---|---|
1 /* -*- tab-width: 4; indent-tabs-mode: t -*- */ | 1 /* -*- tab-width: 4; indent-tabs-mode: t -*- */ |
2 /* vim: set ts=4 sts=4 sw=4 noexpandtab number : */ | 2 /* vim: set ts=4 sts=4 sw=4 noexpandtab number : */ |
3 /* tssplitter_lite.c -- split TS stream. | 3 /* tssplitter_lite.c -- split TS stream. |
4 | 4 |
5 Copyright 2009 querulous | 5 Copyright 2009 querulous |
6 Copyright 2010 Naoya OYAMA <naoya.oyama@gmail.com> | 6 Copyright 2010-2012 Naoya OYAMA <naoya.oyama@gmail.com> |
7 | 7 |
8 This program is free software: you can redistribute it and/or modify | 8 This program is free software: you can redistribute it and/or modify |
9 it under the terms of the GNU General Public License as published by | 9 it under the terms of the GNU General Public License as published by |
10 the Free Software Foundation, either version 3 of the License, or | 10 the Free Software Foundation, either version 3 of the License, or |
11 (at your option) any later version. | 11 (at your option) any later version. |
1598 } | 1598 } |
1599 /* | 1599 /* |
1600 * オーディオをファイル出力し始める条件(1. 2. を満たすこと) | 1600 * オーディオをファイル出力し始める条件(1. 2. を満たすこと) |
1601 * 1. 動画の蓄積は開始されている | 1601 * 1. 動画の蓄積は開始されている |
1602 * 2. 動画のGOPの1番目のIピクチャのPTSとオーディオのPTSを比較して以下のどちらかを満たすこと | 1602 * 2. 動画のGOPの1番目のIピクチャのPTSとオーディオのPTSを比較して以下のどちらかを満たすこと |
1603 * 2.1. 差分が11msec以内(1000*90k/AACのサンプリング周波数) | 1603 * 2.1. 差分が11msec以内(1024*90k/AACのサンプリング周波数) |
1604 * 1000 : ADTSデータの1フレームのサンプル数 | 1604 * 1024 : ADTSデータの1フレームのサンプル数 |
1605 * 90k : PTSの周波数 | 1605 * 90k : PTSの周波数 |
1606 * 2.2. 過ぎている(過ぎている場合はオーディオESの蓄積の継続と次のGOP狙いにする?) | 1606 * 2.2. 過ぎている(過ぎている場合はオーディオESの蓄積の継続と次のGOP狙いにする?) |
1607 * #動画よりオーディオ側の方が先にESバッファの蓄積を始めるハズなので気にすること無いかなぁ… | 1607 * #動画よりオーディオ側の方が先にESバッファの蓄積を始めるハズなので気にすること無いかなぁ… |
1608 */ | 1608 */ |
1609 else if ( (is_audio_stream(pid, esbuf) != -1) && !(esbuf->started) ) { | 1609 else if ( (is_audio_stream(pid, esbuf) != -1) && !(esbuf->started) ) { |
1619 } else if ( esbuf->Program->video_start ) { /* video 蓄積が開始されている?*/ | 1619 } else if ( esbuf->Program->video_start ) { /* video 蓄積が開始されている?*/ |
1620 printf("audio stream. pid[%d] a_pts[%llu] v_pts[%llu] size[%d].\n", pid, esbuf->pts, esbuf->Program->video_pts, esbuf->size); | 1620 printf("audio stream. pid[%d] a_pts[%llu] v_pts[%llu] size[%d].\n", pid, esbuf->pts, esbuf->Program->video_pts, esbuf->size); |
1621 audio_lipsync_offset = 0; | 1621 audio_lipsync_offset = 0; |
1622 audio_pts = esbuf->pts; | 1622 audio_pts = esbuf->pts; |
1623 adts_freq = AnalyzeAdifHeader(esbuf); | 1623 adts_freq = AnalyzeAdifHeader(esbuf); |
1624 adts_frame_time = (int64_t)((float)1000*90000/adts_freq); /* PTSは90KHz */ | 1624 adts_frame_time = (int64_t)((float)1024*90000/adts_freq); /* PTSは90KHz */ |
1625 /* オーディオをフレーム単位で捨ててPTSを進める */ | 1625 /* オーディオをフレーム単位で捨ててPTSを進める */ |
1626 while ( (esbuf->Program->video_pts > audio_pts +adts_frame_time/2) ) { | 1626 while ( (esbuf->Program->video_pts > audio_pts +adts_frame_time/2) ) { |
1627 /* オーディオデータを捨てると audio_pts は1フレーム分大きくなる */ | 1627 /* オーディオデータを捨てると audio_pts は1フレーム分大きくなる */ |
1628 i = next_adts_start_code(esbuf, audio_lipsync_offset); /* 次のAACのデータを取得 */ | 1628 i = next_adts_start_code(esbuf, audio_lipsync_offset); /* 次のAACのデータを取得 */ |
1629 if ( i != -1 ) { /* AACデータの終端か? */ | 1629 if ( i != -1 ) { /* AACデータの終端か? */ |