这篇教程C++ stream_read_char函数代码示例写得很实用,希望能帮到您。
本文整理汇总了C++中stream_read_char函数的典型用法代码示例。如果您正苦于以下问题:C++ stream_read_char函数的具体用法?C++ stream_read_char怎么用?C++ stream_read_char使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。 在下文中一共展示了stream_read_char函数的24个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。 示例1: demux_mpg_read_packetstatic int demux_mpg_read_packet(demuxer_t *demux,int id){ int d; int len; int set_pts=0; // !=0 iff pts has been set to a proper value unsigned char c=0; unsigned long long pts=0; unsigned long long dts=0; int l; int pes_ext2_subid=-1; double stream_pts = MP_NOPTS_VALUE; demux_stream_t *ds=NULL; demux_packet_t* dp; mpg_demuxer_t *priv = (mpg_demuxer_t *) demux->priv; mp_dbg(MSGT_DEMUX,MSGL_DBG3,"demux_read_packet: %X/n",id);// if(id==0x1F0){// demux->synced=0; // force resync after 0x1F0// return -1;//}// if(id==0x1BA) packet_start_pos=stream_tell(demux->stream); if((id<0x1BC || id>=0x1F0) && id != 0x1FD) return -1; if(id==0x1BE) return -1; // padding stream if(id==0x1BF) return -1; // private2 len=stream_read_word(demux->stream); mp_dbg(MSGT_DEMUX,MSGL_DBG3,"PACKET len=%d",len);// if(len==62480){ demux->synced=0;return -1;} /* :) */ if(len==0 || len>MAX_PS_PACKETSIZE){ mp_dbg(MSGT_DEMUX,MSGL_DBG2,"Invalid PS packet len: %d/n",len); return -2; // invalid packet !!!!!! } mpeg_pts_error=0; if(id==0x1BC) { parse_psm(demux, len); return 0; } while(len>0){ // Skip stuFFing bytes c=stream_read_char(demux->stream); --len; if(c!=0xFF)break; } if((c>>6)==1){ // Read (skip) STD scale & size value// printf(" STD_scale=%d",(c>>5)&1); d=((c&0x1F)<<8)|stream_read_char(demux->stream); len-=2;// printf(" STD_size=%d",d); c=stream_read_char(demux->stream); } // Read System-1 stream timestamps: if((c>>4)==2){ pts=read_mpeg_timestamp(demux->stream,c); set_pts=1; len-=4; } else if((c>>4)==3){
开发者ID:andyzsmith,项目名称:mplayer,代码行数:60,
示例2: ebml_read_length/* * Read: element content length. */uint64_t ebml_read_length(stream_t *s, int *length){ int i, j, num_ffs = 0, len_mask = 0x80; uint64_t len; for (i = 0, len = stream_read_char(s); i < 8 && !(len & len_mask); i++) len_mask >>= 1; if (i >= 8) return EBML_UINT_INVALID; j = i + 1; if (length) *length = j; if ((int) (len &= (len_mask - 1)) == len_mask - 1) num_ffs++; while (i--) { len = (len << 8) | stream_read_char(s); if ((len & 0xFF) == 0xFF) num_ffs++; } if (j == num_ffs) return EBML_UINT_INVALID; if (len >= 1ULL<<63) // Can happen if stream_read_char returns EOF return EBML_UINT_INVALID; return len;}
开发者ID:kax4,项目名称:mpv,代码行数:28,
示例3: parse_psmstatic int parse_psm(demuxer_t *demux, int len) { unsigned char c, id, type; unsigned int plen, prog_len, es_map_len; mpg_demuxer_t *priv = (mpg_demuxer_t *) demux->priv; mp_dbg(MSGT_DEMUX,MSGL_V, "PARSE_PSM, len=%d/n", len); if(! len || len > 1018) return 0; c = stream_read_char(demux->stream); if(! (c & 0x80)) { stream_skip(demux->stream, len - 1); //not yet valid, discard return 0; } stream_skip(demux->stream, 1); prog_len = stream_read_word(demux->stream); //length of program descriptors stream_skip(demux->stream, prog_len); //.. that we ignore es_map_len = stream_read_word(demux->stream); //length of elementary streams map es_map_len = FFMIN(es_map_len, len - prog_len - 8); //sanity check while(es_map_len > 0) { type = stream_read_char(demux->stream); id = stream_read_char(demux->stream); if(id >= 0xB0 && id <= 0xEF && priv) { int idoffset = id - 0xB0; switch(type) { case 0x1: priv->es_map[idoffset] = VIDEO_MPEG1; break; case 0x2: priv->es_map[idoffset] = VIDEO_MPEG2; break; case 0x3: case 0x4: priv->es_map[idoffset] = AUDIO_MP2; break; case 0x0f: case 0x11: priv->es_map[idoffset] = AUDIO_AAC; break; case 0x10: priv->es_map[idoffset] = VIDEO_MPEG4; break; case 0x1b: priv->es_map[idoffset] = VIDEO_H264; break; case 0x81: priv->es_map[idoffset] = AUDIO_A52; break; } mp_dbg(MSGT_DEMUX,MSGL_V, "PSM ES, id=0x%x, type=%x, stype: %x/n", id, type, priv->es_map[idoffset]); } plen = stream_read_word(demux->stream); //length of elementary stream descriptors plen = FFMIN(plen, es_map_len); //sanity check stream_skip(demux->stream, plen); //skip descriptors for now es_map_len -= 4 + plen; } stream_skip(demux->stream, 4); //skip crc32 return 1;}
开发者ID:andyzsmith,项目名称:mplayer,代码行数:59,
示例4: stream_read_dwordinline static unsigned int stream_read_dword(const uint8_t *s){ unsigned int y; y=stream_read_char(s); y=(y<<8)|stream_read_char(s+1); y=(y<<8)|stream_read_char(s+2); y=(y<<8)|stream_read_char(s+3); return y;}
开发者ID:lhc180,项目名称:CH14-BitmapRenderer-lhc,代码行数:9,
示例5: stream_read_dwordinline static uint32_t stream_read_dword(uint8_t *s){ uint32_t y = 0; y = stream_read_char(s ); y = (y << 8) | stream_read_char(s + 1); y = (y << 8) | stream_read_char(s + 2); y = (y << 8) | stream_read_char(s + 3); return y;}
开发者ID:BackupTheBerlios,项目名称:tcforge,代码行数:9,
示例6: ebml_read_id/* * Read: the element content data ID. * Return: the ID. */uint32_t ebml_read_id(stream_t *s){ int i, len_mask = 0x80; uint32_t id; for (i = 0, id = stream_read_char(s); i < 4 && !(id & len_mask); i++) len_mask >>= 1; if (i >= 4) return EBML_ID_INVALID; while (i--) id = (id << 8) | stream_read_char(s); return id;}
开发者ID:AppleNuts,项目名称:mpv,代码行数:17,
示例7: demux_y4m_fill_buffer// return value:// 0 = EOF or no stream found// 1 = successfully read a packetstatic int demux_y4m_fill_buffer(demuxer_t *demux, demux_stream_t *dsds) { demux_stream_t *ds=demux->video; demux_packet_t *dp; y4m_priv_t *priv=demux->priv; y4m_frame_info_t fi; unsigned char *buf[3]; int err, size; y4m_init_frame_info(&fi); demux->filepos=stream_tell(demux->stream); size = ((sh_video_t*)ds->sh)->disp_w*((sh_video_t*)ds->sh)->disp_h; dp = new_demux_packet(3*size/2); /* swap U and V components */ buf[0] = dp->buffer; buf[1] = dp->buffer + 5*size/4; buf[2] = dp->buffer + size; if (priv->is_older) { int c; c = stream_read_char(demux->stream); /* F */ if (c == -256) return 0; /* EOF */ if (c != 'F') { mp_msg(MSGT_DEMUX, MSGL_V, "Bad frame at %d/n", (int)stream_tell(demux->stream)-1); return 0; } stream_skip(demux->stream, 5); /* RAME/n */ stream_read(demux->stream, buf[0], size); stream_read(demux->stream, buf[1], size/4); stream_read(demux->stream, buf[2], size/4); } else { if ((err=y4m_read_frame(demux->stream, priv->si, &fi, buf)) != Y4M_OK) { mp_msg(MSGT_DEMUX, MSGL_V, "error reading frame %s/n", y4m_strerr(err)); return 0; } } /* This seems to be the right way to calculate the presentation time stamp */ dp->pts=(float)priv->framenum/((sh_video_t*)ds->sh)->fps; priv->framenum++; dp->pos=demux->filepos; dp->flags=0; ds_add_packet(ds, dp); return 1;}
开发者ID:OpenSageTV,项目名称:mplayer-sage9orig,代码行数:58,
示例8: ebml_read_int/* * Read the next element as a signed int. */int64_t ebml_read_int(stream_t *s){ uint64_t value = 0; uint64_t len; int l; len = ebml_read_length(s); if (len == EBML_UINT_INVALID || len < 1 || len > 8) return EBML_INT_INVALID; len--; l = stream_read_char(s); if (l & 0x80) value = -1; value = (value << 8) | l; while (len--) value = (value << 8) | stream_read_char(s); return (int64_t)value; // assume complement of 2}
开发者ID:AppleNuts,项目名称:mpv,代码行数:23,
示例9: ebml_read_int/* * Read the next element as a signed int. */int64_t ebml_read_int(stream_t *s, uint64_t *length){ int64_t value = 0; uint64_t len; int l; len = ebml_read_length(s, &l); if (len == EBML_UINT_INVALID || len < 1 || len > 8) return EBML_INT_INVALID; if (length) *length = len + l; len--; l = stream_read_char(s); if (l & 0x80) value = -1; value = (value << 8) | l; while (len--) value = (value << 8) | stream_read_char(s); return value;}
开发者ID:kax4,项目名称:mpv,代码行数:25,
示例10: ebml_read_uint/* * Read the next element as an unsigned int. */uint64_t ebml_read_uint(stream_t *s){ uint64_t len, value = 0; len = ebml_read_length(s); if (len == EBML_UINT_INVALID || len < 1 || len > 8) return EBML_UINT_INVALID; while (len--) value = (value << 8) | stream_read_char(s); return value;}
开发者ID:AppleNuts,项目名称:mpv,代码行数:16,
示例11: get_adif_onebitstatic unsigned int get_adif_onebit(demuxer_t *demuxer){ unsigned int res; if (bitno > 7) { input_byte = stream_read_char(demuxer->stream); bitno = 0; } res = (input_byte & 0x80) ? 1 : 0; input_byte <<= 1; bitno++; return res;}
开发者ID:dr4g0nsr,项目名称:mplayer-skyviia-8860,代码行数:14,
示例12: demux_aac_probe/// returns DEMUXER_TYPE_AAC if it finds 8 ADTS frames in 32768 bytes, 0 otherwisestatic int demux_aac_probe(demuxer_t *demuxer){ int cnt = 0, c, len, srate, num; loff_t init, probed; aac_priv_t *priv; if(! demux_aac_init(demuxer)) { mp_msg(MSGT_DEMUX, MSGL_ERR, "COULDN'T INIT aac_demux, exit/n"); return 0; } priv = (aac_priv_t *) demuxer->priv; init = probed = stream_tell(demuxer->stream); while(probed-init <= 32768 && cnt < 8) { c = 0; while(c != 0xFF) { c = stream_read_char(demuxer->stream); if(c < 0) goto fail; } priv->buf[0] = 0xFF; if(stream_read(demuxer->stream, &(priv->buf[1]), 7) < 7) goto fail; len = aac_parse_frame(priv->buf, &srate, &num); if(len > 0) { cnt++; stream_skip(demuxer->stream, len - 8); } probed = stream_tell(demuxer->stream); } stream_seek(demuxer->stream, init); if(cnt < 8) goto fail; mp_msg(MSGT_DEMUX, MSGL_V, "demux_aac_probe, INIT: %"PRIu64", PROBED: %"PRIu64", cnt: %d/n", init, probed, cnt); return DEMUXER_TYPE_AAC;fail: mp_msg(MSGT_DEMUX, MSGL_V, "demux_aac_probe, failed to detect an AAC stream/n"); return 0;}
开发者ID:IngenicSemiconductor,项目名称:hardware-ingenic-xb4780,代码行数:49,
示例13: ebml_resync_cluster/* * Skip to (probable) next cluster (MATROSKA_ID_CLUSTER) element start position. */int ebml_resync_cluster(struct mp_log *log, stream_t *s){ int64_t pos = stream_tell(s); uint32_t last_4_bytes = 0; mp_err(log, "Corrupt file detected. " "Trying to resync starting from position %"PRId64".../n", pos); while (!s->eof) { // Assumes MATROSKA_ID_CLUSTER is 4 bytes, with no 0 bytes. if (last_4_bytes == MATROSKA_ID_CLUSTER) { mp_err(log, "Cluster found at %"PRId64"./n", pos - 4); stream_seek(s, pos - 4); return 0; } last_4_bytes = (last_4_bytes << 8) | stream_read_char(s); pos++; } return -1;}
开发者ID:cfxks1989,项目名称:mpv,代码行数:21,
示例14: get_adif_bitsstatic unsigned int get_adif_bits(demuxer_t *demuxer, int numbits){ unsigned int res; int i; res = 0; for (i = 0; i < numbits; i++) { res <<= 1; if (bitno > 7) { input_byte = stream_read_char(demuxer->stream); bitno = 0; } res |= (input_byte & 0x80) ? 1 : 0; input_byte <<= 1; bitno++; } return res;}
开发者ID:dr4g0nsr,项目名称:mplayer-skyviia-8860,代码行数:21,
示例15: get_aac_durationvoid get_aac_duration(demuxer_t *demuxer, AVFormatContext *avfc){ uint8_t hdr[8]; int len,nf=0,srate,num,c,framesize,i; loff_t init = stream_tell(demuxer->stream); lavf_priv_t *priv= demuxer->priv; AVCodecContext *codec; stream_seek(demuxer->stream, demuxer->movi_start); while(1){ c = 0; while(c != 0xFF){ c = stream_read_char(demuxer->stream); if(c < 0) break; } hdr[0] = 0xFF; if(stream_read(demuxer->stream, &(hdr[1]), 7) != 7) break; len = aac_parse_frame(hdr, &srate, &num); if(len > 0){ nf++; stream_skip(demuxer->stream, len - 8); }else{ stream_skip(demuxer->stream, -6); } } stream_seek(demuxer->stream, init); for(i=0; i<avfc->nb_streams; i++){ codec= ((AVStream *)avfc->streams[i])->codec; if((framesize = codec->frame_size)>0) break; } //framesize = framesize>0?framesize:1024; framesize = 1024; if(nf && srate){ priv->avfc->duration = (double)((nf*framesize/srate)*AV_TIME_BASE); }}
开发者ID:IngenicSemiconductor,项目名称:hardware-ingenic-xb4780,代码行数:39,
示例16: pva_syncstatic int pva_sync(demuxer_t * demuxer){ uint8_t buffer[5]={0,0,0,0,0}; int count; pva_priv_t * priv = (pva_priv_t *) demuxer->priv; /* This function is used to find the next nearest PVA packet start after a seek, since a PVA file * is not indexed. * The just_synced field is in the priv structure so that pva_get_payload knows pva_sync * has already read (part of) the PVA header. This way we can avoid to seek back and (hopefully) * be able to read from pipes and such. */ for(count=0 ; count<PVA_MAX_VIDEO_PACK_LEN && !demuxer->stream->eof && !priv->just_synced ; count++) { buffer[0]=buffer[1]; buffer[1]=buffer[2]; buffer[2]=buffer[3]; buffer[3]=buffer[4]; buffer[4]=stream_read_char(demuxer->stream); /* * Check for a PVA packet beginning sequence: we check both the "AV" word at the * very beginning and the "0x55" reserved byte (which is unused and set to 0x55 by spec) */ if(buffer[0]=='A' && buffer[1] == 'V' && buffer[4] == 0x55) priv->just_synced=1; //printf("demux_pva: pva_sync(): current offset= %ld/n",stream_tell(demuxer->stream)); } if(priv->just_synced) { priv->synced_stream_id=buffer[2]; return 1; } else { return 0; }}
开发者ID:github188,项目名称:NewCool-UC-3.1.0-priv,代码行数:39,
示例17: demux_aac_fill_bufferstatic int demux_aac_fill_buffer(demuxer_t *demuxer, demux_stream_t *ds){ aac_priv_t *priv = (aac_priv_t *) demuxer->priv; demux_packet_t *dp; int c1, c2, len, srate, num; float tm = 0; if(demuxer->stream->eof || (demuxer->movi_end && stream_tell(demuxer->stream) >= demuxer->movi_end)) return 0; while(! demuxer->stream->eof) { c1 = c2 = 0; while(c1 != 0xFF) { c1 = stream_read_char(demuxer->stream); if(c1 < 0) return 0; } c2 = stream_read_char(demuxer->stream); if(c2 < 0) return 0; if((c2 & 0xF6) != 0xF0) continue; priv->buf[0] = (unsigned char) c1; priv->buf[1] = (unsigned char) c2; if(stream_read(demuxer->stream, &(priv->buf[2]), 6) < 6) return 0; len = aac_parse_frame(priv->buf, &srate, &num); if(len > 0) { dp = new_demux_packet(len); if(! dp) { mp_msg(MSGT_DEMUX, MSGL_ERR, "fill_buffer, NEW_ADD_PACKET(%d)FAILED/n", len); return 0; } memcpy(dp->buffer, priv->buf, 8); stream_read(demuxer->stream, &(dp->buffer[8]), len-8); if(srate) tm = (float) (num * 1024.0/srate); priv->last_pts += tm; dp->pts = priv->last_pts; //fprintf(stderr, "/nPTS: %.3f/n", dp->pts); ds_add_packet(demuxer->audio, dp); priv->size += len; priv->time += tm; priv->bitrate = (int) (priv->size / priv->time); demuxer->filepos = stream_tell(demuxer->stream); return len; } else stream_skip(demuxer->stream, -6); } return 0;}
开发者ID:IngenicSemiconductor,项目名称:hardware-ingenic-xb4780,代码行数:63,
示例18: demux_vivo_fill_buffer// return value:// 0 = EOF or no stream found// 1 = successfully read a packetstatic int demux_vivo_fill_buffer(demuxer_t *demux, demux_stream_t *dsds){ demux_stream_t *ds=NULL; int c; int len=0; int seq; int prefix=0; demux->filepos=stream_tell(demux->stream); c=stream_read_char(demux->stream); if (c == -256) /* EOF */ return 0;// printf("c=%x,%02X/n",c,c&0xf0); if (c == 0x82) { /* ok, this works, but pts calculating from header is required! */#warning "Calculate PTS from picture header!" prefix = 1; c = stream_read_char(demux->stream); mp_msg(MSGT_DEMUX, MSGL_V, "packet 0x82(pos=%u) chunk=%x/n", (int)stream_tell(demux->stream), c); } switch(c&0xF0){ case 0x00: // header - skip it! { len=stream_read_char(demux->stream); if(len>=0x80) len=0x80*(len-0x80)+stream_read_char(demux->stream); mp_msg(MSGT_DEMUX, MSGL_V, "vivo extra header: %d bytes/n",len);#ifdef TEXTPARSE_ALL{ int pos; /* also try to parse all headers */ pos = stream_tell(demux->stream); vivo_parse_text_header(demux, len); stream_seek(demux->stream, pos);}#endif break; } case 0x10: // video packet if (prefix == 1) len = stream_read_char(demux->stream); else len=128; ds=demux->video; break; case 0x20: // video packet len=stream_read_char(demux->stream); ds=demux->video; break; case 0x30: // audio packet if (prefix == 1) len = stream_read_char(demux->stream); else len=40; /* 40kbps */ ds=demux->audio; audio_pos+=len; break; case 0x40: // audio packet if (prefix == 1) len = stream_read_char(demux->stream); else len=24; /* 24kbps */ ds=demux->audio; audio_pos+=len; break; default: mp_msg(MSGT_DEMUX,MSGL_WARN,"VIVO - unknown ID found: %02X at pos %"PRIu64" contact author!/n", c, (int64_t)stream_tell(demux->stream)); return 0; }// printf("chunk=%x, len=%d/n", c, len); if(!ds || ds->id<-1){ if(len) stream_skip(demux->stream,len); return 1; } seq=c&0x0F; if(ds->asf_packet){ if(ds->asf_seq!=seq){ // closed segment, finalize packet: ds_add_packet(ds,ds->asf_packet); ds->asf_packet=NULL;// printf("packet!/n"); } else { // append data to it! demux_packet_t* dp=ds->asf_packet; if(dp->len + len + FF_INPUT_BUFFER_PADDING_SIZE < 0) return 0; dp->buffer=realloc(dp->buffer,dp->len+len+FF_INPUT_BUFFER_PADDING_SIZE); memset(dp->buffer+dp->len+len, 0, FF_INPUT_BUFFER_PADDING_SIZE); //memcpy(dp->buffer+dp->len,data,len); stream_read(demux->stream,dp->buffer+dp->len,len); mp_dbg(MSGT_DEMUX,MSGL_DBG4,"data appended! %d+%d/n",dp->len,len); dp->len+=len;//.........这里部分代码省略.........
开发者ID:OpenSageTV,项目名称:mplayer-sage9orig,代码行数:101,
示例19: vivo_check_filestatic int vivo_check_file(demuxer_t* demuxer){ int i=0; int len; int c; unsigned char buf[2048+256]; vivo_priv_t* priv; int orig_pos = stream_tell(demuxer->stream); mp_msg(MSGT_DEMUX,MSGL_V,"Checking for VIVO/n"); c=stream_read_char(demuxer->stream); if(c==-256) return 0; len=0; while((c=stream_read_char(demuxer->stream))>=0x80){ len+=0x80*(c-0x80); if(len>1024) return 0; } len+=c; mp_msg(MSGT_DEMUX,MSGL_V,"header block 1 size: %d/n",len); //stream_skip(demuxer->stream,len); priv=malloc(sizeof(vivo_priv_t)); memset(priv,0,sizeof(vivo_priv_t)); demuxer->priv=priv;#if 0 vivo_parse_text_header(demuxer, len); if (priv->supported == 0) return 0;#else /* this is enought for check (for now) */ stream_read(demuxer->stream,buf,len); buf[len]=0;// printf("VIVO header: '%s'/n",buf); // parse header: i=0; while(i<len && buf[i]==0x0D && buf[i+1]==0x0A) i+=2; // skip empty lines if(strncmp(buf+i,"Version:Vivo/",13)) return 0; // bad version/type!#endif#if 0 c=stream_read_char(demuxer->stream); if(c) return 0; len2=0; while((c=stream_read_char(demuxer->stream))>=0x80){ len2+=0x80*(c-0x80); if(len+len2>2048) return 0; } len2+=c; mp_msg(MSGT_DEMUX,MSGL_V,"header block 2 size: %d/n",len2); stream_skip(demuxer->stream,len2);// stream_read(demuxer->stream,buf+len,len2);#endif // c=stream_read_char(demuxer->stream);// printf("first packet: %02X/n",c); stream_seek(demuxer->stream, orig_pos);return DEMUXER_TYPE_VIVO;}
开发者ID:OpenSageTV,项目名称:mplayer-sage9orig,代码行数:62,
示例20: demux_open_smjpegstatic demuxer_t* demux_open_smjpeg(demuxer_t* demuxer){ sh_video_t* sh_video; sh_audio_t* sh_audio; unsigned int htype = 0, hleng; int i = 0; /* file header */ stream_skip(demuxer->stream, 8); /* /x00/x0aSMJPEG */ stream_skip(demuxer->stream, 4); mp_msg(MSGT_DEMUX, MSGL_INFO, "This clip is %d seconds/n", stream_read_dword(demuxer->stream)); /* stream header */ while (i < 3) { i++; htype = stream_read_dword_le(demuxer->stream); if (htype == mmioFOURCC('H','E','N','D')) break; hleng = (stream_read_word(demuxer->stream)<<16)|stream_read_word(demuxer->stream); switch(htype) { case mmioFOURCC('_','V','I','D'): sh_video = new_sh_video(demuxer, 0); demuxer->video->sh = sh_video; sh_video->ds = demuxer->video; sh_video->bih = malloc(sizeof(BITMAPINFOHEADER)); memset(sh_video->bih, 0, sizeof(BITMAPINFOHEADER)); stream_skip(demuxer->stream, 4); /* number of frames */// sh_video->fps = 24;// sh_video->frametime = 1.0f/sh_video->fps; sh_video->disp_w = stream_read_word(demuxer->stream); sh_video->disp_h = stream_read_word(demuxer->stream); sh_video->format = stream_read_dword_le(demuxer->stream); /* these are false values */ sh_video->bih->biSize = 40; sh_video->bih->biWidth = sh_video->disp_w; sh_video->bih->biHeight = sh_video->disp_h; sh_video->bih->biPlanes = 3; sh_video->bih->biBitCount = 12; sh_video->bih->biCompression = sh_video->format; sh_video->bih->biSizeImage = sh_video->disp_w*sh_video->disp_h; break; case mmioFOURCC('_','S','N','D'): sh_audio = new_sh_audio(demuxer, 0); demuxer->audio->sh = sh_audio; sh_audio->ds = demuxer->audio; sh_audio->wf = malloc(sizeof(WAVEFORMATEX)); memset(sh_audio->wf, 0, sizeof(WAVEFORMATEX)); sh_audio->samplerate = stream_read_word(demuxer->stream); sh_audio->wf->wBitsPerSample = stream_read_char(demuxer->stream); sh_audio->channels = stream_read_char(demuxer->stream); sh_audio->format = stream_read_dword_le(demuxer->stream); sh_audio->wf->wFormatTag = sh_audio->format; sh_audio->wf->nChannels = sh_audio->channels; sh_audio->wf->nSamplesPerSec = sh_audio->samplerate; sh_audio->wf->nAvgBytesPerSec = sh_audio->wf->nChannels* sh_audio->wf->wBitsPerSample*sh_audio->wf->nSamplesPerSec/8; sh_audio->wf->nBlockAlign = sh_audio->channels *2; sh_audio->wf->cbSize = 0; break; case mmioFOURCC('_','T','X','T'): stream_skip(demuxer->stream, stream_read_dword(demuxer->stream)); break; } } demuxer->seekable = 0; return demuxer;}
开发者ID:batman52,项目名称:dingux-code,代码行数:77,
示例21: pva_get_payloadstatic int pva_get_payload(demuxer_t *d, pva_payload_t *payload){ uint8_t flags,pes_head_len; uint16_t pack_size; off_t pva_payload_start; unsigned char buffer[256]; pva_priv_t * priv; if(d==NULL) { mp_msg(MSGT_DEMUX,MSGL_ERR,"demux_pva: pva_get_payload got passed a NULL pointer!/n"); return 0; } priv = (pva_priv_t *)d->priv; d->filepos=stream_tell(d->stream); if(d->stream->eof) { mp_msg(MSGT_DEMUX,MSGL_V,"demux_pva: pva_get_payload() detected stream->eof!!!/n"); return 0; } //printf("priv->just_synced %s/n",priv->just_synced?"SET":"UNSET"); if(priv->prebytes_delivered) /* The previous call to this fn has delivered the preBytes. Then we are already inside * the payload. Let's just deliver the video along with its right PTS, the one we stored * in the priv structure and was in the PVA header before the PreBytes. */ { //printf("prebytes_delivered=1. Resetting./n"); payload->size = priv->video_size_after_prebytes; payload->pts = priv->video_pts_after_prebytes; payload->is_packet_start = 1; payload->offset = stream_tell(d->stream); payload->type = VIDEOSTREAM; priv->prebytes_delivered = 0; return 1; } if(!priv->just_synced) { if(stream_read_word(d->stream) != (('A'<<8)|'V')) { mp_msg(MSGT_DEMUX,MSGL_V,"demux_pva: pva_get_payload() missed a SyncWord at %"PRId64"!! Trying to sync.../n",(int64_t)stream_tell(d->stream)); if(!pva_sync(d)) { if (!d->stream->eof) { mp_msg(MSGT_DEMUX,MSGL_ERR,"demux_pva: couldn't sync! (broken file?)"); } return 0; } } } if(priv->just_synced) { payload->type=priv->synced_stream_id; priv->just_synced=0; } else { payload->type=stream_read_char(d->stream); stream_skip(d->stream,2); //counter and reserved } flags=stream_read_char(d->stream); payload->is_packet_start=flags & 0x10; pack_size=stream_read_word(d->stream); mp_msg(MSGT_DEMUX,MSGL_DBG2,"demux_pva::pva_get_payload(): pack_size=%u field read at offset %"PRIu64"/n",pack_size,(int64_t)stream_tell(d->stream)-2); pva_payload_start=stream_tell(d->stream); /* * The code in the #ifdef directive below is a hack needed to get badly formatted PVA files * such as the ones written by MultiDec played back correctly. * Basically, it works like this: if the PVA packet does not signal a PES header, but the * payload looks like one, let's assume it IS one. It has worked for me up to now. * It can be disabled since it's quite an ugly hack and could potentially break things up * if the PVA audio payload happens to start with 0x000001 even without being a non signalled * PES header start. * Though it's quite unlikely, it potentially could (AFAIK). */#ifdef DEMUX_PVA_MULTIDEC_HACK if(payload->type==MAINAUDIOSTREAM) { stream_read(d->stream,buffer,3); if(buffer[0]==0x00 && buffer[1]==0x00 && buffer[2]==0x01 && !payload->is_packet_start) { mp_msg(MSGT_DEMUX,MSGL_V,"demux_pva: suspecting non signaled audio PES packet start. Maybe file by MultiDec?/n"); payload->is_packet_start=1; } stream_seek(d->stream,stream_tell(d->stream)-3); }#endif//.........这里部分代码省略.........
开发者ID:github188,项目名称:NewCool-UC-3.1.0-priv,代码行数:101,
示例22: demux_probe_aac_adif// returns DEMUXER_TYPE_AAC_ADIF if this is an ADIF file, 0 otherwise.static int demux_probe_aac_adif(demuxer_t *demuxer){ char c; int i; int len, srate, num; off_t init, probed; aac_adif_priv_t *priv; aac_adif_hdr_contents* hdr; if(! demux_aac_adif_init(demuxer)) { mp_msg(MSGT_DEMUX, MSGL_ERR, "Couldn't init ADIF demuxer, exit/n"); return 0; } priv = (aac_adif_priv_t *) demuxer->priv; hdr = priv->hdr; stream_seek(demuxer->stream, 0); c = stream_read_char(demuxer->stream); if (c != 'A') goto fail; c = stream_read_char(demuxer->stream); if (c != 'D') goto fail; c = stream_read_char(demuxer->stream); if (c != 'I') goto fail; c = stream_read_char(demuxer->stream); if (c != 'F') goto fail; resync_adif_bit_reader(); if (hdr->copyright_id_present = get_adif_onebit(demuxer)) { for (i = 0; i < 9; i++) hdr->copyright_id[i] = get_adif_bits(demuxer,8); } hdr->original_copy = get_adif_onebit(demuxer); hdr->home = get_adif_onebit(demuxer); hdr->bitstream_type = get_adif_onebit(demuxer); hdr->bitrate = get_adif_bits(demuxer,23); priv->bitrate = hdr->bitrate; if (hdr->num_pces = (get_adif_bits(demuxer,4) + 1)) { if (hdr->bitstream_type == 0) { if (! (hdr->buffer_fullness = (unsigned int*) calloc(hdr->num_pces, 20))) { mp_msg(MSGT_DEMUX, MSGL_ERR, "Could/'t initialise the ADIF buffer_fullness memory, exit/n"); return 0; } } else hdr->buffer_fullness = 0; if (! (hdr->pces = (aac_adif_prog_config_elt*) calloc(hdr->num_pces, sizeof(aac_adif_prog_config_elt)))) { mp_msg(MSGT_DEMUX, MSGL_ERR, "Could/'t initialise the ADIF program config element memory, exit/n"); return 0; } for (i = 0; i < hdr->num_pces; i++) { if ((hdr->bitstream_type == 0) && (hdr->buffer_fullness)) hdr->buffer_fullness[i] = get_adif_bits(demuxer,20); if (hdr->pces) read_adif_pce(demuxer, &hdr->pces[i]); } } else { hdr->buffer_fullness = 0; hdr->pces = 0; } init = probed = stream_tell(demuxer->stream); priv->hdrlen = stream_tell(demuxer->stream); mp_msg(MSGT_DEMUX, MSGL_V, "demux_aac_adif_probe, INIT: %"PRIu64", PROBED: %"PRIu64"/n", init, probed); return DEMUXER_TYPE_AAC_ADIF;fail: mp_msg(MSGT_DEMUX, MSGL_V, "demux_aac_adif_probe, failed to detect an AAC_ADIF stream/n"); return 0;}
开发者ID:dr4g0nsr,项目名称:mplayer-skyviia-8860,代码行数:89,
示例23: read_adif_pcestatic void read_adif_pce(demuxer_t *demuxer, aac_adif_prog_config_elt *elt){ int i; aac_adif_priv_t *priv = (aac_adif_priv_t *) demuxer->priv; elt->element_instance_tag = (char) get_adif_bits(demuxer, 4); elt->object_type = (char) get_adif_bits(demuxer, 2); elt->sampling_frequency_index = (char) get_adif_bits(demuxer, 4); if ((priv->srate == 0) && (elt->sampling_frequency_index >= 0) && (elt->sampling_frequency_index < NUM_SAMPLE_RATES)) priv->srate = sample_rates[elt->sampling_frequency_index]; elt->num_front_channel_elements = (char) get_adif_bits(demuxer, 4); elt->num_side_channel_elements = (char) get_adif_bits(demuxer, 4); elt->num_back_channel_elements = (char) get_adif_bits(demuxer, 4); elt->num_lfe_channel_elements = (char) get_adif_bits(demuxer, 2); elt->num_assoc_data_elements = (char) get_adif_bits(demuxer, 3); elt->num_valid_cc_elements = (char) get_adif_bits(demuxer, 4); elt->mono_mixdown_present = (char) get_adif_bits(demuxer, 1); if (elt->mono_mixdown_present) elt->mono_mixdown_element_number = (char) get_adif_bits(demuxer, 4); elt->stereo_mixdown_present = (char) get_adif_bits(demuxer, 1); if (elt->stereo_mixdown_present) elt->stereo_mixdown_element_number = (char) get_adif_bits(demuxer, 4); elt->matrix_mixdown_idx_present = (char) get_adif_bits(demuxer, 1); if (elt->matrix_mixdown_idx_present){ elt->matrix_mixdown_idx = (char) get_adif_bits(demuxer, 2); elt->pseudo_surround_enable = (char) get_adif_bits(demuxer, 1); } if (elt->num_front_channel_elements) { elt->front_elements = (pce_element_info*) calloc(elt->num_front_channel_elements, sizeof(pce_element_info)); for (i = 0; i < elt->num_front_channel_elements; i++) read_adif_pce_element_info(demuxer, &elt->front_elements[i]); } else elt->front_elements = 0; if (elt->num_side_channel_elements) { elt->side_elements = (pce_element_info*) calloc(elt->num_side_channel_elements, sizeof(pce_element_info)); for (i = 0; i < elt->num_side_channel_elements; i++) read_adif_pce_element_info(demuxer, &elt->side_elements[i]); } else elt->side_elements = 0; if (elt->num_back_channel_elements) { elt->back_elements = (pce_element_info*) calloc(elt->num_back_channel_elements, sizeof(pce_element_info)); for (i = 0; i < elt->num_back_channel_elements; i++) read_adif_pce_element_info(demuxer, &elt->back_elements[i]); } else elt->back_elements = 0; if (elt->num_lfe_channel_elements) { elt->lfe_elt_tag_selecti = (char*) malloc(elt->num_lfe_channel_elements); for (i = 0; i < elt->num_lfe_channel_elements; i++) elt->lfe_elt_tag_selecti[i] = (char) get_adif_bits(demuxer, 4); } else elt->lfe_elt_tag_selecti = 0; if (elt->num_assoc_data_elements) { elt->assoc_data_tag_selecti = (char*) malloc(elt->num_assoc_data_elements); for (i = 0; i < elt->num_assoc_data_elements; i++) elt->assoc_data_tag_selecti[i] = (char) get_adif_bits(demuxer, 4); } else elt->assoc_data_tag_selecti = 0; if (elt->num_valid_cc_elements) { elt->cc_elements = (pce_element_info*) calloc(elt->num_valid_cc_elements, sizeof(pce_element_info));; for (i = 0; i < elt->num_back_channel_elements; i++) read_adif_pce_element_info(demuxer, &elt->cc_elements[i]); } else elt->cc_elements = 0; resync_adif_bit_reader(); if (elt->comment_field_bytes = stream_read_char(demuxer->stream)) { elt->comment_field_data = (char*) malloc(elt->comment_field_bytes); for (i = 0; i < elt->comment_field_bytes; i++) elt->comment_field_data[i] = stream_read_char(demuxer->stream); } else elt->comment_field_data = 0;}
开发者ID:dr4g0nsr,项目名称:mplayer-skyviia-8860,代码行数:96,
示例24: if((c>>6)==1){ // Read (skip) STD scale & size value// printf(" STD_scale=%d",(c>>5)&1); d=((c&0x1F)<<8)|stream_read_char(demux->stream); len-=2;// printf(" STD_size=%d",d); c=stream_read_char(demux->stream); } // Read System-1 stream timestamps: if((c>>4)==2){ pts=read_mpeg_timestamp(demux->stream,c); set_pts=1; len-=4; } else if((c>>4)==3){ pts=read_mpeg_timestamp(demux->stream,c); c=stream_read_char(demux->stream); if((c>>4)!=1) pts=0; //printf("{ERROR4}"); else set_pts = 1; dts=read_mpeg_timestamp(demux->stream,c); len-=4+1+4; } else if((c>>6)==2){ int pts_flags; int hdrlen; int parse_ext2; // System-2 (.VOB) stream: c=stream_read_char(demux->stream); pts_flags=c>>6; parse_ext2 = (id == 0x1FD) && ((c & 0x3F) == 1); c=stream_read_char(demux->stream); hdrlen=c;
开发者ID:andyzsmith,项目名称:mplayer,代码行数:31,
注:本文中的stream_read_char函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 C++ stream_read_tree函数代码示例 C++ stream_putw_at函数代码示例 |