一個加班日 (2008/5/22)

 

話說我們的客戶滷蛋公司報了一個 bug 給我們, 主要問題是,  Analog TV audio / video 不能同步.

 

會產生這個問題, 在台灣是有些不可思議的. 因為 NTSC 制的電視, audio 只有 FM mono 一種. Audio 透過 TV sound decoder (TSD), video 透過 TV decoder, 都是硬體在處理, 韌體不用做任何的事情, 兩者自然就會同步. 然而, 在客戶的國家就不是這樣了, 總之頻道掃描完會不同步, time-shift (時光平移) 看也不會同步.

 

為了早點釐清這個問題, 負責這個部分的 Irene 就抓了可憐的國防役小弟 Isometry 來幫她解 bug. 我看滷蛋公司似乎逼得蠻急的, 自然也不能坐視不理. 萬一量產卡在我們 team, 我身為主管也是難辭其咎. 於是我也跑去關心了一下

 

按照以前的狀況, 下班時間我會先回家吃晚飯, 然後回到公司加班, 待到晚上 11, 12 , 2005 年底到 2008 年初都是如此 (也就是我們第一代的 IC 回來之後). 不過自從年初老婆開刀要休養, 我就變成送上孩上學的人. 既然要早起, 也就無法晚睡. 因此這一天我只打算去觀察狀況, 若是看到前景大好”, 我就打算回家休息, 晚一點吃晚飯也很正常.

 

豈知這個問題著實很討厭, 看著看著, 已經到了晚上九點多, 實在覺得有點餓. 大家把各種想得到的招數幾乎都用上了, 還是沒辦法做到 lips sync. 當然, 大家也漸漸變得比較沒有原則了, 只要有人出主意, 其他人也比較不會排斥.繼續鏖戰到十一點多, 覺得真的是有點睏了. 只好吃點飼料, 再加上一杯濃咖啡. 反正不可能突然解決掉問題, 不至發生咖啡喝太多而睡不著的狀況.

 

果然喝了黑咖啡以後, 思路靈活了些, 趕忙把想得到的撇步都提出來, Isometry Irene 去試試!鄉親啊! 如果那幾招有效, 我們不就可以在 12:00am 左右回家了嗎? 那有甚麼好寫的咧! 我記得去年 Irene 的生日的第一秒和最後一秒都是在公司度過的呢! (因為前一天加班過了 12:00am, 第二天也是, 所以生日剛好有頭有尾). 對了, 為什麼我會知道啊!? 肯定我也陪加了兩天班. 這孩子, 頭髮白了妳一定有責任!

 

由於一般性的招數都不靈光, flush 試過了, reset TSD 試過了, interrupt 的條件也試過了. 大家也為了收到 interrupt 後處理的 path, 做了簡短的 code review. 順便發現了幾個潛在的小 bug. 做了各式各樣辛苦的努力, 但是在大 bug招招見血 (因為屢次失敗, 我想吐血) 的攻勢之下, 我只好建議使出禁忌的絕招, audio 去和 video sync. 這個招數聽起來蠻有效的, 只是不知道因為某一種不可知的原因, 大家都沒有嘗試過. 曾經提出過此招不可用的某一位專家, 也剛好在前一陣子離職了. "千萬不要翻到最後一頁喔…" 冷笑話這麼說. 但是不翻到最後一頁, 怎麼知道結果是如何呢?

 

兩位同仁迅速改好了 code, 我們也把電視轉到測試專用的和尚台. 畢竟大家想看的節目, 不一定能夠清楚看出嘴型和聲音合不合. 但是 99 台和它以後的和尚台就不同了, 大師一定是以一顆大頭出現在銀幕上, 雖然老和尚講話是慢了點, 有時候好像是忘詞, 過了好幾秒才講出嘴型中的那個字, 但是沒有其他台有這麼好的測試環境了. 雖然我們也嫌棄過老和尚講話的速度中途跳槽到別台去看其他中和尚講道. 不過他們同樣都是宗教台大家可以去轉台看看, 包括新聞台都是 SNG 畫面滿天飛, 根本沒機會看到主播多少眼! 和尚台才是測試 AV sync 的王道.

 

code 載入系統之後, ….….… work! 不是普通的不 work , 根本聲音就是斷斷續續的, lips sync 的問題還嚴重一百倍. 這個時候, 也已經來到了凌晨兩點左. 那杯咖啡的效力已經退去, 我稍稍又有點餓了起來. 不比兩個年輕人, 老人家我除了偷偷吃了一點飼料, 已經餓了好久了! 想到隔壁公司的小 7 好像也都打烊了, 真是有點頹喪. 在此身心俱疲的情況之下, 能夠堅持下去的, 就只有電視上的老和尚了. 他換了一台上班, 也換了一套袈裟.

 

我想今天可能不會有甚麼結果了, 就叫 Irene 先把改正掉 bug 的版本 commit 到網路上, 最差的情況, 我們就先出這一版了. 不過 Irene 提出絕不 commit 的原則, 她只同意把成果整理好, 但是不 commit 上去. 她說只要 commit 上去就不會想要繼續奮戰了. 我想想有理, 也就沒有堅持.

 

就在我回座位, 準備再多吃一點飼料的當兒, 前線突然傳出好消息. Irene 用她的直覺演算法, 決定在某個條件成立後, 直接丟掉一把 audio data, 結果, 這個沒有學問的做法竟然就 work . 詳細的做法, 事涉公司的機密, 也就不提了. 值得一記的是, 我和 Isometry都堅持為這個大而化之的做法, 找出"可大可久"的數學式. 但先前堅持不 commit Irene 倒是希望就此收手了.

 

兩票對一票, 而且我這一票是主管特別票. 大家就開始往這個方向進軍. 然而, 我們實在是太累了,堂堂台大電信所第七名畢業的 Isometry 頭腦也不太靈光了, 在甚麼 sampling rate 要丟多少 PTS (presentation time stamp) 的式子, 寫的有一搭沒一搭的. 還好我熬過了兩三點的撞牆期, 神智又有點恢復, 多少幫了一點忙.

 

新上陣的版本, 夾著 Irene 好手氣和 Isometry 好幫手的聲勢, 初也使我們萬分期待. 然而, 帶著點小 bug 以及硬體的不配合, 還是讓我們來回修改了好幾次. 改著改著, 老和尚都換了第三套袈, 一切才穩定下來! 看看手錶已經是凌晨五點, IC designer 那邊的窗戶都亮了起來.

 

當部屬的, 開始 check in code, 當主管的, 開始寫 e-mail. 大家各自忙活了一陣, 我終於收拾背包準備開車回家吃早餐. 就在這個時候, 老婆的電話來了: “要不要送早餐過去給你啊?” “不用! 我要回去吃了!” 每次她想要送便當來, 我都剛好要回家耶! 這樣她會不會懷疑我不是在加班啊! !!!!

 

最後, 我還是要感謝我們的同仁. 雖然我們公司的餅沒有晨星畫得大, 錢沒有聯發科發得多. 不過大家該做的事, 還是做得不錯! 以上面的例子來說, 事件的男女主角可不是 commit code 就完工了. 我把他們留下來 stand by, 直到 QA 同仁測過這個版本可以解大約 10 個相關 bug, 他們到中午才能回去休息呢!

 

發表留言