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)
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
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