static u_char*
mss_playready_audio_write_extra_traf_atoms(void* ctx, u_char* p, size_t mdat_atom_start)
{
	mss_playready_audio_extra_traf_atoms_context* context = (mss_playready_audio_extra_traf_atoms_context*)ctx;
	size_t auxiliary_data_start;

	auxiliary_data_start = mdat_atom_start -
		(mp4_encrypt_audio_get_auxiliary_data_size(context->state) +
		context->state->saiz_atom_size +
		context->state->saio_atom_size);

	p = mss_playready_audio_write_uuid_piff_atom(p, context->state, context->state->sequence, context->uuid_piff_atom_size);
	p = mp4_encrypt_audio_write_saiz_saio(context->state, p, auxiliary_data_start);
	return p;
}
static u_char*
edash_packager_audio_write_encryption_atoms(void* context, u_char* p, size_t mdat_atom_start)
{
	mp4_encrypt_state_t* state = (mp4_encrypt_state_t*)context;
	size_t senc_data_size = MP4_AES_CTR_IV_SIZE * state->sequence->total_frame_count;
	size_t senc_atom_size = ATOM_HEADER_SIZE + sizeof(senc_atom_t) + senc_data_size;

	// saiz / saio
	p = mp4_encrypt_audio_write_saiz_saio(state, p, mdat_atom_start - senc_data_size);

	// senc
	write_atom_header(p, senc_atom_size, 's', 'e', 'n', 'c');
	write_be32(p, 0x0);		// flags
	write_be32(p, state->sequence->total_frame_count);
	p = mp4_encrypt_audio_write_auxiliary_data(state, p);

	return p;
}