Beispiel #1
0
def encodeSei(parser):
	origPps = h264Dump.get_pps()
	h264Dump.set_pps(encodeParser)
	
	tempEncoder = BitParser()
	tempEncoder.init_encoder()
	for payloadType in parser.seiPayloadTypes:
		tempEncoder.bitData += encodeSeiPayload(parser, payloadType)
	tempEncoder.encode_rbsp_trailing_bits()
	
	parser.bitData = tempEncoder.bitData
	
	h264Dump.set_pps(origPps)
Beispiel #2
0
def encodeSei(parser):
    origPps = h264Dump.get_pps()
    h264Dump.set_pps(encodeParser)

    tempEncoder = BitParser()
    tempEncoder.init_encoder()
    for payloadType in parser.seiPayloadTypes:
        tempEncoder.bitData += encodeSeiPayload(parser, payloadType)
    tempEncoder.encode_rbsp_trailing_bits()

    parser.bitData = tempEncoder.bitData

    h264Dump.set_pps(origPps)
Beispiel #3
0
def walkNalPackets(rawVideoData):
	global encodeParser
	
	spsDict = {}
	curPps = None
	nalPacketStart = rawVideoData.find('\x00\x00\x01')
	while nalPacketStart >= 0 and nalPacketStart < len(rawVideoData):
		nalPacketEnd = rawVideoData.find('\x00\x00\x01', nalPacketStart + 1)
		if nalPacketEnd < 0:
			nalPacketEnd = len(rawVideoData)
		nalPacket = rawVideoData[(nalPacketStart + 3):nalPacketEnd]
		nalPacket = nalPacket.rstrip('\0')
		
		nalPacketType = ord(nalPacket[0]) & 0x1F
		print 'packet type %s' % nalPacketType
		if not nalPacketType in [6, 7, 8, 9]:
			nalPacketStart = nalPacketEnd
			continue

		# parse the packet
		parser = BitParser()
		parser.init_decoder(decodeEmulationPrevention(nalPacket[1:]))
		if nalPacketType == 9:
			print '==== NAL_AUD ===='
			h264Dump.access_unit_delimiter_rbsp(parser)
			print parser
		if nalPacketType == 8:
			print '==== NAL_PPS ===='
			h264Dump.pic_parameter_set_rbsp(parser)
			print parser
			# merge the sequence parameter set
			for curKey, curValue in spsDict[parser.seq_parameter_set_id].__dict__.items():
				if not hasattr(parser, curKey):
					setattr(parser, curKey, curValue)
			h264Dump.set_pps(parser)
		if nalPacketType == 6:
			print '==== NAL_SEI ===='
			h264Dump.sei_rbsp(parser)
			print parser
			
			'''
			# update parameters
			if 1 in parser.seiPayloadTypes:
				parser = copyParser(parser)
				parser.clock_timestamp_flag_i_ = 0
				replacePacket(parser, nalPacket, encodeSei)
			'''
		if nalPacketType == 7:
			print '==== NAL_SPS ===='
			h264Dump.seq_parameter_set_rbsp(parser)
			spsDict[parser.seq_parameter_set_id] = parser
			print parser
			
			'''
			# update parameters
			encodeParser = copyParser(parser)
			
			encodeParser.initial_cpb_removal_delay_length_minus1=20
			encodeParser.cpb_removal_delay_length_minus1=12
			encodeParser.dpb_output_delay_length_minus1=6
			encodeParser.time_offset_length=0

			# encode the result
			replacePacket(encodeParser, nalPacket, h264Dump.seq_parameter_set_rbsp)
			'''
			
		nalPacketStart = nalPacketEnd
Beispiel #4
0
def walkNalPackets(rawVideoData):
    global encodeParser

    spsDict = {}
    curPps = None
    nalPacketStart = rawVideoData.find('\x00\x00\x01')
    while nalPacketStart >= 0 and nalPacketStart < len(rawVideoData):
        nalPacketEnd = rawVideoData.find('\x00\x00\x01', nalPacketStart + 1)
        if nalPacketEnd < 0:
            nalPacketEnd = len(rawVideoData)
        nalPacket = rawVideoData[(nalPacketStart + 3):nalPacketEnd]
        nalPacket = nalPacket.rstrip('\0')

        nalPacketType = ord(nalPacket[0]) & 0x1F
        print 'packet type %s' % nalPacketType
        if not nalPacketType in [6, 7, 8, 9]:
            nalPacketStart = nalPacketEnd
            continue

        # parse the packet
        parser = BitParser()
        parser.init_decoder(decodeEmulationPrevention(nalPacket[1:]))
        if nalPacketType == 9:
            print '==== NAL_AUD ===='
            h264Dump.access_unit_delimiter_rbsp(parser)
            print parser
        if nalPacketType == 8:
            print '==== NAL_PPS ===='
            h264Dump.pic_parameter_set_rbsp(parser)
            print parser
            # merge the sequence parameter set
            for curKey, curValue in spsDict[
                    parser.seq_parameter_set_id].__dict__.items():
                if not hasattr(parser, curKey):
                    setattr(parser, curKey, curValue)
            h264Dump.set_pps(parser)
        if nalPacketType == 6:
            print '==== NAL_SEI ===='
            h264Dump.sei_rbsp(parser)
            print parser
            '''
			# update parameters
			if 1 in parser.seiPayloadTypes:
				parser = copyParser(parser)
				parser.clock_timestamp_flag_i_ = 0
				replacePacket(parser, nalPacket, encodeSei)
			'''
        if nalPacketType == 7:
            print '==== NAL_SPS ===='
            h264Dump.seq_parameter_set_rbsp(parser)
            spsDict[parser.seq_parameter_set_id] = parser
            print parser
            '''
			# update parameters
			encodeParser = copyParser(parser)
			
			encodeParser.initial_cpb_removal_delay_length_minus1=20
			encodeParser.cpb_removal_delay_length_minus1=12
			encodeParser.dpb_output_delay_length_minus1=6
			encodeParser.time_offset_length=0

			# encode the result
			replacePacket(encodeParser, nalPacket, h264Dump.seq_parameter_set_rbsp)
			'''

        nalPacketStart = nalPacketEnd