Mercurial > pt1
diff recpt1/tssplitter_lite.c @ 142:1e7718cc2556
use utf-8 instead of euc-jp
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Wed, 30 Apr 2014 11:26:24 +0900 |
parents | 61ff9cabf962 |
children |
line wrap: on
line diff
--- a/recpt1/tssplitter_lite.c Tue Oct 01 16:36:12 2013 +0900 +++ b/recpt1/tssplitter_lite.c Wed Apr 30 11:26:24 2014 +0900 @@ -38,22 +38,22 @@ static int GetPid(unsigned char *data); /** - * サービスID解析 + * 泣若ID茹f */ static char** AnalyzeSid( - char* sid) // [in] サービスID(カンマ区切りテキスト) + char* sid) // [in] 泣若ID(潟阪鴻) { int i = 0; char** sid_list = NULL; char* p; int CommaNum = 0; - /* sid は次の形式の引数を許容する */ - /* 指定無し */ + /* sid 罨<綵√綣違荐怨鴻 */ + /* 絎< */ /* SID[0] */ /* SID[0],SID[1],...,SID[N-1],SID[N] */ - /*カンマの数を数える*/ + /*潟違違*/ p = sid; while(*p != '\0') { @@ -63,7 +63,7 @@ p++; } - /* sid_listの数はカンマの数+2(NULL止めするから) */ + /* sid_list違潟+2(NULL罩≪) */ sid_list = malloc(sizeof(char*)*(CommaNum+2)); if ( sid_list == NULL ) { @@ -71,7 +71,7 @@ return NULL; } - /* sidが空である場合 */ + /* sid腥冴с翫 */ p = sid; if ( strlen(p) == 0 ) { @@ -79,7 +79,7 @@ return sid_list; } - /* カンマ無し */ + /* 潟< */ if ( CommaNum == 0 ) { sid_list[0] = sid; @@ -87,34 +87,34 @@ return sid_list; } - /* カンマ区切りで複数指定時 */ + /* 潟阪ц井絎 */ i=0; p = sid; - /* 文字列端に到達するか、カンマ数が数えた数に達したら終了 */ + /* 絖腴育潟違違違腟篋 */ while((*p != '\0') || i < CommaNum) { - /* 現在の処理位置をsid_list[i]にセット */ - /* このタイミングの p は - * ・sid先頭 - * ・[,]の次の文字 - * いずれかであるので p を sid_list[i] に代入してよい + /* 憜篏臀sid_list[i]祉 */ + /* 帥ゃ潟違 p + * sid + * [,]罨<絖 + * с p sid_list[i] 篁eャ */ sid_list[i] = p; i++; - /* 最初に現れる[,]をNULL文字で置換する */ + /* 憗[,]NULL絖х舟 */ p = strchr(p, C_CHAR_COMMA); if ( p == NULL ) { - /* カンマが見つからない場合は最後の処理対象なので終了 */ + /* 潟荀ゃ翫緇絲乗院х篋 */ break; } *p = '\0'; - /* 処理位置をNULLで置換した文字の次の位置に設定する */ + /* 篏臀NULLх舟絖罨<篏臀荐絎 */ p++; } - /* 最後のsid_list[n]はNULLポインタで止める */ + /* 緇sid_list[n]NULLゃ潟帥ф≪ */ sid_list[i] = NULL; i=0; @@ -132,10 +132,10 @@ } /** - * 初期化処理 + * */ splitter* split_startup( - char *sid // [in] サービスID(引数で指定した文字列) + char *sid // [in] 泣若ID(綣違ф絎絖) ) { splitter* sp; @@ -167,22 +167,22 @@ } /** - * 落とすPIDを確定させる + * 純PID腆阪 */ int split_select( - splitter *sp, // [in/out] splitter構造体 - ARIB_STD_B25_BUFFER *sbuf // [in] 入力TS + splitter *sp, // [in/out] splitter罕篏 + ARIB_STD_B25_BUFFER *sbuf // [in] ュTS ) { int result; - // TS解析 + // TS茹f result = ReadTs(sp, sbuf); return result; } /** - * 終了処理 + * 腟篋 */ void split_shutdown(splitter* sp) { @@ -203,19 +203,19 @@ } /** - * TS 解析処理 + * TS 茹f * - * 対象のチャンネル番号のみの PAT の再構築と出力対象 PID の抽出を行う + * 絲乗院c潟垩帥 PAT 罕膀阪絲乗院 PID 遵冴茵 */ static int ReadTs(splitter *sp, ARIB_STD_B25_BUFFER *sbuf) #if 0 - unsigned char **pat, // [out] PAT 情報(再構築後) - unsigned char* pids, // [out] 出力対象 PID 情報 - char** sid_list, // [in] 出力対象サービス ID のリスト - unsigned char* pmt_pids, // [in] 出力対象PIDのPMT PID - , // [in] pt1_drvの入力TS - int* pmt_retain, // [in] 残すべきPMTの数 - int* pmt_counter // [out] 残したPMTの数 + unsigned char **pat, // [out] PAT 縁罕膀緇鐚 + unsigned char* pids, // [out] 阪絲乗院 PID + char** sid_list, // [in] 阪絲乗院泣若 ID 鴻 + unsigned char* pmt_pids, // [in] 阪絲乗院PIDPMT PID + , // [in] pt1_drvュTS + int* pmt_retain, // [in] 罧鴻PMT + int* pmt_counter // [out] 罧PMT #endif { int length = sbuf->size; @@ -231,16 +231,16 @@ if(0x0000 == pid) { result = AnalyzePat(sp, sbuf->data + index); if(result != TSS_SUCCESS) { - /* 下位の関数内部でmalloc error発生 */ + /* 筝篏∽医malloc error榊 */ return result; } } // PMT - /* 残すpmt_pidである場合には、pmtに書かれている - * 残すべきPCR/AUDIO/VIDEO PIDを取得する */ + /* 罧pmt_pidс翫pmt吾 + * 罧鴻PCR/AUDIO/VIDEO PID緇 */ if(sp->pmt_pids[pid] == 1) { - /* この中にはPMT毎に一度しか入らないようにしておく */ + /* 筝PMT罸筝綺ャ */ analyze_result = AnalyzePmt(sp, sbuf->data + index, 1); if(TSS_SUCCESS == analyze_result) { sp->pmt_pids[pid]++; @@ -249,9 +249,9 @@ *(sbuf->data + index + 2) = 0xff; } } - /* 録画する全てのPMTについて、中にあるPCR/AUDIO/VIDEOのPIDを - * 得る */ - /* pmt_counter と pmt_retain が一致する場合に条件は満たされる */ + /* 牙祉PMTゃ筝PCR/AUDIO/VIDEOPID + * 緇 */ + /* pmt_counter pmt_retain 筝眼翫>散羣 */ if(sp->pmt_counter == sp->pmt_retain) { result = TSS_SUCCESS; break; @@ -297,12 +297,12 @@ return result; } /** - * TS 分離処理 + * TS √ */ int split_ts( - splitter *splitter, // [in] splitterパラメータ - ARIB_STD_B25_BUFFER *sbuf, // [in] 入力TS - splitbuf_t *dbuf // [out] 出力TS + splitter *splitter, // [in] splitter<若 + ARIB_STD_B25_BUFFER *sbuf, // [in] ュTS + splitbuf_t *dbuf // [out] 阪TS ) { int pid; @@ -313,7 +313,7 @@ int pmts = 0; int version = 0; - /* 初期化 */ + /* */ dbuf->buffer_filled = 0; if (sbuf->size < 0) { return TSS_ERROR; @@ -328,7 +328,7 @@ // PAT case 0x0000: - // 巡回カウンタカウントアップ + // 綏≦潟帥潟≪ if(0xFF == splitter->pat_count) { splitter->pat_count = splitter->pat[3]; } @@ -347,8 +347,8 @@ default: if(0 != splitter->pmt_pids[pid]) { //PMT - if ((sptr + s_offset)[1] & 0x40) { // PES開始インジケータ - // バージョンチェック + if ((sptr + s_offset)[1] & 0x40) { // PES紮ゃ潟吾宴若 + // 若吾с潟с for(pmts = 0; splitter->pmt_retain > pmts; pmts++) { if (splitter->pmt_version[pmts].pid == pid) { version = splitter->pmt_version[pmts].version; @@ -357,18 +357,18 @@ } if((version != ((sptr + s_offset)[10] & 0x3e)) ||(splitter->pmt_retain != splitter->pmt_counter)) { - // 再チェック + // с result = RescanPID(splitter, sptr + s_offset); } } else { if (splitter->pmt_retain != splitter->pmt_counter) { - // 再チェック + // с result = RescanPID(splitter, sptr + s_offset); } } } - /* pids[pid] が 1 は残すパケットなので書き込む */ + /* pids[pid] 1 罧宴ф吾莨若 */ if(0 != splitter->pids[pid]) { memcpy(dptr + d_offset, sptr + s_offset, LENGTH_PACKET); d_offset += LENGTH_PACKET; @@ -384,20 +384,20 @@ } /** - * PAT 解析処理 + * PAT 茹f * - * PAT を解析し、出力対象チャンネルが含まれているかチェックを行い、PAT を再構築する + * PAT 茹f阪絲乗院c潟障с茵PAT 罕膀 */ static int AnalyzePat(splitter *sp, unsigned char *buf) #if 0 splitter *sp - unsigned char** pat, // [out] PAT 情報(再構築後) - unsigned char* pids, // [out] 出力対象 PID 情報 - char** sid_list, // [in] 出力対象サービス ID のリスト - unsigned char* pmt_pids, // [out] サービス ID に対応する PMT の PID - int* pmt_retain // [out] 残すPMTの数 + unsigned char** pat, // [out] PAT 縁罕膀緇鐚 + unsigned char* pids, // [out] 阪絲乗院 PID + char** sid_list, // [in] 阪絲乗院泣若 ID 鴻 + unsigned char* pmt_pids, // [out] 泣若 ID 絲上 PMT PID + int* pmt_retain // [out] 罧PMT - unsigned char* buf, // [in] 読み込んだバッファ + unsigned char* buf, // [in] 茯粋昭 #endif { int pos[MAX_PID]; @@ -419,7 +419,7 @@ chosen_sid[0] = '\0'; if(pat == NULL) { - /* 初期化 */ + /* */ sp->pmt_retain = 0; memset(pos, 0, sizeof(pos)); size = buf[7]; @@ -437,9 +437,9 @@ } sp->num_pmts = j; - // 対象チャンネル判定 - /* size + 8 = パケット全長 */ - /* 最終 4 バイトはCRCなので飛ばす */ + // 絲乗院c潟ゅ + /* size + 8 = 宴 */ + /* 腟 4 ゃCRCч違 */ for(i = 13; i < (size + 8) - 4; i = i + 4) { pid = GetPid(&buf[i+2]); @@ -451,8 +451,8 @@ while(*p) { if(service_id == atoi(*p)) { - /* 録画対象の pmt_pids は 1 とする */ - /* 録画対象の pmt の pids は 1 とする */ + /* 牙糸乗院 pmt_pids 1 */ + /* 牙糸乗院 pmt pids 1 */ pid = GetPid(&buf[i + 2]); *(pmt_pids+pid) = 1; *(pids+pid) = 1; @@ -465,7 +465,7 @@ continue; } else if(!strcasecmp(*p, "hd") || !strcasecmp(*p, "sd1")) { - /* hd/sd1 指定時には1番目のサービスを保存する */ + /* hd/sd1 絎1泣若鴻篆絖 */ if(service_id == avail_sids[0]) { pid = GetPid(&buf[i + 2]); *(pmt_pids+pid) = 1; @@ -480,7 +480,7 @@ continue; } else if(!strcasecmp(*p, "sd2")) { - /* sd2 指定時には2番目のサービスを保存する */ + /* sd2 絎2泣若鴻篆絖 */ if(service_id == avail_sids[1]) { pid = GetPid(&buf[i + 2]); *(pmt_pids+pid) = 1; @@ -495,7 +495,7 @@ continue; } else if(!strcasecmp(*p, "sd3")) { - /* sd3 指定時には3番目のサービスを保存する */ + /* sd3 絎3泣若鴻篆絖 */ if(service_id == avail_sids[2]) { pid = GetPid(&buf[i + 2]); *(pmt_pids+pid) = 1; @@ -510,7 +510,7 @@ continue; } else if(!strcasecmp(*p, "1seg")) { - /* 1seg 指定時には PMTPID=0x1FC8 のサービスを保存する */ + /* 1seg 絎 PMTPID=0x1FC8 泣若鴻篆絖 */ pid = GetPid(&buf[i + 2]); if(pid == 0x1FC8) { *(pmt_pids+pid) = 1; @@ -525,7 +525,7 @@ continue; } else if(!strcasecmp(*p, "all")) { - /* all指定時には全保存する */ + /* all絎篆絖 */ pid = GetPid(&buf[i + 2]); *(pmt_pids+pid) = 1; *(pids+pid) = 1; @@ -537,7 +537,7 @@ break; } else if(!strcasecmp(*p, "epg")) { - /* epg抽出に必要なPIDのみを保存する */ + /* epg遵冴綽荀PID帥篆絖 */ sid_found = TRUE; *(pids+0x11) = 1; *(pids+0x12) = 1; @@ -585,7 +585,7 @@ fprintf(stderr, "\n"); #endif - // PAT 再構築 + // PAT 罕膀 result = RecreatePat(sp, buf, pos); #if 0 int tc; @@ -598,18 +598,18 @@ } /** - * PAT 再構築処理 + * PAT 罕膀 * - * PMT から出力対象チャンネル以外のチャンネル情報を削除し、PAT を再構築する + * PMT 阪絲乗院c潟篁ュc潟宴ゃPAT 罕膀 */ static int RecreatePat(splitter *sp, unsigned char *buf, int *pos) #if 0 splitter *sp // [in/out] - unsigned char** pat, // [out] PAT 情報(再構築後) - unsigned char* pids, // [out] 出力対象 PID 情報 + unsigned char** pat, // [out] PAT 縁罕膀緇鐚 + unsigned char* pids, // [out] 阪絲乗院 PID - unsigned char* buf, // [in] 読み込んだバッファ - int *pos // [in] 取得対象 PMT のバッファ中の位置 + unsigned char* buf, // [in] 茯粋昭 + int *pos // [in] 緇絲乗院 PMT >賢篏臀 #endif { unsigned char y[LENGTH_CRC_DATA]; @@ -619,9 +619,9 @@ int pos_i; int pid_num = 0; - // CRC 計算のためのデータ + // CRC 荐膊若 { - // チャンネルによって変わらない部分 + // c潟c紊 for (i = 0; i < LENGTH_PAT_HEADER - 4; i++) { y[i] = buf[i + 5]; @@ -633,12 +633,12 @@ y[LENGTH_PAT_HEADER-2] = 0xe0; y[LENGTH_PAT_HEADER-1] = 0x10; - // チャンネルによって変わる部分 + // c潟c紊 for (i = 0; i < MAX_PID; i++) { if(pos[i] != 0) { - /* buf[pos_i] を y にコピー(抽出したPIDの数) */ + /* buf[pos_i] y 潟(遵冴PID) */ pos_i = pos[i]; for (j = 0; j < 4; j++) { @@ -648,12 +648,12 @@ } } } - /* パケットサイズ計算 */ + /* 宴泣ゃ肴膊 */ y[2] = pid_num * 4 + 0x0d; - // CRC 計算 + // CRC 荐膊 crc = GetCrc32(y, LENGTH_PAT_HEADER + pid_num*4); - // PAT 再構成 + // PAT 罕 sp->pat = (unsigned char*)malloc(LENGTH_PACKET); if(sp->pat == NULL) { @@ -678,14 +678,14 @@ } /** - * PMT 解析処理 + * PMT 茹f * - * PMT を解析し、保存対象の PID を特定する + * PMT 茹f篆絖絲乗院 PID 劫 */ static int AnalyzePmt(splitter *sp, unsigned char *buf, unsigned char mark) #if 0 - unsigned char* buf, // [in] 読み込んだバッファ - unsigned char* pids // [out] 出力対象 PID 情報 + unsigned char* buf, // [in] 茯粋昭 + unsigned char* pids // [out] 阪絲乗院 PID #endif { unsigned char Nall; @@ -698,8 +698,8 @@ int payload_offset; // offset to payload pid = GetPid(&buf[1]); - if (buf[1] & 0x40) { // PES開始インジケータ - sp->section_remain[pid] = ((buf[6] & 0x0F) << 8) + buf[7] + 3; // セクションサイズ取得(ヘッダ込) + if (buf[1] & 0x40) { // PES紮ゃ潟吾宴若 + sp->section_remain[pid] = ((buf[6] & 0x0F) << 8) + buf[7] + 3; // 祉激с潟泣ゃ阪緇(莨) payload_offset = 5; for (count = 0; sp->pmt_retain > count; count++) { @@ -707,14 +707,14 @@ sp->pmt_version[count].version = buf[10] & 0x3e; } } - // PCR, 番組情報が先頭からはみ出ることはないだろう + // PCR, 腟宴水冴 // PCR pcr = GetPid(&buf[payload_offset + 8]); sp->pids[pcr] = mark; // ECM - N = ((buf[payload_offset + 10] & 0x0F) << 8) + buf[payload_offset + 11] + payload_offset + 12; // ES情報開始点 + N = ((buf[payload_offset + 10] & 0x0F) << 8) + buf[payload_offset + 11] + payload_offset + 12; // ES演紮 int p = payload_offset + 12; while(p < N) { @@ -734,12 +734,12 @@ } } else { - if (sp->section_remain[pid] == 0) return TSS_ERROR; // セクション先頭が飛んでいる - if ((buf[3] & 0x0F) != ((sp->packet_seq[pid] + 1) & 0x0F)) return TSS_ERROR; // パケットカウンタが飛んだ + if (sp->section_remain[pid] == 0) return TSS_ERROR; // 祉激с喝蕋с + if ((buf[3] & 0x0F) != ((sp->packet_seq[pid] + 1) & 0x0F)) return TSS_ERROR; // 宴潟帥蕋 payload_offset = 4; N = payload_offset; } - sp->packet_seq[pid] = buf[3] & 0x0F; // 巡回カウンタ + sp->packet_seq[pid] = buf[3] & 0x0F; // 綏≦潟 Nall = sp->section_remain[pid]; if(Nall > LENGTH_PACKET - payload_offset) @@ -748,7 +748,7 @@ // ES PID while (N <= Nall + payload_offset - 5) { - // ストリーム種別が 0x0D(type D)は出力対象外 + // 鴻若腮ャ 0x0D鐚type D鐚阪絲乗院紊 if (0x0D != buf[N]) { epid = GetPid(&buf[N + 1]); @@ -770,11 +770,11 @@ } /** - * CRC 計算 + * CRC 荐膊 */ static int GetCrc32( - unsigned char* data, // [in] CRC 計算対象データ - int len) // [in] CRC 計算対象データ長 + unsigned char* data, // [in] CRC 荐膊絲乗院若 + int len) // [in] CRC 荐膊絲乗院若翠 { int crc; int i, j; @@ -813,10 +813,10 @@ } /** - * PID 取得 + * PID 緇 */ static int GetPid( - unsigned char* data) // [in] 取得対象データのポインタ + unsigned char* data) // [in] 緇絲乗院若帥ゃ潟 { return ((data[0] & 0x1F) << 8) + data[1]; }