Mercurial > mplayer.hg
comparison libmpdemux/demux_ts.c @ 20478:c8bc7d300bb3
in ts_parse() centralized stream_read()+stream_skip(); smaller and cleaner
author | nicodvb |
---|---|
date | Sat, 28 Oct 2006 17:42:25 +0000 |
parents | e7474c33f072 |
children | d8dc67f94d5e |
comparison
equal
deleted
inserted
replaced
20477:de4a66d99f41 | 20478:c8bc7d300bb3 |
---|---|
2859 | 2859 |
2860 mp_msg(MSGT_DEMUX, MSGL_DBG2, "NOW PACKET_SIZE = %d, DP_OFFSET = %d\n", *buffer_size, *dp_offset); | 2860 mp_msg(MSGT_DEMUX, MSGL_DBG2, "NOW PACKET_SIZE = %d, DP_OFFSET = %d\n", *buffer_size, *dp_offset); |
2861 } | 2861 } |
2862 | 2862 |
2863 | 2863 |
2864 if(probe) | |
2865 { | |
2866 p = &packet[base]; | |
2867 } | |
2868 else //feeding | |
2869 { | |
2870 if(*dp_offset + buf_size > *buffer_size) | |
2871 { | |
2872 *buffer_size = *dp_offset + buf_size + TS_FEC_PACKET_SIZE; | |
2873 resize_demux_packet(*dp, *buffer_size); | |
2874 } | |
2875 p = &((*dp)->buffer[*dp_offset]); | |
2876 } | |
2877 | |
2878 buf_size = stream_read(stream, p, buf_size); | |
2879 if(buf_size==-1) | |
2880 { | |
2881 mp_msg(MSGT_DEMUX, MSGL_DBG2, "\r\nts_parse() couldn't read data\r\n"); | |
2882 continue; | |
2883 } | |
2884 stream_skip(stream, junk); | |
2864 | 2885 |
2865 if(is_start) | 2886 if(is_start) |
2866 { | 2887 { |
2867 uint8_t *lang = NULL; | 2888 uint8_t *lang = NULL; |
2868 | 2889 |
2869 mp_msg(MSGT_DEMUX, MSGL_DBG2, "IS_START\n"); | 2890 mp_msg(MSGT_DEMUX, MSGL_DBG2, "IS_START\n"); |
2870 | |
2871 p = &packet[base]; | |
2872 stream_read(stream, p, buf_size); | |
2873 stream_skip(stream, junk); | |
2874 | 2891 |
2875 len = pes_parse2(p, buf_size, es, pid_type, pmt, pid); | 2892 len = pes_parse2(p, buf_size, es, pid_type, pmt, pid); |
2876 if(! len) | 2893 if(! len) |
2877 { | 2894 { |
2878 tss->is_synced = 0; | 2895 tss->is_synced = 0; |
2910 mp_msg(MSGT_DEMUX, MSGL_DBG2, "ts_parse, NEW pid=%d, PSIZE: %u, type=%X, start=%p, len=%d\n", | 2927 mp_msg(MSGT_DEMUX, MSGL_DBG2, "ts_parse, NEW pid=%d, PSIZE: %u, type=%X, start=%p, len=%d\n", |
2911 es->pid, es->payload_size, es->type, es->start, es->size); | 2928 es->pid, es->payload_size, es->type, es->start, es->size); |
2912 | 2929 |
2913 demuxer->filepos = stream_tell(demuxer->stream) - es->size; | 2930 demuxer->filepos = stream_tell(demuxer->stream) - es->size; |
2914 | 2931 |
2915 if(*dp_offset + es->size > *buffer_size) | 2932 memmove(p, es->start, es->size); |
2916 { | |
2917 *buffer_size = *dp_offset + es->size + TS_FEC_PACKET_SIZE; | |
2918 resize_demux_packet(*dp, *buffer_size); | |
2919 //we'll skip at least one RESIZE() in the next iteration of ts_parse() | |
2920 mp_msg(MSGT_DEMUX, MSGL_DBG2, "RESIZE DP TO %d\n", *buffer_size); | |
2921 } | |
2922 memcpy(&((*dp)->buffer[*dp_offset]), es->start, es->size); | |
2923 *dp_offset += es->size; | 2933 *dp_offset += es->size; |
2924 (*dp)->flags = 0; | 2934 (*dp)->flags = 0; |
2925 (*dp)->pos = stream_tell(demuxer->stream); | 2935 (*dp)->pos = stream_tell(demuxer->stream); |
2926 (*dp)->pts = es->pts; | 2936 (*dp)->pts = es->pts; |
2927 | 2937 |
2960 { | 2970 { |
2961 sz = es->size = buf_size; | 2971 sz = es->size = buf_size; |
2962 } | 2972 } |
2963 else | 2973 else |
2964 { | 2974 { |
2965 stream_skip(stream, buf_size+junk); | |
2966 continue; | 2975 continue; |
2967 } | 2976 } |
2968 } | 2977 } |
2969 | 2978 |
2970 | 2979 |
2971 if(! probe) | 2980 if(! probe) |
2972 { | 2981 { |
2973 if(*dp_offset + sz > *buffer_size) | |
2974 { | |
2975 *buffer_size = *dp_offset + sz + TS_FEC_PACKET_SIZE; | |
2976 resize_demux_packet(*dp, *buffer_size); | |
2977 //we'll skip at least one RESIZE() in the next iteration of ts_parse() | |
2978 mp_msg(MSGT_DEMUX, MSGL_DBG2, "RESIZE DP TO %d\n", *buffer_size); | |
2979 } | |
2980 | |
2981 stream_read(stream, &((*dp)->buffer[*dp_offset]), sz); | |
2982 *dp_offset += sz; | 2982 *dp_offset += sz; |
2983 | |
2984 if(buf_size - sz > 0) | |
2985 { | |
2986 stream_skip(stream, buf_size - sz); | |
2987 } | |
2988 stream_skip(stream, junk); | |
2989 | 2983 |
2990 if(*dp_offset >= MAX_PACK_BYTES) | 2984 if(*dp_offset >= MAX_PACK_BYTES) |
2991 { | 2985 { |
2992 (*dp)->pts = tss->last_pts; | 2986 (*dp)->pts = tss->last_pts; |
2993 retv = fill_packet(demuxer, ds, dp, dp_offset, si); | 2987 retv = fill_packet(demuxer, ds, dp, dp_offset, si); |
2996 | 2990 |
2997 continue; | 2991 continue; |
2998 } | 2992 } |
2999 else | 2993 else |
3000 { | 2994 { |
3001 stream_read(stream, es->start, sz); | 2995 memcpy(es->start, p, sz); |
3002 if(buf_size - sz) stream_skip(stream, buf_size-sz); | |
3003 stream_skip(stream, junk); | |
3004 | 2996 |
3005 if(es->size) | 2997 if(es->size) |
3006 return es->size; | 2998 return es->size; |
3007 else | 2999 else |
3008 continue; | 3000 continue; |