summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorphintuka <phintuka>2011-08-01 12:39:58 +0000
committerphintuka <phintuka>2011-08-01 12:39:58 +0000
commitc4115f890f0b357ebc9b8bf30525b1d425d5d4e4 (patch)
treeb1cd2e669212b0346d17150eaac48852dfc36a89
parentab3e5c8602f52d8b5a0d0335511ee3e016e755a2 (diff)
downloadxineliboutput-c4115f890f0b357ebc9b8bf30525b1d425d5d4e4.tar.gz
xineliboutput-c4115f890f0b357ebc9b8bf30525b1d425d5d4e4.tar.bz2
Factorized known audio pid search code
-rw-r--r--xine/BluRay/demux_ts.c56
1 files changed, 14 insertions, 42 deletions
diff --git a/xine/BluRay/demux_ts.c b/xine/BluRay/demux_ts.c
index 7fe0d965..05d13b1b 100644
--- a/xine/BluRay/demux_ts.c
+++ b/xine/BluRay/demux_ts.c
@@ -1203,6 +1203,15 @@ static inline int ts_payloadsize(unsigned char * tsp)
return 184;
}
+/* check if an apid is in the list of known apids */
+static int apid_check(demux_ts_t*this, unsigned int pid) {
+ int i;
+ for (i = 0; i < this->audio_tracks_count; i++) {
+ if (this->audio_tracks[i].pid == pid)
+ return i;
+ }
+ return -1;
+}
/*
* NAME demux_ts_parse_pmt
@@ -1452,14 +1461,7 @@ printf("Program Number is %i, looking for %i\n",program_number,this->program_num
case ISO_13818_PART7_AUDIO:
case ISO_14496_PART3_AUDIO:
if (this->audio_tracks_count < MAX_AUDIO_TRACKS) {
- int i, found = 0;
- for(i = 0; i < this->audio_tracks_count; i++) {
- if(this->audio_tracks[i].pid == pid) {
- found = 1;
- break;
- }
- }
- if(!found) {
+ if (apid_check(this, pid) < 0) {
#ifdef TS_PMT_LOG
printf ("demux_ts: PMT audio pid 0x%.4x type %2.2x\n", pid, stream[0]);
#endif
@@ -1491,14 +1493,7 @@ printf("Program Number is %i, looking for %i\n",program_number,this->program_num
case ISO_13818_PES_PRIVATE:
for (i = 5; i < coded_length; i += stream[i+1] + 2) {
if ((stream[i] == 0x6a) && (this->audio_tracks_count < MAX_AUDIO_TRACKS)) {
- int i, found = 0;
- for(i = 0; i < this->audio_tracks_count; i++) {
- if(this->audio_tracks[i].pid == pid) {
- found = 1;
- break;
- }
- }
- if(!found) {
+ if (apid_check(this, pid) < 0) {
#ifdef TS_PMT_LOG
printf ("demux_ts: PMT AC3 audio pid 0x%.4x type %2.2x\n", pid, stream[0]);
#endif
@@ -1614,14 +1609,7 @@ printf("Program Number is %i, looking for %i\n",program_number,this->program_num
* FIXME: This will need expanding if we ever see a DTS or other media format here.
*/
if ((this->audio_tracks_count < MAX_AUDIO_TRACKS) && (stream[0] >= 0x80) ) {
- int i, found = 0;
- for(i = 0; i < this->audio_tracks_count; i++) {
- if(this->audio_tracks[i].pid == pid) {
- found = 1;
- break;
- }
- }
- if(!found) {
+ if (apid_check(this,pid) < 0) {
uint32_t format_identifier=0;
demux_ts_get_reg_desc(this, &format_identifier,
stream + 5, stream_info_length);
@@ -1915,16 +1903,6 @@ static int64_t demux_ts_adaptation_field_parse(uint8_t *data,
}
#endif
-/* check if an apid is in the list of known apids */
-static int apid_check(demux_ts_t*this, unsigned int pid) {
- int i;
- for(i=0; i<this->audio_tracks_count; i++) {
- if(this->audio_tracks[i].pid == pid)
- return i;
- }
- return -1;
-}
-
/* transport stream packet layer */
static void demux_ts_parse_packet (demux_ts_t*this) {
@@ -2086,14 +2064,8 @@ static void demux_ts_parse_packet (demux_ts_t*this) {
}
} else if ( (pes_stream_id >= AUDIO_STREAM_S) && (pes_stream_id <= AUDIO_STREAM_E) ) {
if (this->audio_tracks_count < MAX_AUDIO_TRACKS) {
- int i, found = 0;
- for(i = 0; i < this->audio_tracks_count; i++) {
- if(this->audio_tracks[i].pid == pid) {
- found = 1;
- break;
- }
- }
- if(!found) {
+
+ if (apid_check(this, pid) < 0) {
#ifdef TS_PMT_LOG
xprintf (this->stream->xine, XINE_VERBOSITY_DEBUG,
"demux_ts: auto-detected audio pid 0x%.4x\n", pid);