You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	Simplify RoQ demuxer pts calculation by using a appropriate time bases.
Originally committed as revision 17946 to svn://svn.ffmpeg.org/ffmpeg/trunk
This commit is contained in:
		| @@ -46,8 +46,6 @@ typedef struct RoqDemuxContext { | ||||
|     int width; | ||||
|     int height; | ||||
|     int audio_channels; | ||||
|     int framerate; | ||||
|     int frame_pts_inc; | ||||
|  | ||||
|     int video_stream_index; | ||||
|     int audio_stream_index; | ||||
| @@ -71,6 +69,7 @@ static int roq_read_header(AVFormatContext *s, | ||||
| { | ||||
|     RoqDemuxContext *roq = s->priv_data; | ||||
|     ByteIOContext *pb = s->pb; | ||||
|     int framerate; | ||||
|     AVStream *st; | ||||
|     unsigned char preamble[RoQ_CHUNK_PREAMBLE_SIZE]; | ||||
|  | ||||
| @@ -78,8 +77,7 @@ static int roq_read_header(AVFormatContext *s, | ||||
|     if (get_buffer(pb, preamble, RoQ_CHUNK_PREAMBLE_SIZE) != | ||||
|         RoQ_CHUNK_PREAMBLE_SIZE) | ||||
|         return AVERROR(EIO); | ||||
|     roq->framerate = AV_RL16(&preamble[6]); | ||||
|     roq->frame_pts_inc = 90000 / roq->framerate; | ||||
|     framerate = AV_RL16(&preamble[6]); | ||||
|  | ||||
|     /* init private context parameters */ | ||||
|     roq->width = roq->height = roq->audio_channels = roq->video_pts = | ||||
| @@ -89,8 +87,7 @@ static int roq_read_header(AVFormatContext *s, | ||||
|     st = av_new_stream(s, 0); | ||||
|     if (!st) | ||||
|         return AVERROR(ENOMEM); | ||||
|     /* set the pts reference (1 pts = 1/90000) */ | ||||
|     av_set_pts_info(st, 33, 1, 90000); | ||||
|     av_set_pts_info(st, 63, 1, framerate); | ||||
|     roq->video_stream_index = st->index; | ||||
|     st->codec->codec_type = CODEC_TYPE_VIDEO; | ||||
|     st->codec->codec_id = CODEC_ID_ROQ; | ||||
| @@ -161,9 +158,8 @@ static int roq_read_packet(AVFormatContext *s, | ||||
|             if (ret != chunk_size) | ||||
|                 return AVERROR(EIO); | ||||
|             pkt->stream_index = roq->video_stream_index; | ||||
|             pkt->pts = roq->video_pts; | ||||
|             pkt->pts = roq->video_pts++; | ||||
|  | ||||
|             roq->video_pts += roq->frame_pts_inc; | ||||
|             packet_read = 1; | ||||
|             break; | ||||
|  | ||||
| @@ -173,7 +169,7 @@ static int roq_read_packet(AVFormatContext *s, | ||||
|                 AVStream *st = av_new_stream(s, 1); | ||||
|                 if (!st) | ||||
|                     return AVERROR(ENOMEM); | ||||
|                 av_set_pts_info(st, 33, 1, 90000); | ||||
|                 av_set_pts_info(st, 32, 1, RoQ_AUDIO_SAMPLE_RATE); | ||||
|                 roq->audio_stream_index = st->index; | ||||
|                 st->codec->codec_type = CODEC_TYPE_AUDIO; | ||||
|                 st->codec->codec_id = CODEC_ID_ROQ_DPCM; | ||||
| @@ -194,13 +190,10 @@ static int roq_read_packet(AVFormatContext *s, | ||||
|  | ||||
|             if (chunk_type == RoQ_QUAD_VQ) { | ||||
|                 pkt->stream_index = roq->video_stream_index; | ||||
|                 pkt->pts = roq->video_pts; | ||||
|                 roq->video_pts += roq->frame_pts_inc; | ||||
|                 pkt->pts = roq->video_pts++; | ||||
|             } else { | ||||
|                 pkt->stream_index = roq->audio_stream_index; | ||||
|                 pkt->pts = roq->audio_frame_count; | ||||
|                 pkt->pts *= 90000; | ||||
|                 pkt->pts /= RoQ_AUDIO_SAMPLE_RATE; | ||||
|                 roq->audio_frame_count += (chunk_size / roq->audio_channels); | ||||
|             } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user