The definition of ca_pvr_pmt_reply(), table 15.5 specification 1.2, is quite confusing:
My understanding is that such reply works for a single program (program_number) and a predefined set of PIDs for record (Number_of_PID_to_record).
See inline noted as <<<<<
ca_pvr_pmt_reply() {
ca_pvr_pmt_reply_tag
length_field()
program_number
reserved
version_number
current_next_indicator
CA_enable_flag
if (CA_enable_flag == 1) {
CA_enable /* at programme level */
Number_of_PID_to_record <<<<< SHOULDN'T THIS BE OUTSIDE THE SCOPE OF CA_enable_flag==1? bracket
for (i=0; i<n; i++) { /*list of elementary stream PID to record */
reserved
elementary_PID
reserved
ECM_PID /* associated ECM PID of the selected elementary PID */
} else if (CA_enable_flag == 0) { <<<<< THIS DOES NOT CLOSE THE for() bracket
Reserved <<<<< SHOULDN'T the for() loop of ES level CA be inserted in this case instead of the Reserved for alignment ?
}
for (i=0; i<n; i++) { <<<< SHOULDN'T THIS n VALUE BE SET TO Number_of_PID_to_record ?
reserved
elementary_PID /* elementary stream PID to record */
CA_enable_flag
if (CA_enable_flag == 1) {
CA_enable /* at elementary stream level */
reserved
ECM_PID /* ECM PID of the selected elementary PID */
} else if (CA_enable_flag == 0) {
reserved
}
}
}
}
