ปกติไม่ค่อยคุ้นเคยกับการเขียนโปรแกรมบน Visual Studio สักเท่าไหร่ เพราะถ้าไม่เขียนพวก script language ก็จะเขียนด้วย text editor ธรรมดา แล้วสร้าง Makefile เองเสียมากกว่า
พอดีมีเรื่องต้องใช้ C++ โปรเซสแต่ละเฟรมของไฟล์วิดีโอ ไม่มีอะไรมาก แค่เปรียบเทียบค่าของ Red และ Blue ของแต่ละ pixel ว่าอันไหนมีค่ามากกว่ากัน และดูว่ามันต่างกับค่าสี Green อยู่เท่าไหร่ แต่ละ pixel เป็น RGBTRIPLE คิดดูก็ไม่มีอะไรยาก
for (int i = 0; i < numPixels; i++, pRgb++) {
diff = pRgb->rgbtGreen - std::max
}
แค่เพิ่มโค้ดส่วนนี้เข้าไป ทำให้ไฟล์วิดีโอขนาด 784×576 ที่เคยเล่นได้ลื่นๆ กระตุก และเฟรมเรตลดลงไปเหลือประมาณ 10-15 fps (โดยประมาณ) ทันที
ไม่น่าเชื่อ…
ลองแก้ใหม่ เปลี่ยนบรรทัดที่เปรียบเทียบเป็น
diff = (prgb->rgbtBlue > prgb->rgbtRed)? prgb->rgbtGreen - prgb->rgbtBlue : prgb->rgbtGreen - prgb->rgbtRed;
กลายเป็นว่าวิดีโอไฟล์เดิม วิ่งฉิว ไม่มีหนืด ไม่มีกระตุก
โค้ดเดียวกันนี้ รันบน hardware เดียวกัน แต่เป็น Mac OS X ทำงานได้ว่องไว ไม่กระตุกเช่นกัน
สรุปว่า… งง…
std::max บน visual studio มัน implement มาไม่ดีหรือเปล่า ?